1. 为什么选择CentOS安装MySQL?
在Linux服务器环境中,MySQL作为最流行的开源关系型数据库之一,其安装部署是每个运维人员和开发者的必备技能。CentOS作为企业级Linux发行版,以其稳定性和长期支持周期著称,特别适合作为数据库服务器的操作系统。我曾在生产环境中部署过上百次MySQL,发现CentOS 7和8系列与MySQL 5.7/8.0的兼容性组合最为可靠。
重要提示:2021年后CentOS转向Stream版本,对生产环境而言建议改用Rocky Linux或AlmaLinux等替代发行版,本文操作同样适用。
2. 准备工作与环境检查
2.1 系统资源评估
在开始安装前,我们需要确认服务器配置是否满足MySQL运行需求。通过以下命令检查关键指标:
# 查看内存总量(推荐≥2GB) free -h # 查看磁盘空间(推荐根分区≥20GB) df -h # 检查CPU核心数 nproc我曾遇到过内存不足导致MySQL安装后无法启动的情况,特别是在只有1GB内存的测试机上。如果资源紧张,建议调整MySQL的配置参数或考虑使用MariaDB轻量级替代方案。
2.2 现有MySQL检测与清理
为避免版本冲突,需要先检查系统是否已安装MySQL相关组件:
rpm -qa | grep mysql如果发现旧版本存在,必须彻底卸载:
# 停止MySQL服务 systemctl stop mysqld # 卸载MySQL及其依赖 yum remove mysql-* rm -rf /var/lib/mysql rm -rf /etc/my.cnf3. 官方YUM源安装MySQL 8.0
3.1 配置MySQL YUM仓库
MySQL官方提供了专为RHEL/CentOS设计的仓库,比系统默认仓库版本更新:
# 下载仓库配置 wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm # 安装仓库 rpm -ivh mysql80-community-release-el7-6.noarch.rpm # 验证仓库 yum repolist enabled | grep mysql3.2 安装MySQL服务器
执行以下命令开始安装核心组件:
yum install mysql-community-server这个命令会自动安装:
- mysql-community-server(主服务)
- mysql-community-client(客户端工具)
- mysql-community-libs(共享库)
- mysql-community-common(公共文件)
安装过程中常见问题:
- 密钥验证失败:执行
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 - 依赖冲突:尝试
yum module disable mysql后再安装
4. 初始配置与安全加固
4.1 首次启动与临时密码获取
systemctl start mysqld systemctl enable mysqld # 查看临时密码 grep 'temporary password' /var/log/mysqld.log4.2 运行安全脚本
mysql_secure_installation这个交互式脚本会引导你完成:
- 修改root密码(需包含大小写、数字和特殊字符)
- 移除匿名用户
- 禁止root远程登录
- 删除测试数据库
- 重载权限表
生产环境建议:root密码复杂度应达12位以上,且定期轮换
4.3 基础性能调优
编辑/etc/my.cnf添加以下配置:
[mysqld] # 缓冲池大小(建议物理内存的50-70%) innodb_buffer_pool_size = 2G # 日志文件大小 innodb_log_file_size = 256M # 最大连接数 max_connections = 200 # 禁用DNS反向解析 skip-name-resolve调整后需重启服务:
systemctl restart mysqld5. 用户管理与远程访问
5.1 创建应用专用用户
CREATE USER 'appuser'@'%' IDENTIFIED BY 'Complex@Password123'; GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%'; FLUSH PRIVILEGES;5.2 防火墙配置
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload5.3 SSH隧道安全访问(推荐)
对于生产环境,更安全的做法是通过SSH隧道连接:
ssh -L 3306:localhost:3306 user@server_ip然后在本地使用127.0.0.1:3306连接数据库
6. 日常维护与监控
6.1 备份策略实施
# 每日全量备份 mysqldump -u root -p --all-databases > /backup/mysql-all-$(date +%F).sql建议配合cron实现自动化备份:
0 2 * * * /usr/bin/mysqldump -u backupuser -p'password' --all-databases | gzip > /backup/mysql-$(date +\%F).sql.gz6.2 性能监控命令
-- 查看活跃连接 SHOW PROCESSLIST; -- InnoDB状态 SHOW ENGINE INNODB STATUS; -- 慢查询日志(需先在my.cnf配置) SELECT * FROM mysql.slow_log;7. 故障排查经验分享
7.1 服务无法启动的常见原因
磁盘空间不足:
df -h /var权限问题:
chown -R mysql:mysql /var/lib/mysql配置文件错误:
mysqld --verbose --help | grep -A 1 "Default options"
7.2 忘记root密码的解决方法
停止MySQL服务:
systemctl stop mysqld启动安全模式:
mysqld_safe --skip-grant-tables &重置密码:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
8. 版本升级与迁移方案
当需要从MySQL 5.7升级到8.0时:
- 完整备份所有数据库
- 卸载旧版本
- 安装新版本仓库
- 执行升级:
yum update mysql-server - 运行mysql_upgrade工具
对于大型数据库,建议使用主从复制逐步迁移,我在实际项目中采用以下步骤:
- 设置5.7为主库
- 配置8.0为从库
- 数据同步完成后切换角色
- 最终下线旧版本
9. 高可用方案选型建议
根据业务需求可选择不同架构:
| 方案类型 | 适用场景 | 复杂度 | 备注 |
|---|---|---|---|
| 主从复制 | 读多写少 | ★★☆ | 配置简单 |
| MySQL Group Replication | 需要自动故障转移 | ★★★ | 需要MySQL 5.7.17+ |
| Galera Cluster | 多主架构 | ★★★★ | 对网络要求高 |
| MHA | 自动主从切换 | ★★★☆ | 需要额外管理节点 |
我在金融项目中采用Group Replication的方案,配合ProxySQL实现读写分离,客户端几乎感知不到故障切换。
10. 性能优化实战技巧
经过多次压力测试,总结出几个关键优化点:
索引优化:
-- 查找缺失索引 SELECT * FROM sys.schema_unused_indexes; -- 冗余索引检查 SELECT * FROM sys.schema_redundant_indexes;查询优化:
-- 启用性能schema UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'; -- 分析慢查询 EXPLAIN FORMAT=JSON SELECT * FROM large_table WHERE...;内存配置黄金比例:
总内存 = Key_buffer + (read_buffer_size * max_connections) + (innodb_buffer_pool_size * 1.1)
最后分享一个真实案例:某电商平台通过调整innodb_flush_neighbors参数,使写入性能提升了40%。具体值需要根据存储设备类型(HDD/SSD)决定。