【MySQL】1. MySQL安装

【MySQL】1. MySQL安装

目录

1.安装MySQL

(默认安装 Ubuntu22.04 官方源中的 MySQL 8.0 版本,最稳定且推荐):

第一步:更新 Ubuntu 系统软件源

首先登录 Ubuntu22.04(桌面版或服务器版均可),打开终端(桌面版可通过Ctrl+Alt+T快速调出),执行更新命令,确保系统软件包列表最新,避免安装依赖冲突:

sudoapt update sudoapt upgrade -y # 可选,升级已安装的软件包,提升系统稳定性

执行时会提示输入当前用户的密码(输入时终端不显示明文,输入完成回车即可),sudo表示以管理员权限执行命令。

第二步:安装 MySQL 服务器

Ubuntu22.04 的官方软件源中已包含 MySQL 服务器包,直接通过apt命令安装即可,命令如下:

sudoaptinstall mysql-server -y 

安装过程无需手动干预,系统会自动下载、解压并配置 MySQL 的基础运行环境,包括创建 MySQL 系统用户、生成默认配置文件等。

第三步:安全初始化配置 MySQL(关键步骤)

MySQL 安装完成后,默认安全性较低(如允许匿名用户登录、无密码验证等),需通过官方提供的mysql_secure_installation脚本进行安全配置,执行命令:

sudo mysql_secure_installation 

执行后会进入交互式配置流程,按以下步骤逐一操作:

  1. 是否启用 MySQL 密码验证组件(VALIDATE PASSWORD COMPONENT)提示:Would you like to setup VALIDATE PASSWORD component?输入y(是),回车(该组件用于校验密码强度,提升安全性,推荐启用)。
  2. 设置密码强度级别提示:There are three levels of password validation policy:可选 3 个级别:0(低,仅需密码长度≥8)、1(中,需包含数字、小写字母、大写字母 / 特殊字符)、2(高,需包含数字、大小写字母、特殊字符且不能包含用户名 / 常见字符串)。输入对应数字(推荐1,兼顾安全性和易用性),回车。
  3. 设置 MySQL root 用户密码提示:Please set the password for root here.输入你要设置的 root 密码(建议符合强度要求,如Root@123456),回车,然后再次输入相同密码确认,回车。
  4. 删除匿名用户提示:Remove anonymous users?输入y,回车(匿名用户存在安全风险,禁止匿名登录)。
  5. 禁止 root 用户远程登录提示:Disallow root login remotely?先输入y,回车(默认禁止 root 远程登录,如需远程连接,后续可单独配置专用用户,更安全)。
  6. 删除测试数据库(test)提示:Remove test database and access to it?输入y,回车(test 数据库为默认测试用,无实际业务用途,删除可减少安全隐患)。
  7. 刷新权限表,使配置生效提示:Reload privilege tables now?输入y,回车(立即刷新 MySQL 的权限配置,无需重启服务即可生效)。
Disallow root login remotely? 这个问题选择y还是n

答:推荐选择 y(禁止 root 用户远程登录)

第四步:验证 MySQL 服务运行状态

MySQL 安装完成后会自动启动,并设置为开机自启,可通过以下命令验证服务是否正常运行:

# 查看MySQL服务状态sudo systemctl status mysql 

若输出结果中包含active (running)(绿色字体),说明 MySQL 服务已正常启动。

补充相关服务管理命令(后续可按需使用):

# 启动MySQL服务(若未启动)sudo systemctl start mysql # 停止MySQL服务sudo systemctl stop mysql # 重启MySQL服务(配置修改后需生效时使用)sudo systemctl restart mysql # 设置MySQL开机自启(默认已开启,可再次确认)sudo systemctl enable mysql 

第五步:登录 MySQL 数据库,验证安装结果

Ubuntu22.04 中安装的 MySQL 8.0,默认对本地root用户采用auth_socket认证方式(而非密码认证),因此本地登录有两种方式:

方式 1:无需密码,直接以管理员身份登录(推荐本地操作)

sudo mysql -u root 

执行后直接进入 MySQL 的命令行界面(提示符变为mysql>),表示登录成功。

方式 2:通过密码登录(需修改 root 用户认证方式)

若想通过mysql -u root -p输入密码登录,需先修改 root 用户的认证插件为mysql_native_password,步骤如下:

  1. 先通过方式 1 登录 MySQL 命令行,执行以下 SQL 语句(替换'你的root密码'为第三步设置的密码):
ALTERUSER'root'@'localhost' IDENTIFIED WITH mysql_native_password BY'你的root密码';-- 刷新权限,使修改生效 FLUSH PRIVILEGES;
  1. 执行exit;退出 MySQL 命令行,然后通过密码登录:
mysql -u root -p 
  1. 输入第三步设置的 root 密码,回车即可登录 MySQL 命令行。

