CentOS 7下MySQL 8.0单机部署全流程指南

一、环境准备与前置检查

1.1 系统兼容性验证

CentOS 7.x(推荐7.6+版本)作为MySQL 8.0的稳定运行环境,需确保系统满足以下条件:

  • 内存≥2GB(生产环境建议4GB+)
  • 磁盘空间≥10GB(数据目录单独分区更佳)
  • 内核版本≥3.10(通过uname -r验证)

1.2 依赖库安装

执行以下命令安装基础依赖:

  1. yum install -y libaio numactl openssl-devel cmake

特别说明:

  • libaio提供异步I/O支持
  • numactl优化多核CPU性能
  • OpenSSL 1.1.1+需单独安装(MySQL 8.0默认启用TLS 1.3)

1.3 防火墙配置

开放3306端口并限制访问源:

  1. firewall-cmd --permanent --add-port=3306/tcp
  2. firewall-cmd --permanent --add-source=192.168.1.0/24
  3. firewall-cmd --reload

建议结合selinux设置:

  1. setsebool -P httpd_can_network_connect 1

二、MySQL 8.0安装部署

2.1 官方仓库配置

添加MySQL YUM仓库(以8.0.33版本为例):

  1. rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
  2. yum-config-manager --enable mysql80-community

验证仓库有效性:

  1. yum repolist all | grep mysql

2.2 静默安装与配置

执行无交互安装:

  1. yum install -y mysql-community-server

安装完成后执行初始化:

  1. mysqld --initialize --user=mysql

关键输出解读:

  • 日志末尾的临时密码(格式:A temporary password is generated for root@localhost: xxxxx
  • 数据目录位置(默认/var/lib/mysql

2.3 服务启动与状态检查

  1. systemctl start mysqld
  2. systemctl enable mysqld
  3. systemctl status mysqld

验证进程监听:

  1. netstat -tulnp | grep 3306
  2. # 或使用ss命令
  3. ss -tulnp | grep 3306

三、安全配置与初始化

3.1 密码策略强化

修改root密码并设置复杂度:

  1. ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword#123';
  2. SET GLOBAL validate_password.policy=STRONG;
  3. SET GLOBAL validate_password.length=12;

3.2 访问控制配置

创建专用管理用户:

  1. CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY 'SecurePass123!';
  2. GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' WITH GRANT OPTION;
  3. FLUSH PRIVILEGES;

3.3 审计日志配置

编辑/etc/my.cnf添加:

  1. [mysqld]
  2. general_log=1
  3. general_log_file=/var/log/mysql/mysql-general.log
  4. slow_query_log=1
  5. slow_query_log_file=/var/log/mysql/mysql-slow.log
  6. long_query_time=2

四、性能优化配置

4.1 内存参数调优

关键参数建议(根据4GB内存):

  1. [mysqld]
  2. innodb_buffer_pool_size=2G
  3. innodb_log_file_size=512M
  4. innodb_flush_method=O_DIRECT
  5. key_buffer_size=256M
  6. query_cache_size=0

4.2 文件描述符限制

修改/etc/security/limits.conf

  1. mysql soft nofile 65535
  2. mysql hard nofile 65535

4.3 连接数配置

  1. [mysqld]
  2. max_connections=200
  3. thread_cache_size=32
  4. table_open_cache=4000

五、备份与恢复策略

5.1 物理备份方案

使用xtrabackup(需单独安装):

  1. yum install -y percona-xtrabackup-80
  2. innobackupex --user=root --password=YourPass /backup/mysql

5.2 逻辑备份方案

定时任务示例(每天凌晨2点):

  1. 0 2 * * * /usr/bin/mysqldump -uroot -pYourPass --single-transaction --all-databases > /backup/full_$(date +\%Y\%m\%d).sql

5.3 恢复演练步骤

  1. 停止MySQL服务
  2. 备份原有数据目录
  3. 执行恢复命令:
    1. mysql -uroot -p < backup.sql
  4. 验证数据完整性

六、监控与维护

6.1 基础监控脚本

  1. #!/bin/bash
  2. echo "MySQL Status:"
  3. systemctl status mysqld | grep Active
  4. echo -e "\nConnections:"
  5. mysql -uroot -pYourPass -e "SHOW STATUS LIKE 'Threads_connected';"
  6. echo -e "\nInnoDB Buffer:"
  7. mysql -uroot -pYourPass -e "SHOW ENGINE INNODB STATUS\G" | grep BUFFER

6.2 定期维护任务

  • 每周执行ANALYZE TABLE
  • 每月执行OPTIMIZE TABLE(仅限MyISAM)
  • 每季度清理二进制日志

七、常见问题处理

7.1 启动失败排查

  1. 检查错误日志:
    1. cat /var/log/mysqld.log
  2. 常见原因:
  • 数据目录权限问题(需chown -R mysql:mysql /var/lib/mysql
  • 端口冲突(netstat -tulnp | grep 3306
  • 配置文件语法错误(mysqld --validate-config

7.2 性能瓶颈分析

使用sys库诊断:

  1. SELECT * FROM sys.metrics WHERE Variable_name LIKE '%buffer%';
  2. SELECT * FROM sys.io_global_by_file_by_bytes;

7.3 升级注意事项

从5.7升级到8.0需特别注意:

  • 执行mysql_upgrade工具
  • 验证字符集(默认改为utf8mb4)
  • 检查存储引擎兼容性

八、最佳实践建议

  1. 采用LVM逻辑卷管理数据目录
  2. 实施基于角色的访问控制(RBAC)
  3. 配置自动故障转移(需结合Keepalived)
  4. 定期进行渗透测试(使用OWASP ZAP等工具)
  5. 建立变更管理流程(使用Ansible等工具自动化部署)

通过以上标准化流程,可在CentOS 7系统上构建高可用的MySQL 8.0单机环境。实际部署时建议先在测试环境验证所有配置,生产环境部署后应进行72小时压力测试。对于关键业务系统,建议后续升级为主从架构或集群方案。