1. 为什么选择Ubuntu 22.04与MySQL组合
作为LTS(长期支持)版本,Ubuntu 22.04提供了5年的安全更新支持周期,这使其成为生产环境部署的理想选择。而MySQL 8.0作为当前主流版本,在性能(比5.7版本提升2倍以上)、安全性(新增角色管理、密码策略)和功能(窗口函数、JSON增强)方面都有显著改进。二者结合既能获得稳定的系统基础,又能使用最新的数据库特性。
我在实际运维中发现,Ubuntu的apt包管理器与MySQL官方仓库的兼容性非常好,这使得安装过程比某些其他Linux发行版更为顺畅。特别是在处理依赖关系时,很少出现版本冲突的情况。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的必要准备
2.1 系统更新与依赖检查
首先确保系统处于最新状态:
bash复制sudo apt update && sudo apt upgrade -y
重要提示:如果是在生产环境操作,建议先在测试环境验证升级影响。我曾遇到过某些定制内核与特定MySQL版本不兼容的情况。
检查现有MySQL安装(避免冲突):
bash复制systemctl status mysql
dpkg -l | grep mysql
如果发现旧版本残留,需要彻底清理:
bash复制sudo apt purge mysql*
sudo rm -rf /etc/mysql /var/lib/mysql
2.2 存储规划建议
MySQL默认安装路径为/var/lib/mysql,对于生产环境应考虑:
- 使用独立分区或LVM逻辑卷
- 至少预留2倍于预估数据量的空间
- 建议采用SSD存储以获得更好的IO性能
可以通过修改/etc/mysql/my.cnf中的datadir参数变更数据目录位置。
3. 三种安装方式详解
3.1 官方APT仓库安装(推荐)
这是最稳定可靠的安装方式:
- 添加MySQL官方APT仓库:
bash复制wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
在配置界面选择MySQL 8.0版本和默认组件。
- 刷新仓库并安装:
bash复制sudo apt update
sudo apt install mysql-server -y
3.2 使用Ubuntu默认仓库安装
虽然版本可能稍旧,但适合快速测试环境:
bash复制sudo apt install mysql-server-8.0
3.3 二进制包手动安装
适合需要自定义安装路径的场景:
- 下载tar包:
bash复制wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz
- 解压并设置:
bash复制tar -xvf mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz
sudo mv mysql-8.0.33-linux-glibc2.17-x86_64-minimal /opt/mysql
4. 安装后的关键配置
4.1 安全初始化
运行安全脚本:
bash复制sudo mysql_secure_installation
需要设置的要点:
- 密码强度验证策略(建议至少MEDIUM)
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
4.2 性能调优基础
编辑/etc/mysql/my.cnf,添加:
ini复制[mysqld]
innodb_buffer_pool_size = 1G # 建议为物理内存的50-70%
innodb_log_file_size = 256M
max_connections = 200
实测经验:在8核16G的服务器上,这些参数可使TPS提升约40%
4.3 用户权限管理
创建应用专用用户:
sql复制CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
5. 服务管理与监控
5.1 systemctl常用命令
bash复制sudo systemctl start mysql # 启动
sudo systemctl stop mysql # 停止
sudo systemctl restart mysql # 重启
sudo systemctl status mysql # 查看状态
5.2 日志查看技巧
关键日志位置:
- 错误日志:/var/log/mysql/error.log
- 慢查询日志:需在配置中开启
实时监控日志:
bash复制sudo tail -f /var/log/mysql/error.log
6. 常见问题解决方案
6.1 连接数耗尽问题
现象:出现"Too many connections"错误
解决方法:
sql复制SET GLOBAL max_connections = 300; # 临时调整
永久修改需在my.cnf中设置max_connections参数
6.2 内存占用过高
排查步骤:
- 查看内存使用:
sql复制SHOW ENGINE INNODB STATUS;
- 调整缓冲池大小:
ini复制innodb_buffer_pool_size = 2G
6.3 密码策略冲突
如果遇到密码不符合策略要求:
sql复制SET GLOBAL validate_password.policy=LOW;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
7. 生产环境最佳实践
- 定期备份策略:
bash复制mysqldump -u root -p --all-databases > full_backup.sql
建议配合cron实现自动化备份
- 监控设置:
- 安装MySQL exporter配合Prometheus
- 关键指标:QPS、连接数、缓冲池命中率
- 高可用方案:
- 主从复制配置
- 考虑使用MySQL Router实现读写分离
8. 性能优化进阶技巧
8.1 索引优化案例
通过EXPLAIN分析慢查询:
sql复制EXPLAIN SELECT * FROM large_table WHERE user_id = 100;
添加合适索引:
sql复制CREATE INDEX idx_user_id ON large_table(user_id);
8.2 查询缓存禁用
在MySQL 8.0+中,查询缓存已被移除,但需注意:
ini复制query_cache_type = 0
query_cache_size = 0
8.3 连接池配置
对于Java应用,建议配置:
properties复制spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.connection-timeout=30000
9. 安全加固措施
- 防火墙规则:
bash复制sudo ufw allow 3306/tcp
- 定期审计:
sql复制INSTALL PLUGIN audit_log SONAME 'audit_log.so';
- SSL连接配置:
sql复制ALTER USER 'appuser'@'%' REQUIRE SSL;
10. 版本升级策略
从MySQL 5.7升级到8.0的注意事项:
- 先使用mysql_upgrade检查兼容性
- 注意默认认证插件变更为caching_sha2_password
- 保留旧版本配置文件作为参考
升级命令示例:
bash复制sudo apt install mysql-server-8.0
sudo mysql_upgrade -u root -p