验证登录成功

进入 MySQL 命令行后,可执行简单 SQL 语句验证功能正常:

-- 查看MySQL版本SELECT VERSION();-- 查看所有数据库SHOWDATABASES;

执行后会返回对应结果,说明 MySQL 运行正常,安装完成。

总结

  1. 核心流程:更新软件源 → 安装mysql-server → 安全初始化mysql_secure_installation → 验证服务与登录。
  2. 关键注意点:Ubuntu22.04 的 MySQL 8.0 默认采用auth_socket本地认证,密码登录需修改认证插件。
  3. 远程访问需配置:绑定 0.0.0.0 + 创建远程用户 + 开放 3306 端口 + 重启 MySQL。
  4. 验证标准:能进入mysql>命令行并执行 SQL 语句,即为安装成功。

2. 相关配置

2.1 MySQL 配置文件核心存放位置

Ubuntu 22.04 中的 MySQL 8.0,核心配置文件(服务端配置)/etc/mysql/mysql.conf.d/mysqld.cnf,所有关于 MySQL 服务端的配置(端口、数据目录、编码、存储引擎等)都在这个文件中修改。

补充说明:

  1. 全局配置文件 /etc/mysql/my.cnf:该文件通常不直接编辑,它会通过 !includedir 指令包含其他目录下的配置文件(包括 mysql.conf.d 目录),起到统一整合配置的作用。
  2. 编辑配置文件需要管理员权限,推荐使用 nanovim 编辑,例如:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

2.2 配置修改

2.2.1 推荐修改配置

[mysqld]# 1. 端口号 port =3306# 2. 数据目录 datadir =/var/lib/mysql # 3. Socket文件(默认) socket =/var/run/mysqld/mysqld.sock # 4. 完整UTF-8编码配置character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 5. 默认存储引擎default-storage-engine=InnoDB# 以下为文件原有默认配置,保留即可,无需修改 pid-file=/var/run/mysqld/mysqld.pid user= mysql # ... 其他原有配置

2.2.2 配置修改后的后续操作

  1. 保存配置并退出编辑
    • 若使用 nano 编辑:按 Ctrl+O 保存,按 Ctrl+X 退出。
    • 若使用 vim 编辑:按 Esc,输入 :wq 回车保存退出。

验证配置是否生效(登录 MySQL 命令行执行以下 SQL)

-- 查看端口、编码、存储引擎等配置信息SHOW VARIABLES LIKE'port';SHOW VARIABLES LIKE'datadir';SHOW VARIABLES LIKE'character_set_server';SHOW VARIABLES LIKE'default_storage_engine';

输出结果与你配置的内容一致,即表示配置生效。

重启 MySQL 服务,使配置生效

sudo systemctl restart mysql 

验证配置语法(避免语法错误导致服务无法启动)

sudo mysqld --help --verbose |grep -E 'port|datadir|character-set-server'

若输出无报错,且能看到你配置的参数值,说明语法无误。

总结:

  1. 核心配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld] 节点下修改)。
  2. 5 项配置核心:端口 3306、数据目录/var/lib/mysql、socket 默认保留、编码utf8mb4、存储引擎InnoDB
  3. 关键步骤:修改后重启 MySQL 服务,通过 SQL 语句验证配置是否生效。
  4. 编码避坑:MySQL 中优先使用 utf8mb4 而非 utf8,兼容完整标准 UTF-8。

3. 相关问题

在/var/lib/mysql中有binlog.000095类似这种文件,从1到100多,这是什么文件?

/var/lib/mysql 目录下 binlog.000095 这类序号递增文件的含义,其实这些文件是 MySQL 的二进制日志文件(Binary Log,简称 binlog),是 MySQL 中非常重要的日志类型。binlog 主要记录了 MySQL 中所有对数据库数据产生修改的操作(增、删、改,即 DML 操作;以及建库、建表等 DDL 操作),不会记录查询操作(如 SELECTSHOW)。

正确的 binlog 删除方式(推荐 2 种,禁止直接 rm)

方式 1:配置自动过期清理(推荐,长期省心,无人工失误风险)

这是最优解,通过 MySQL 配置自动清理过期 binlog,无需手动干预,且会自动更新binlog.index索引文件,步骤如下:

  1. 生效后,MySQL 会自动检测并清理超过 7 天的 binlog 文件,且同步更新binlog.index,安全无风险。

保存退出,重启 MySQL 服务使配置生效:

sudo systemctl restart mysql 

[mysqld]节点下添加过期清理配置(以保留 7 天为例):

# MySQL 8.0 推荐配置(单位:秒,604800秒=7天) binlog_expire_logs_seconds = 604800 
补充:若为 MySQL 5.7,可配置expire_logs_days = 7(单位:天),MySQL 8.0 也兼容该配置,但优先推荐binlog_expire_logs_seconds(精度更高)。

