在服务端开发中,MySQL 作为核心数据库中间件,承载着大量业务数据。本文将基于 Ubuntu 22.04 环境,手把手带你完成 MySQL 8.0 的安装、安全初始化、核心配置以及常见问题处理,帮助你快速搭建可靠的数据库服务。

为什么选择 Ubuntu 22.04 与 MySQL 8.0?

Ubuntu 22.04 LTS 是当前最稳定的长期支持版本之一,其官方软件源内置了 MySQL 8.0,这意味着你可以通过简单的包管理命令完成安装,无需手动编译或添加第三方仓库。MySQL 8.0 在性能、安全性和功能上相比旧版有显著提升,例如支持窗口函数、通用表表达式等高级特性,是当前后端开发的主流选择。

第一步:更新软件源,确保依赖干净

在开始安装前,务必先更新系统软件包列表,避免因依赖冲突导致安装失败。打开终端(桌面版可通过快捷键 Ctrl+Alt+T 快速调出),执行以下命令:

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

输入当前用户密码(终端不显示明文)后,系统会同步最新的软件源信息。注意,sudo 表示以管理员权限执行,这是后续所有安装操作的基础。

第二步:安装 MySQL 服务器

Ubuntu 官方源已包含 MySQL 服务器包,直接使用 apt 命令安装即可:

sudo apt install mysql-server -y

安装过程全自动,无需手动干预。系统会创建 MySQL 系统用户、生成默认配置文件,并完成基础环境搭建。整个过程通常只需几十秒,取决于网络速度。

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

刚安装的 MySQL 安全性较低,存在匿名用户、空密码等问题。官方提供了 mysql_secure_installation 脚本进行安全加固,执行:

sudo mysql_secure_installation

脚本会进入交互式配置,按以下顺序操作:

  1. 启用密码验证组件:提示 Would you like to setup VALIDATE PASSWORD component?,输入 y 启用,该组件会强制校验密码强度。
  2. 选择密码强度级别There are three levels of password validation policy: 提供三个选项——0(低,仅需长度≥8)、1(中,需数字/大小写/特殊字符)、2(高,额外排除常见字符串)。推荐输入 1(中等级),平衡安全与易用。
  3. 设置 root 密码:提示 Please set the password for root here.,输入强密码(如 Root@123456)并二次确认。
  4. 删除匿名用户:提示 Remove anonymous users?,输入 y 禁止匿名登录。
  5. 禁止 root 远程登录:提示 Disallow root login remotely?,输入 y 保持默认,后续可单独创建远程用户。
  6. 删除测试数据库:提示 Remove test database and access to it?,输入 y 移除 test 库。
  7. 刷新权限表:提示 Reload privilege tables now?,输入 y 使配置立即生效。

Disallow root login remotely? 这个问题选择y还是n

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

第四步:验证服务状态与登录测试

安装后 MySQL 会自动启动并设为开机自启,通过以下命令确认服务运行:

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

输出中若包含 active (running)(绿色),表示服务正常。其他常用管理命令如下:

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

登录方式详解

Ubuntu 22.04 的 MySQL 8.0 默认对本地 root 用户采用 auth_socket 认证(免密),因此有两种登录方式:

  • 方式一(推荐本地操作):直接以管理员身份登录,无需密码:
sudo mysql -u root

执行后进入 mysql> 提示符(mysql>)即成功。

  • 方式二(密码登录):需先修改认证插件为 mysql_native_password。先通过方式一登录,执行以下 SQL(替换 '你的root密码' 为你的密码):
%%PROTED_CODE_7%%

退出(exit;)后,即可通过密码登录:

mysql -u root -p

最后执行一条简单 SQL 验证功能:

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

返回结果即表示安装成功。✅

第五步:核心配置与优化建议

MySQL 服务端核心配置文件位于 /etc/mysql/mysql.conf.d/mysqld.cnf,所有关键参数(端口、数据目录、字符集等)都在此修改。全局配置文件 /etc/mysql/my.cnf 通常不直接编辑,而是通过 !includedir 指令包含其他目录(如 mysql.conf.d)。编辑需管理员权限,推荐使用 nano 或 vim:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

推荐的配置项

[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
# ... 其他原有配置

配置生效流程

  1. 保存退出:nano 按 Ctrl+O 保存、Ctrl+X 退出;vim 按 Esc 后输入 wq 回车。
  2. 验证语法:执行
    sudo mysqld --help --verbose | grep -E 'port|datadir|character-set-server'
    检查配置是否正确,无报错且能看到参数值即可。
  3. 重启服务
    sudo systemctl restart mysql
    使配置生效。
  4. 验证效果:登录 MySQL 执行
    -- 查看端口、编码、存储引擎等配置信息
    SHOW VARIABLES LIKE 'port';
    SHOW VARIABLES LIKE 'datadir';
    SHOW VARIABLES LIKE 'character_set_server';
    SHOW VARIABLES LIKE 'default_storage_engine';
    确认参数已更新。

⚠️ 编码避坑:MySQL 中优先使用 utf8mb4utf8mb4)而非 utf8utf8),因为前者完整支持标准 UTF-8(含 emoji 等四字节字符)。

常见问题:binlog 文件过多怎么办?

/var/lib/mysql 目录下,你可能会看到 binlog.000001binlog.000095 等序号递增的文件。这些是 MySQL 的二进制日志(binlog),记录所有数据变更操作(DML/DDL),但不包含 SELECT 查询。binlog 是数据恢复和主从复制的基础,但文件会持续增长,需要合理清理。

推荐清理方式(禁止直接 rm)

方式一:配置自动过期清理(长期省心)

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

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] 节点下添加(以保留 7 天为例):

# MySQL 8.0 推荐配置(单位:秒,604800秒=7天)
binlog_expire_logs_seconds = 604800

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

重启服务生效:

sudo systemctl restart mysql
。此后 MySQL 会自动清理过期 binlog,并同步更新索引文件。

方式二:通过 SQL 手动清理(临时操作)

登录 MySQL 命令行(sudo mysql -u root),执行以下命令之一:

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

执行后可通过 cat /var/lib/mysql/binlog.index 验证索引文件已更新。

在微服务架构中,binlog 还常被用于数据变更捕获(CDC),如同步到缓存或搜索引擎,因此合理管理 binlog 非常重要。

总结

本文从零开始演示了 Ubuntu 22.04 上 MySQL 8.0 的完整安装流程,包括安全初始化、登录验证、核心配置优化以及 binlog 管理。核心要点:更新源 → 安装 → 安全配置 → 验证登录;注意默认 auth_socket 认证需修改才能密码登录;远程访问需绑定 0.0.0.0 并创建专用用户。掌握这些,你就能快速构建可靠的数据库服务,为后端应用打下坚实基础。

[AFFILIATE_SLOT_1]

如果你需要更深入的 MySQL 调优,建议参考官方文档或购买专业书籍学习。

[AFFILIATE_SLOT_2] expire_logs_days = 7binlog_expire_logs_seconds