CentOS 7 环境下手动部署 MySQL 8.0 完整指南
一、背景与挑战
尽管容器化技术已经普及,CentOS 7 在传统企业机房中依然占据重要地位。然而,由于 CentOS 7 已进入生命周期终止(EOL)状态,官方软件源逐渐失效,直接通过 yum 安装 MySQL 8.0 会遇到镜像源不可用、GPG 密钥验证失败等问题。本文将从系统初始化开始,逐步解决这些痛点,完成 MySQL 8.0 的完整部署。
二、基础环境配置
2.1 检查系统版本
确认操作系统为 CentOS 7.x 系列:
cat /etc/redhat-release
示例输出:CentOS Linux release 7.9.2009 (Core)
2.2 关闭防火墙与 SELinux(仅测试环境)
为避免网络限制导致安装失败,临时关闭系统安全模块:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2.3 更换为国内镜像源
官方源已废弃,必须使用可用的镜像源:
# 备份原配置
mkdir -p /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
# 下载阿里云源配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清理并重建缓存
yum clean all
yum makecache
2.4 配置 DNS 解析
如果服务器无法解析外部域名(如 repo.mysql.com),需手动指定 DNS:
# 修改网卡配置文件,根据实际接口名调整
echo -e "DNS1=223.5.5.5\nDNS2=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
三、MySQL 8.0 软件源部署
3.1 下载并安装 MySQL 官方 Yum 仓库包
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
安装后在 /etc/yum.repos.d/ 下生成 mysql-community.repo 文件。
3.2 理解 GPG 验证机制
MySQL 8.0.41 以上版本使用更新后的 GPG 密钥 RPM-GPG-KEY-mysql-2022,而默认配置指向旧密钥 RPM-GPG-KEY-mysql,导致验证失败。
四、修复 GPG 签名验证失败
4.1 错误现象
执行安装命令时出现如下错误:
源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装,但是不适用于此软件包。
4.2 方案一:更新密钥指向
下载并导入新密钥,同时修改 yum 源配置:
# 下载新密钥到系统密钥目录
wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
# 导入密钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
# 修改 repo 文件中的 gpgkey 路径
sed -i 's|RPM-GPG-KEY-mysql|RPM-GPG-KEY-mysql-2022|g' /etc/yum.repos.d/mysql-community.repo
验证导入结果:
gpg --list-keys | grep mysql
4.3 方案二:强制跳过 GPG 检查(仅开发环境)
临时或全局禁用 GPG 验证:
# 安装时跳过检查
yum install --nogpgcheck mysql-community-server
# 或修改全局配置(不推荐)
echo "gpgcheck=0" >> /etc/yum.conf
五、安装与初始化 MySQL 8.0
5.1 执行安装
yum install -y mysql-community-server
5.2 启动服务并设置自启
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
5.3 获取初始临时密码
MySQL 8.0 首次启动时会自动生成随机 root 密码:
grep 'temporary password' /var/log/mysqld.log
输出示例:A temporary password is generated for root@localhost: XyZ!abc123
5.4 修改 root 密码
使用临时密码登录:
mysql -u root -p
执行 SQL 修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass_2024!';
FLUSH PRIVILEGES;
注意:密码必须符合复杂度要求(大小写、数字、特殊字符,长度≥8)。
六、安全与性能调优
6.1 允许远程连接
创建可远程登录的 root 用户:
CREATE USER 'root'@'%' IDENTIFIED BY 'NewStrongPass_2024!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
修改配置文件(/etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf):
# 注释或修改 bind-address
# bind-address = 127.0.0.1
重启服务:systemctl restart mysqld
6.2 运行安全加固脚本
mysql_secure_installation
根据提示完成:移除匿名用户、禁止 root 远程登录、删除测试库、刷新权限。
6.3 字符集与连接数优化
在 [mysqld] 段添加:
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
max_connections = 500
innodb_buffer_pool_size = 2G
客户端配置:
[client]
default-character-set = utf8mb4
七、常见故障排查
7.1 Yum 源无法下载
如果使用阿里云源仍失败,尝试清华大学源:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/centos/7/CentOS-Base.repo
7.2 GPG 密钥持续报错
- 确认系统时间正确(
date命令) - 清除缓存:
yum clean all - 重新导入密钥
7.3 服务无法启动
检查端口占用与数据目录权限:
netstat -tunlp | grep 3306
chown -R mysql:mysql /var/lib/mysql
查看详细错误:journalctl -u mysqld