Ubuntu 22.04安装MySQL 8.0全指南与性能优化
2026/9/11 22:08:39 网站建设 项目流程

1. 为什么选择Ubuntu 22.04与MySQL组合

在Linux发行版中,Ubuntu 22.04 LTS(Jammy Jellyfish)作为长期支持版本,提供了5年的安全更新支持周期。这个版本默认搭载了OpenSSL 3.0和PHP 8.1,对现代Web开发栈有着天然的优势。而MySQL 8.0作为当前主流版本,相比5.7系列在性能上有显著提升——官方基准测试显示其读性能提高了2倍,写性能提升了3倍。

我选择这个组合主要基于三个实际考量:首先,Ubuntu的apt包管理器能简化依赖管理;其次,MySQL 8.0新增的窗口函数和CTE(Common Table Expressions)特性让复杂查询更高效;最后,这套组合在云服务器上的资源占用比Windows方案低40%左右。

2. 安装前的系统准备

2.1 更新系统基础环境

在终端执行以下命令前,建议先确认当前用户具有sudo权限。我习惯先做完整系统升级:

sudo apt update && sudo apt upgrade -y

这个组合命令会先更新软件源列表,然后升级所有可更新的包。注意-y参数表示自动确认,适合脚本执行,但如果是生产环境,建议去掉这个参数手动确认每个更新。

重要提示:如果之前安装过MySQL的老版本,务必先运行sudo apt purge mysql*彻底清除旧配置,避免出现依赖冲突。我曾经因为残留的my.cnf文件导致新版本无法正常启动,排查了整整两小时。

2.2 检查关键依赖项

运行以下命令检查基础依赖:

dpkg -l | grep -E 'libaio|libnuma'

如果缺少这两个库,使用sudo apt install libaio1 libnuma-dev安装。它们在处理高并发事务时会显著影响MySQL的I/O性能,特别是在SSD存储环境下。

3. MySQL安装的三种方式对比

3.1 官方APT仓库安装(推荐)

这是最稳妥的方式,Oracle维护的官方仓库能确保获得最新安全补丁。执行以下命令添加仓库:

wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb

安装时会弹出配置界面,用方向键选择"MySQL Server & Cluster"后按Tab键切换到"OK"。这里有个细节:如果系统是ARM架构(比如树莓派),需要手动修改/etc/apt/sources.list.d/mysql.list文件,把deb后面的arch=amd64改为arch=arm64。

3.2 使用Ubuntu默认仓库

适合对版本要求不严格的场景:

sudo apt install mysql-server-8.0

但要注意,Ubuntu仓库的版本通常会比官方滞后1-2个小版本。我在去年10月就遇到过官方已修复的CVE-2022-21595漏洞在Ubuntu仓库版本中仍未修补的情况。

3.3 二进制包手动安装

适合需要自定义安装路径的高级用户。从官网下载tar包后:

tar -xvf mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz sudo mv mysql-8.0.33-linux-glibc2.17-x86_64 /opt/mysql

这种方式需要手动处理初始化脚本和systemd服务文件,对新手不太友好。我曾经为配置正确的AppArmor规则花了半天时间。

4. 安全初始化与配置调优

4.1 运行安全脚本

安装完成后立即执行:

sudo mysql_secure_installation

这个交互式脚本会:

  1. 设置root密码(建议至少16位混合字符)
  2. 移除匿名用户
  3. 禁止root远程登录
  4. 删除测试数据库
  5. 重载权限表

踩坑记录:如果在这里设置太简单的密码,脚本会强制要求重设。建议先准备好符合复杂度要求的密码。

4.2 关键配置文件优化

编辑/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]段添加:

innodb_buffer_pool_size = 1G # 建议物理内存的50-70% innodb_log_file_size = 256M max_connections = 200 thread_cache_size = 10 table_open_cache = 4000

对于8核CPU、16GB内存的典型开发机,这套参数可以平衡性能和内存占用。记得调整后重启服务:

sudo systemctl restart mysql

5. 用户权限管理与远程访问

5.1 创建管理用户

不要直接使用root账户,推荐创建专属管理员:

CREATE USER 'dba_admin'@'localhost' IDENTIFIED BY 'ComplexP@ssw0rd!'; GRANT ALL PRIVILEGES ON *.* TO 'dba_admin'@'localhost' WITH GRANT OPTION;

5.2 配置远程访问(谨慎操作)

如果需要从其他机器连接:

CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'AnotherP@ss123'; GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'remote_user'@'192.168.1.%';

然后修改配置文件,注释掉bind-address = 127.0.0.1这行。强烈建议配合防火墙规则限制访问IP:

sudo ufw allow from 192.168.1.0/24 to any port 3306

6. 服务管理与故障排查

6.1 systemd常用命令

sudo systemctl status mysql # 查看状态 sudo journalctl -u mysql --since "1 hour ago" # 查看近期日志 sudo systemctl enable mysql # 设置开机启动

6.2 常见错误解决

问题1:无法启动,报错"Can't create/write to file"

sudo chown -R mysql:mysql /var/lib/mysql sudo chmod 750 /var/lib/mysql

问题2:连接数爆满

SHOW PROCESSLIST; KILL <process_id>;

临时增加连接数:

SET GLOBAL max_connections = 300;

7. 性能监控与备份策略

7.1 实时监控工具

安装mycli替代默认客户端:

sudo apt install mycli

然后运行:

SHOW ENGINE INNODB STATUS\G SHOW GLOBAL STATUS LIKE 'Threads_connected';

7.2 自动化备份方案

创建每日全量备份脚本/usr/local/bin/mysql_backup.sh:

#!/bin/bash mysqldump -u dba_admin -p'ComplexP@ssw0rd!' --all-databases \ --single-transaction | gzip > /backups/mysql_$(date +%F).sql.gz

添加到crontab:

0 2 * * * /usr/local/bin/mysql_backup.sh

对于大型数据库,建议改用Percona XtraBackup工具实现热备份。

8. 版本升级与兼容性处理

当需要升级到新版本时,正确的步骤是:

  1. 在测试环境验证
  2. 备份所有数据库
  3. 停止MySQL服务
  4. 更新apt仓库配置
  5. 执行sudo apt upgrade mysql-server

特别注意:从5.7升级到8.0时,密码认证插件会从mysql_native_password变为caching_sha2_password。如果遇到客户端兼容问题,可以临时修改:

ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';

这套安装方案已经在AWS EC2、本地虚拟机树莓派4B等多种环境实测通过。关键在于根据硬件配置调整内存相关参数,并始终遵循最小权限原则管理用户访问。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询