编辑 MySQL 配置文件/etc/mysql/mysql.conf.d/mysqld.cnf

sudonano /etc/mysql/mysql.conf.d/mysqld.cnf 

方式 2:通过 MySQL 命令手动清理(规范操作,适合临时清理)

若需要临时清理部分 binlog 文件,必须通过 MySQL 内置命令执行(而非rm),命令会自动更新binlog.index,步骤如下:

  1. 登录 MySQL 命令行(sudo mysql -u root)。
  2. 执行完成后,退出 MySQL 命令行,可通过cat /var/lib/mysql/binlog.index验证,被删除的 binlog 文件名已从索引文件中移除。

执行以下清理命令(二选一,谨慎操作):

-- 方式A:删除所有序号小于 binlog.000095 的binlog文件(保留 binlog.000095 及以后的文件)PURGEBINARY LOGS TO'binlog.000095';-- 方式B:删除2026-01-01 00:00:00 之前生成的所有binlog文件(替换为你的目标时间)PURGEBINARY LOGS BEFORE '2026-01-01 00:00:00';

…过云雨-ZEEKLOG博客

Read more

排序算法指南:快速排序(非递归)

排序算法指南:快速排序(非递归)

前言:          本文将通过图解与代码相结合的方式,详细介绍快速排序的非递归实现方法。虽然前文已展示递归实现方案,但在实际面试中,面试官更倾向于考察非递归版本的实现。这种实现方式不仅能加深对算法的理解,还能展现应聘者对栈结构的掌握程度。          一、非递归实现快排的思路          1.1核心原理:手动模拟栈                   在标准的递归快速排序中,当我们写下 quickSort(a,left, right) 时,系统会自动分配一块内存(函数调用栈)来记住当前的 left 和 right 是多少,以及函数执行完后该回到哪里。         在非递归版本中,我们不需要系统帮忙,而是自己创建一个栈(Stack)数据结构。          1.2核心操作:用栈存取数组区间          ① 向栈中存储操作:存储每一次需要排序的子数组的起止下标(begin,end)。                                  由于栈的特性是先进后出,我们优先处理左区间,再处理右区间,类似于二叉树的前序操

By Ne0inhk
《算法闯关指南:优选算法--位运算》--36.两个整数之和,37.只出现一次的数字 ||

《算法闯关指南:优选算法--位运算》--36.两个整数之和,37.只出现一次的数字 ||

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 36. 两个整数之和 * 解法(位运算): * 算法思路: * C++算法代码: * 算法总结&&笔记展示: * 37.只出现一次的数字 || * 解法(比特位计数): * 算法思路: * C++算法代码: * 算法总结&&笔记展示: * 结尾: 前言: 聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“

By Ne0inhk
Redis高级数据结构实战:从Stream到HyperLogLog的深度解析

Redis高级数据结构实战:从Stream到HyperLogLog的深度解析

目录 📖 摘要 🎯 第一章:为什么Redis高级特性如此重要? 1.1 我的Redis踩坑史 1.2 Redis vs 其他中间件的实战对比 1.3 Python + Redis的黄金组合 🏗️ 第二章:Redis Stream - 轻量级消息队列的王者 2.1 Stream设计哲学:为什么不是List/PubSub? 2.2 Stream消费组架构设计 📊 第三章:HyperLogLog - 海量基数统计的魔法 3.1 HyperLogLog算法原理 3.2 HyperLogLog实战:实时UV统计系统 🔒 第四章:分布式锁 - 高并发下的数据安全 4.1 分布式锁设计模式 4.2 分布式锁实战:

By Ne0inhk
Flutter 三方库 linalg 的鸿蒙化适配指南 - 掌控高性能线性代数、矩阵运算实战、鸿蒙级算法中枢

Flutter 三方库 linalg 的鸿蒙化适配指南 - 掌控高性能线性代数、矩阵运算实战、鸿蒙级算法中枢

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 linalg 的鸿蒙化适配指南 - 掌控高性能线性代数、矩阵运算实战、鸿蒙级算法中枢 在鸿蒙跨平台应用处理 3D 图形变换、复杂的信号处理(DSP)或是端侧的小型机器学习模型时,高效的矩阵(Matrix)与向量(Vector)运算是一切算法的基石。如果你不想手写枯燥且易错的嵌套循环。今天我们要深度解析的 linalg——一个纯 Dart 实现的、遵循线性代数标准的专业级数学库,正是帮你搭建“算法堡垒”的数字基石。 前言 linalg 提供了一套直观且功能完备的线性代数 API。它不仅支持基础的向量加减、点积(Dot Product)和叉积(Cross Product),还涵盖了复杂的矩阵乘法、转置(Transpose)以及行列式计算。在鸿蒙端项目中,

By Ne0inhk