1. CentOS系统与MySQL数据库概述
在Linux服务器环境中,CentOS因其稳定性和长期支持特性成为企业级应用的首选系统。作为最流行的开源关系型数据库之一,MySQL在Web应用、数据存储等领域占据重要地位。将MySQL部署在CentOS系统上,能够获得企业级的安全保障和性能表现。
我管理过上百台CentOS服务器,其中90%都运行着MySQL服务。不同于Windows环境的图形化安装,Linux环境下通过命令行安装MySQL更能体现系统管理的精髓。这里要特别说明的是,从CentOS 7开始,官方软件仓库默认提供的是MariaDB而非MySQL,但这并不影响我们安装原版MySQL。
2. 安装前的系统准备
2.1 系统版本确认
首先通过以下命令确认系统版本:
cat /etc/redhat-release对于CentOS 7和8的安装方式略有不同,本文以CentOS 7为例。如果看到类似"CentOS Linux release 7.9.2009 (Core)"的输出,说明系统版本符合要求。
2.2 清理旧版本MySQL
如果系统之前安装过MySQL或MariaDB,需要先彻底清理:
sudo yum remove mysql mysql-server mariadb* sudo rm -rf /var/lib/mysql sudo rm -rf /etc/my.cnf重要提示:执行删除操作前请确认没有重要数据库存在。我曾经遇到过新手误删生产环境数据库的惨剧,切记!
2.3 安装依赖包
安装MySQL需要一些基础依赖:
sudo yum install -y wget vim net-tools3. MySQL官方仓库配置
3.1 添加MySQL YUM仓库
CentOS默认仓库不包含MySQL,需要手动添加官方仓库:
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql80-community-release-el7-5.noarch.rpm3.2 验证仓库配置
检查仓库是否添加成功:
yum repolist enabled | grep "mysql.*-community.*"应该能看到mysql80-community和mysql-tools-community两个仓库。
4. MySQL服务器安装
4.1 安装MySQL服务
执行安装命令:
sudo yum install -y mysql-community-server这个过程会下载约200MB的安装包,视网络情况可能需要5-10分钟。
4.2 启动MySQL服务
安装完成后启动服务:
sudo systemctl start mysqld sudo systemctl enable mysqld检查服务状态:
systemctl status mysqld正常应该显示"active (running)"。
5. 初始安全配置
5.1 获取临时密码
MySQL 8.0安装后会生成一个临时root密码:
sudo grep 'temporary password' /var/log/mysqld.log输出类似:[Note] A temporary password is generated for root@localhost: Jqklsdf&23
5.2 运行安全脚本
执行安全配置向导:
sudo mysql_secure_installation按照提示操作:
- 输入刚才获取的临时密码
- 设置新密码(需包含大小写字母、数字和特殊字符)
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
6. 基础配置优化
6.1 配置文件调整
编辑MySQL主配置文件:
sudo vim /etc/my.cnf添加以下基础优化参数:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci default-storage-engine=INNODB max_connections=200 innodb_buffer_pool_size=1G经验之谈:innodb_buffer_pool_size建议设置为系统内存的50-70%,但不要超过系统可用内存。
6.2 重启服务生效
sudo systemctl restart mysqld7. 防火墙配置
7.1 开放MySQL端口
如果使用防火墙,需要开放3306端口:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload7.2 验证端口开放
sudo netstat -tulnp | grep 3306应该看到MySQL正在监听3306端口。
8. 创建管理用户
8.1 登录MySQL
mysql -u root -p8.2 创建管理用户
CREATE USER 'admin'@'%' IDENTIFIED BY 'Strong@Password123'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;9. 常见问题排查
9.1 安装失败处理
如果安装过程中出现依赖错误,可以尝试:
sudo yum clean all sudo yum makecache9.2 连接问题排查
如果无法连接MySQL,检查:
- 服务是否运行:
systemctl status mysqld - 端口是否监听:
netstat -tulnp | grep 3306 - 防火墙设置:
firewall-cmd --list-ports
9.3 密码重置方法
如果忘记root密码:
- 停止MySQL服务
- 在my.cnf的[mysqld]段添加
skip-grant-tables - 重启服务后无密码登录
- 执行
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码' - 移除skip-grant-tables并重启服务
10. 性能监控与维护
10.1 基础监控命令
查看MySQL运行状态:
SHOW STATUS; SHOW PROCESSLIST;10.2 定期维护建议
建议设置定期任务:
# 每周优化所有表 mysqlcheck -u root -p --auto-repair --optimize --all-databases11. 备份与恢复
11.1 基础备份方法
使用mysqldump进行完整备份:
mysqldump -u root -p --all-databases > full_backup.sql11.2 定时备份脚本
创建自动备份脚本:
#!/bin/bash DATE=$(date +%Y%m%d) mysqldump -u root -p密码 --all-databases > /backups/mysql_$DATE.sql find /backups -type f -mtime +7 -delete设置cron任务每天执行。
12. 版本升级指南
12.1 小版本升级
直接通过yum更新:
sudo yum update mysql-community-server12.2 大版本升级
如从5.7升级到8.0:
- 完整备份所有数据库
- 卸载旧版本
- 安装新版本仓库
- 安装新版本
- 运行mysql_upgrade
13. 高可用配置建议
对于生产环境,建议考虑:
- 主从复制配置
- MySQL集群
- 使用ProxySQL实现读写分离
14. 安全加固措施
14.1 基础安全设置
- 定期更换密码
- 限制root远程登录
- 为每个应用创建独立用户
14.2 审计日志配置
在my.cnf中添加:
[mysqld] plugin-load-add = audit_log.so audit_log_format=JSON audit_log_policy=ALL15. 性能优化进阶
15.1 关键参数调整
根据服务器配置调整:
innodb_log_file_size=256M innodb_flush_log_at_trx_commit=2 sync_binlog=100015.2 查询优化建议
- 为常用查询字段添加索引
- 避免SELECT * 查询
- 使用EXPLAIN分析慢查询
16. 容器化部署方案
16.1 Docker安装MySQL
对于测试环境,可以使用Docker快速部署:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=密码 -p 3306:3306 -d mysql:8.016.2 数据持久化配置
确保数据持久化:
docker run --name mysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 -p 3306:3306 -d mysql:8.017. 图形化管理工具
推荐使用:
- MySQL Workbench(官方工具)
- phpMyAdmin(Web界面)
- DBeaver(跨平台)
安装phpMyAdmin示例:
sudo yum install -y epel-release sudo yum install -y phpmyadmin18. 故障恢复案例
18.1 数据文件损坏修复
如果遇到表损坏:
REPAIR TABLE 表名;18.2 InnoDB恢复流程
- 在my.cnf中添加
innodb_force_recovery=1到6(逐步尝试) - 启动服务并导出数据
- 重建数据库
19. 监控方案集成
推荐监控方案:
- Prometheus + Grafana
- Zabbix
- Percona Monitoring and Management
安装Percona监控:
sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm sudo percona-release setup pmm2 sudo yum install -y pmm2-client20. 自动化运维实践
20.1 Ansible部署MySQL
使用Ansible自动化安装:
- hosts: dbservers tasks: - name: Add MySQL repository yum_repository: name: mysql80-community description: MySQL 8.0 Community baseurl: http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/ gpgkey: https://repo.mysql.com/RPM-GPG-KEY-mysql gpgcheck: yes enabled: yes20.2 配置管理实践
使用配置管理工具确保一致性:
- Ansible
- Puppet
- Chef
21. 版本兼容性说明
不同MySQL版本对CentOS的支持:
- MySQL 5.7:支持CentOS 7
- MySQL 8.0:支持CentOS 7/8
- 最新MySQL版本可能需要CentOS 8+
22. 资源限制调整
22.1 系统限制修改
调整文件打开限制:
echo "mysql hard nofile 65535" >> /etc/security/limits.conf echo "mysql soft nofile 65535" >> /etc/security/limits.conf22.2 内核参数优化
调整内核参数:
echo "vm.swappiness = 10" >> /etc/sysctl.conf sysctl -p23. 日志管理策略
23.1 日志轮转配置
配置日志轮转:
sudo vim /etc/logrotate.d/mysql添加内容:
/var/log/mysqld.log { daily rotate 7 missingok compress delaycompress notifempty create 640 mysql mysql postrotate /usr/bin/mysqladmin flush-logs endscript }24. 压力测试方法
使用sysbench进行基准测试:
sudo yum install -y sysbench sysbench oltp_read_write --db-driver=mysql --mysql-host=localhost --mysql-user=root --mysql-password=密码 prepare sysbench oltp_read_write --db-driver=mysql --mysql-host=localhost --mysql-user=root --mysql-password=密码 --threads=8 --time=300 run25. 最佳实践总结
根据多年运维经验,建议:
- 生产环境使用MySQL 8.0最新稳定版
- 为每个应用创建独立数据库和用户
- 定期备份并测试恢复流程
- 监控关键性能指标
- 保持系统补丁更新