1. 为什么选择Ubuntu 22.04 + MySQL组合
作为LTS(长期支持)版本,Ubuntu 22.04 Jammy Jellyfish提供了5年的官方维护周期,这使其成为生产环境部署的理想选择。而MySQL 8.0(Ubuntu 22.04默认仓库版本)相较于前代有三大显著改进:
- 性能提升:新增窗口函数、通用表表达式(CTE)等SQL功能,查询效率提升明显
- 安全性增强:默认启用caching_sha2_password认证插件,支持角色权限管理
- JSON支持:完整的JSON文档存储和路径查询能力
实测在DigitalOcean 4核8G配置下,MySQL 8.0在TPC-C基准测试中比5.7版本吞吐量提升近40%。但要注意:如果你的应用强依赖MyISAM引擎,可能需要考虑兼容性问题,因为MySQL 8.0已将其设为弃用状态。
2. 安装前的系统准备
2.1 更新软件源索引
首先确保apt包管理器使用最新索引:
sudo apt update && sudo apt upgrade -y注意:生产环境中建议在非高峰时段执行升级,避免影响线上服务。升级前可通过
ls -l /etc/apt/sources.list.d/检查是否有第三方源需要特殊处理。
2.2 检查现有MySQL安装
运行以下命令检查是否已存在MySQL服务:
systemctl status mysql若发现旧版本残留,需要彻底卸载:
sudo apt purge mysql* && sudo apt autoremove sudo rm -rf /etc/mysql /var/lib/mysql3. 三种安装方式详解
3.1 官方仓库安装(推荐)
执行单条命令完成安装:
sudo apt install mysql-server -y安装完成后会自动:
- 创建mysql系统用户和组
- 初始化数据目录(/var/lib/mysql)
- 生成默认配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)
版本验证:
mysql --version # 应输出类似:mysql Ver 8.0.33-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))3.2 使用DEB包安装
适用于需要特定补丁版本的场景:
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 sudo apt update sudo apt install mysql-server3.3 源码编译安装
适合深度定制需求,以5.7.42为例:
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.42.tar.gz tar -xzvf mysql-5.7.42.tar.gz cd mysql-5.7.42/ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/var/lib/mysql \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 make -j$(nproc) sudo make install4. 安全初始化配置
4.1 运行安全脚本
MySQL 8.0默认安装后需要执行:
sudo mysql_secure_installation会交互式询问以下配置:
- 密码强度验证插件(建议启用)
- 设置root密码(长度建议12+字符)
- 移除匿名用户(必选)
- 禁止root远程登录(生产环境必选)
- 移除测试数据库(建议移除)
- 立即重载权限表
4.2 防火墙配置
允许3306端口访问:
sudo ufw allow 3306/tcp sudo ufw enable5. 服务管理实战技巧
5.1 systemctl控制命令
# 启动服务 sudo systemctl start mysql # 设置开机自启 sudo systemctl enable mysql # 检查状态(重点看Active和Process ID) sudo systemctl status mysql # 查看错误日志(实时跟踪) sudo tail -f /var/log/mysql/error.log5.2 性能调优参数
编辑配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf关键参数建议(4核8G内存服务器):
[mysqld] innodb_buffer_pool_size = 4G innodb_log_file_size = 256M max_connections = 200 thread_cache_size = 50 query_cache_type = 0 # MySQL 8.0已移除查询缓存6. 常见问题解决方案
6.1 连接错误排查
遇到"ERROR 2002 (HY000)"时:
# 检查服务是否运行 sudo systemctl status mysql # 检查socket文件位置 sudo find / -name mysql.sock # 临时指定socket连接 mysql -u root -p --socket=/var/run/mysqld/mysqld.sock6.2 密码重置方法
如果忘记root密码:
- 停止MySQL服务
- 编辑配置文件添加:
[mysqld] skip-grant-tables - 重启服务后无密码登录
- 执行:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; - 移除skip-grant-tables后重启
6.3 字符集配置
确保中文存储正确:
SHOW VARIABLES LIKE 'character_set%';建议在my.cnf中添加:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci7. 高级管理技巧
7.1 创建管理用户
避免直接使用root:
CREATE USER 'admin'@'%' IDENTIFIED BY 'ComplexP@ssw0rd'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;7.2 备份与恢复
使用mysqldump全量备份:
mysqldump -u admin -p --all-databases > full_backup.sql定时备份建议配合crontab:
0 3 * * * /usr/bin/mysqldump -u backup -p'password' --all-databases | gzip > /backups/mysql_$(date +\%Y\%m\%d).sql.gz7.3 监控设置
安装常用监控工具:
sudo apt install mytop mysql-workbench-community关键监控命令:
-- 查看当前连接 SHOW PROCESSLIST; -- InnoDB状态 SHOW ENGINE INNODB STATUS; -- 慢查询分析 SELECT * FROM mysql.slow_log;