CentOS7安装MySQL8.0全流程指南

CentOS7安装MySQL8.0版本详细步骤

一、环境准备与系统检查

在安装MySQL8.0前,需确保CentOS7系统满足以下条件:

  1. 系统版本验证:通过cat /etc/redhat-release确认系统为CentOS7.x版本,建议使用最新小版本以避免兼容性问题。
  2. 内存与磁盘空间:MySQL8.0基础安装需至少2GB内存和5GB可用磁盘空间,生产环境建议配置更高资源。
  3. 防火墙与SELinux状态
    • 临时关闭防火墙:systemctl stop firewalld
    • 永久禁用防火墙(可选):systemctl disable firewalld
    • 检查SELinux状态:getenforce,若为Enforcing需通过setenforce 0临时关闭或修改/etc/selinux/config文件永久禁用。

注意事项:生产环境建议配置防火墙规则而非完全禁用,例如开放3306端口:

  1. firewall-cmd --zone=public --add-port=3306/tcp --permanent
  2. firewall-cmd --reload

二、依赖库安装与系统更新

MySQL8.0依赖若干关键库,需通过yum安装:

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

版本兼容性说明

  • libaio需0.3.109以上版本,可通过rpm -qa | grep libaio验证
  • 若系统缺少依赖,会提示类似Error: Package: mysql-community-server-8.0.xx的错误,需根据提示安装对应包

系统更新步骤:

  1. yum update -y
  2. reboot # 确保所有更新生效

三、MySQL8.0 RPM包安装

1. 添加MySQL官方YUM仓库

  1. rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm

验证仓库

  1. yum repolist enabled | grep mysql

应显示mysql80-community条目。

2. 安装MySQL服务器

  1. yum install -y mysql-community-server

安装过程关键点

  • 自动解决依赖关系,若卡在Transaction Check Error,检查是否有冲突的mariadb包
  • 安装完成后,/var/log/mysqld.log会记录初始root密码

3. 启动服务与初始化

  1. systemctl start mysqld
  2. systemctl enable mysqld # 设置开机自启

获取初始密码

  1. grep 'temporary password' /var/log/mysqld.log

输出示例:2023-08-01T10:00:00.000Z 1 [Note] A temporary password is generated for root@localhost: Abc123xyz

四、安全配置与密码修改

运行安全脚本:

  1. mysql_secure_installation

配置流程

  1. 输入初始密码后,系统会要求设置新密码(需满足复杂度要求:大小写+数字+特殊字符)
  2. 移除匿名用户:Remove anonymous users? [Y/n] Y
  3. 禁止root远程登录:Disallow root login remotely? [Y/n] Y
  4. 移除测试数据库:Remove test database and access to it? [Y/n] Y
  5. 重新加载权限表:Reload privilege tables now? [Y/n] Y

密码策略调整(如需简化):

  1. -- 登录MySQL后执行
  2. SET GLOBAL validate_password.policy=LOW;
  3. SET GLOBAL validate_password.length=4;
  4. ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';

五、客户端连接与基础配置

1. 本地连接测试

  1. mysql -u root -p

输入新密码后,应看到MySQL欢迎界面。

2. 远程访问配置

编辑配置文件:

  1. vi /etc/my.cnf

[mysqld]段添加:

  1. bind-address = 0.0.0.0 # 允许所有IP连接(生产环境建议指定IP)

创建远程用户:

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

3. 防火墙配置(如未禁用)

  1. firewall-cmd --permanent --add-port=3306/tcp
  2. firewall-cmd --reload

六、常见问题解决方案

1. 依赖冲突处理

若出现Error: mysql-community-server conflicts with mariadb-server,需先卸载MariaDB:

  1. yum remove mariadb* -y

2. 启动失败排查

检查错误日志:

  1. cat /var/log/mysqld.log | grep -i error

常见原因:

  • 端口占用:netstat -tulnp | grep 3306
  • 数据目录权限:chown -R mysql:mysql /var/lib/mysql

3. 字符集配置优化

编辑/etc/my.cnf添加:

  1. [client]
  2. default-character-set=utf8mb4
  3. [mysql]
  4. default-character-set=utf8mb4
  5. [mysqld]
  6. character-set-server=utf8mb4
  7. collation-server=utf8mb4_unicode_ci

重启服务生效:

  1. systemctl restart mysqld

七、性能优化建议

1. 内存配置调整

根据服务器内存修改/etc/my.cnf

  1. [mysqld]
  2. innodb_buffer_pool_size = 1G # 建议设为物理内存的50-70%
  3. innodb_log_file_size = 256M
  4. query_cache_size = 64M

2. 连接数配置

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

3. 慢查询日志

  1. [mysqld]
  2. slow_query_log = 1
  3. slow_query_log_file = /var/log/mysql/mysql-slow.log
  4. long_query_time = 2

八、备份与恢复策略

1. 逻辑备份

  1. mysqldump -u root -p --all-databases --single-transaction > full_backup.sql

2. 物理备份(需停机)

  1. systemctl stop mysqld
  2. cp -r /var/lib/mysql /backup/mysql_backup_$(date +%Y%m%d)
  3. systemctl start mysqld

3. 定时备份脚本

创建/usr/local/bin/mysql_backup.sh

  1. #!/bin/bash
  2. BACKUP_DIR="/backup/mysql"
  3. DATE=$(date +%Y%m%d_%H%M)
  4. mysqldump -u root -p'YOUR_PASSWORD' --all-databases > $BACKUP_DIR/full_$DATE.sql
  5. find $BACKUP_DIR -name "*.sql" -mtime +7 -exec rm {} \;

添加执行权限并设置cron:

  1. chmod +x /usr/local/bin/mysql_backup.sh
  2. crontab -e
  3. # 添加以下行(每天凌晨2点备份)
  4. 0 2 * * * /usr/local/bin/mysql_backup.sh

九、升级与维护

1. 版本升级

检查可用更新:

  1. yum list --showduplicates mysql-community-server

执行升级:

  1. yum update mysql-community-server -y
  2. systemctl restart mysqld

2. 日志轮转配置

编辑/etc/logrotate.d/mysql

  1. /var/log/mysqld.log {
  2. daily
  3. rotate 7
  4. missingok
  5. compress
  6. delaycompress
  7. notifempty
  8. create 640 mysql adm
  9. sharedscripts
  10. postrotate
  11. # 触发MySQL重新打开日志文件
  12. if test -x /usr/bin/mysqladmin && \
  13. /usr/bin/mysqladmin ping &>/dev/null
  14. then
  15. /usr/bin/mysqladmin flush-logs
  16. fi
  17. endscript
  18. }

十、总结与最佳实践

  1. 安全优先:始终使用强密码,限制root远程访问
  2. 定期维护:每周检查错误日志,每月进行备份验证
  3. 性能监控:使用mysqltuner.pl脚本进行性能分析
  4. 文档记录:保存所有配置变更记录,便于故障排查

通过以上步骤,您可以在CentOS7上成功部署并优化MySQL8.0数据库。实际生产环境中,建议结合监控工具(如Prometheus+Grafana)和自动化运维平台(如Ansible)实现高效管理。