1. 为什么选择CentOS安装MySQL?
在Linux服务器领域,CentOS因其稳定性、长期支持周期和与RHEL的二进制兼容性,成为企业级应用的首选系统。而MySQL作为最流行的开源关系型数据库,二者的组合能提供可靠的数据库服务环境。我经手过的生产环境中,约70%的MySQL实例都运行在CentOS系统上。
选择官方Yum源安装相比源码编译有三大优势:
- 自动解决依赖关系(如libaio、numactl等)
- 保持与系统包管理器的统一
- 便于后续的安全更新维护
重要提示:CentOS 8已转向AppStream源,而CentOS 7仍使用传统Yum源,本文将以CentOS 7为例演示完整流程。
2. 准备工作与环境配置
2.1 系统资源检查
安装前需要确认:
# 查看系统版本 cat /etc/redhat-release # 内存检查(建议≥2GB) free -h # 磁盘空间(建议/data分区≥50GB) df -h2.2 关闭SELinux(生产环境慎用)
临时关闭:
setenforce 0永久关闭需修改配置文件:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config2.3 防火墙配置
开放3306端口:
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload3. MySQL安装全流程
3.1 添加官方Yum源
下载MySQL官方RPM包:
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm校验MD5:
md5sum mysql80-community-release-el7-7.noarch.rpm # 对比官网公布的校验值安装源:
rpm -ivh mysql80-community-release-el7-7.noarch.rpm3.2 安装MySQL服务
查看可用版本:
yum repolist all | grep mysql安装社区版服务器:
yum -y install mysql-community-server常见报错处理:若遇到"Public key for mysql-community-xxx.rpm is not installed",需先导入GPG密钥:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
3.3 初始化数据库
启动服务:
systemctl start mysqld systemctl enable mysqld获取临时密码:
grep 'temporary password' /var/log/mysqld.log安全初始化:
mysql_secure_installation按提示完成:
- 修改root密码(需包含大小写、数字、特殊字符)
- 移除匿名用户
- 禁止root远程登录
- 移除test数据库
- 重载权限表
4. 关键配置优化
4.1 基础配置文件
编辑/etc/my.cnf:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # 字符集设置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 性能相关 innodb_buffer_pool_size=1G # 建议物理内存的50-70% innodb_log_file_size=256M max_connections=5004.2 用户权限管理
创建业务用户示例:
CREATE USER 'appuser'@'192.168.1.%' IDENTIFIED BY 'Complex@Password123'; GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO 'appuser'@'192.168.1.%'; FLUSH PRIVILEGES;5. 运维监控与排错
5.1 服务状态检查
基础命令:
# 服务状态 systemctl status mysqld # 连接数统计 mysqladmin -uroot -p status # 进程列表 mysqladmin -uroot -p processlist5.2 性能监控指标
关键SQL查询:
-- 查看QPS/TPS SHOW GLOBAL STATUS LIKE 'Questions'; SHOW GLOBAL STATUS LIKE 'Com_commit'; SHOW GLOBAL STATUS LIKE 'Com_rollback'; -- 缓冲池命中率 SELECT (1 - (SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_reads') / (SELECT variable_value FROM performance_schema.global_status WHERE variable_name = 'Innodb_buffer_pool_read_requests')) * 100 AS hit_rate;5.3 常见问题处理
问题1:启动失败报错"Failed to start MySQL Server"
- 检查/var/log/mysqld.log具体错误
- 常见原因:磁盘空间不足、内存不够、配置文件语法错误
问题2:连接数耗尽临时解决方案:
SET GLOBAL max_connections=1000;永久方案需修改my.cnf后重启服务
问题3:密码强度导致应用无法连接临时降低密码策略:
SET GLOBAL validate_password.policy=LOW;6. 备份与恢复方案
6.1 物理备份
使用mysqldump:
mysqldump -uroot -p --all-databases --single-transaction --master-data=2 > fullbackup.sql6.2 二进制日志管理
查看当前日志:
SHOW BINARY LOGS;定期清理(保留7天):
find /var/lib/mysql -name "mysql-bin.*" -mtime +7 -exec rm -f {} \;6.3 定时备份脚本示例
创建/usr/local/bin/mysql_backup.sh:
#!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR="/data/backups/mysql" mkdir -p $BACKUP_DIR mysqldump -uroot -pYourPassword --all-databases | gzip > $BACKUP_DIR/full_$DATE.sql.gz find $BACKUP_DIR -type f -mtime +30 -delete添加到crontab:
0 2 * * * /usr/local/bin/mysql_backup.sh7. 安全加固建议
- 定期审计用户权限:
SELECT user,host FROM mysql.user; SHOW GRANTS FOR 'username'@'host';- 启用SSL连接:
# 查看SSL状态 mysql -uroot -p -e "SHOW VARIABLES LIKE '%ssl%';" # 配置强制SSL GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%' REQUIRE SSL;- 安装审计插件:
INSTALL PLUGIN audit_log SONAME 'audit_log.so'; SET GLOBAL audit_log_format=JSON; SET GLOBAL audit_log_policy=ALL;在实际运维中,我发现很多问题都源于配置不当。建议在正式环境部署前,先用测试环境验证所有参数设置。对于高并发场景,需要特别注意innodb_thread_concurrency和table_open_cache等参数的调优。