
1. 为什么选择在Ubuntu 22.04上部署MySQLMySQL作为最流行的开源关系型数据库之一在Web应用、企业系统和数据分析等领域有着广泛应用。Ubuntu 22.04 LTS作为长期支持版本提供了稳定的软件包和五年的安全更新是部署生产环境MySQL的理想选择。我在多个实际项目中采用这种组合主要基于以下考虑稳定性保障Ubuntu 22.04的APT仓库提供经过充分测试的MySQL版本默认为8.0避免了自行编译可能带来的兼容性问题安全基线系统默认配置符合安全最佳实践如默认启用SSL连接、密码强度策略等维护便利通过systemd管理服务支持自动崩溃恢复和日志轮转性能优化针对现代硬件做了默认调优如InnoDB缓冲池大小自动配置提示虽然Ubuntu仓库中的MySQL版本可能不是最新小版本但对于大多数生产场景已经足够。如需特定版本可以考虑官方APT仓库或Docker部署方案。2. 系统准备与MySQL安装2.1 环境预检在开始安装前建议先检查系统资源情况# 检查内存建议不少于2GB free -h # 检查磁盘空间建议系统分区不少于10GB df -h # 检查已有MySQL进程 ps aux | grep mysql如果发现已有MySQL实例运行需要先进行清理# 停止现有服务 sudo systemctl stop mysql # 完全卸载谨慎操作会删除所有数据 sudo apt purge mysql-server mysql-client mysql-common sudo rm -rf /var/lib/mysql /etc/mysql2.2 安装MySQL服务器更新软件源并安装MySQL服务sudo apt update sudo apt upgrade -y sudo apt install mysql-server -y安装完成后系统会自动创建mysql系统用户和用户组初始化数据目录/var/lib/mysql生成默认配置文件/etc/mysql/my.cnf设置systemd服务单元验证安装是否成功# 检查服务状态 systemctl status mysql # 查看版本信息 mysqld --version2.3 安全加固配置运行安全脚本进行基础加固sudo mysql_secure_installation该脚本会引导完成以下安全设置设置root密码强度策略建议选择2STRONG移除匿名用户必须选择Y禁止root远程登录生产环境建议Y移除测试数据库建议Y立即重载权限表必须Y典型交互过程示例Securing the MySQL server deployment. Enter password for user root: [输入临时密码或留空] VALIDATE PASSWORD COMPONENT can be used to test passwords... Would you like to setup VALIDATE PASSWORD? (Press y|Y for Yes, any other key for No) : Y There are three levels of password validation policy: LOW Length 8 MEDIUM Length 8, numeric, mixed case, and special characters STRONG Length 8, numeric, mixed case, special characters and dictionary file Please enter 0 LOW, 1 MEDIUM and 2 STRONG: 2 Please set the password for root here. New password: [输入符合STRONG策略的密码] Re-enter new password: [重复密码] Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y3. MySQL基础配置与管理3.1 用户权限体系配置MySQL 8.0默认使用caching_sha2_password认证插件比旧版的mysql_native_password更安全但可能带来兼容性问题。查看当前认证方式SELECT user, host, plugin FROM mysql.user;创建应用专用用户示例创建开发者账号CREATE USER dev_user% IDENTIFIED WITH caching_sha2_password BY ComplexPassword123; GRANT ALL PRIVILEGES ON app_db.* TO dev_user%; FLUSH PRIVILEGES;注意如果客户端工具不支持caching_sha2_password可以改用mysql_native_passwordALTER USER dev_user% IDENTIFIED WITH mysql_native_password BY password;3.2 网络连接配置编辑MySQL主配置文件sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf关键参数调整建议[mysqld] # 绑定地址0.0.0.0表示允许所有IP访问 bind-address 0.0.0.0 # 最大连接数根据服务器内存调整 max_connections 200 # 查询缓存MySQL 8.0已移除无需配置 # query_cache_size 0 # 启用二进制日志主从复制需要 server-id 1 log_bin /var/log/mysql/mysql-bin.log expire_logs_days 14保存后重启服务生效sudo systemctl restart mysql3.3 防火墙配置如果使用UFW防火墙需要开放MySQL默认端口sudo ufw allow 3306/tcp sudo ufw enable sudo ufw status对于生产环境建议限制访问源IPsudo ufw allow from 192.168.1.0/24 to any port 33064. 高级配置与优化4.1 内存参数调优根据服务器内存调整InnoDB缓冲池大小通常为物理内存的50-70%-- 查看当前配置 SHOW VARIABLES LIKE innodb_buffer_pool_size; -- 动态调整8GB内存示例 SET GLOBAL innodb_buffer_pool_size 4294967296; -- 4GB永久生效需在配置文件中添加[mysqld] innodb_buffer_pool_size 4G4.2 存储引擎配置MySQL 8.0默认使用InnoDB建议显式配置[mysqld] default_storage_engine InnoDB innodb_file_per_table ON innodb_flush_log_at_trx_commit 1 sync_binlog 14.3 监控与维护设置慢查询日志[mysqld] slow_query_log 1 slow_query_log_file /var/log/mysql/mysql-slow.log long_query_time 2 log_queries_not_using_indexes 1定期维护建议# 每周优化所有表 mysqlcheck -u root -p --auto-repair --optimize --all-databases # 每日备份示例 mysqldump -u root -p --all-databases --single-transaction | gzip /backup/mysql_$(date %Y%m%d).sql.gz5. 常见问题排查5.1 连接问题排查错误ERROR 2002 (HY000): Cant connect to local MySQL server排查步骤检查服务状态sudo systemctl status mysql查看错误日志sudo tail -f /var/log/mysql/error.log检查端口监听sudo netstat -tulnp | grep 3306检查SELinux状态getenforce如果是Enforcing模式可能需要调整策略5.2 性能问题排查使用诊断工具-- 查看当前连接状态 SHOW PROCESSLIST; -- 查看锁等待 SELECT * FROM performance_schema.events_waits_current; -- 查看内存使用 SELECT * FROM sys.memory_global_by_current_bytes;5.3 密码重置方法如果忘记root密码停止MySQL服务sudo systemctl stop mysql启动无权限检查模式sudo mysqld_safe --skip-grant-tables 连接MySQLmysql -u root更新密码FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY NewPassword;退出并重启服务6. 可视化工具连接6.1 DBeaver连接配置新建MySQL连接主机服务器IP端口3306数据库留空显示所有库用户名/密码之前创建的用户凭据驱动属性添加useSSLfalse如未配置SSL6.2 phpMyAdmin安装对于Web管理界面sudo apt install phpmyadmin配置Apache集成sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf sudo a2enconf phpmyadmin sudo systemctl reload apache2访问地址http://服务器IP/phpmyadmin7. 生产环境建议定期备份策略完整备份每周一次全量备份增量备份每天binlog备份验证备份定期测试备份恢复流程监控方案Prometheus Grafana监控MySQL指标设置关键指标告警连接数、慢查询、复制延迟等高可用方案主从复制至少配置一个从库组复制MySQL Group Replication实现多主架构中间件使用ProxySQL实现读写分离安全加固启用SSL加密连接安装审计插件如audit_log定期轮换密码我在实际运维中发现合理的参数配置和监控体系可以预防80%的数据库问题。建议新部署的MySQL实例至少运行压力测试工具如sysbench验证基础性能并建立基线指标供日后比对。