一、引言:CentOS 7 部署 MySQL 面临的独特挑战
在云计算和容器化技术盛行的今天,CentOS 7 依然是许多企业生产环境的选择。然而,随着 CentOS 官方停止维护,其软件源更新滞后、安全漏洞修复不及时等问题日益凸显。尤其是在部署 MySQL 8.0 时,用户往往会遇到镜像源失效、GPG 签名验证失败等棘手问题。本文将结合实际操作场景,详细阐述如何在 CentOS 7 上成功部署 MySQL 8.0,并深入解析镜像源替换、DNS 配置、GPG 验证等核心难点的解决方案。
二、环境准备:基础配置与网络优化
2.1 CentOS 7 系统初始化
2.1.1 检查系统版本
bash
cat /etc/redhat-release
# 输出示例:CentOS Linux release 7.9.2009 (Core)
2.1.2 关闭防火墙与 SELinux(测试环境适用)
bash
# 停止防火墙服务
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭 SELinux
setenforce 0
# 永久关闭(修改配置文件)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2.2 镜像源替换:从官方源到国内镜像
2.2.1 CentOS 7 官方源失效问题
由于 CentOS 7 已停止维护,默认的 base
、updates
等官方源可能无法访问,导致 yum
命令报错:
plaintext
Cannot find a valid baseurl for repo: base/7/x86_64
2.2.2 切换至阿里云镜像源
步骤 1:备份原镜像源文件
bash
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
步骤 2:下载阿里云 CentOS 7 镜像源配置
bash
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
步骤 3:清除缓存并重建元数据
bash
yum clean all
yum makecache
2.2.3 验证镜像源有效性
bash
yum repolist
# 预期输出:显示阿里云镜像源的仓库列表
2.3 DNS 配置优化:解决网络解析问题
2.3.1 DNS 服务器设置背景
若服务器默认 DNS 解析缓慢或无法访问外部镜像源(如 MySQL 官方仓库),需手动配置公共 DNS 服务器,例如:
- Google DNS:8.8.8.8
- 阿里云 DNS:223.5.5.5
2.3.2 修改网络配置文件
bash
vim /etc/sysconfig/network-scripts/ifcfg-eth0 # 根据实际网卡名称修改
在文件中添加以下内容:
ini
DNS1=8.8.8.8
DNS2=223.5.5.5
2.3.3 重启网络服务使配置生效
bash
systemctl restart network
三、MySQL 8.0 安装前的核心准备:源配置与 GPG 验证
3.1 安装 MySQL Yum 源
3.1.1 下载 MySQL 官方 Yum 源配置包
bash
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
3.1.2 安装配置包
bash
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
安装后会在 /etc/yum.repos.d/
目录生成 mysql-community.repo
文件。
3.2 解析 GPG 验证机制
3.2.1 GPG 验证的作用
GPG(GNU Privacy Guard)用于验证软件包的完整性和来源合法性,防止恶意篡改。MySQL 8.0.41 及以上版本使用新的 RPM-GPG-KEY-mysql-2022
密钥,旧密钥(如 RPM-GPG-KEY-mysql
)无法验证新版本软件包。
3.2.2 查看默认 GPG 密钥配置
bash
vim /etc/yum.repos.d/mysql-community.repo
默认配置中 gpgkey
指向旧密钥:
ini
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
四、核心难点突破:GPG 签名验证失败解决方案
4.1 错误现象分析
在执行 yum install mysql-community-server
时,常见错误如下:
plaintext
警告:/var/cache/yum/.../mysql-community-libs-8.0.42-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID a8d3785c: NOKEY
源 "MySQL 8.0 Community Server" 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。
原因:默认使用旧密钥 RPM-GPG-KEY-mysql
,而软件包需要新密钥 RPM-GPG-KEY-mysql-2022
。
4.2 方案一:修改 GPG Key 指向新密钥
4.2.1 下载并导入新密钥
bash
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
4.2.2 使用 Vim 修改 Yum 源配置
bash
vim /etc/yum.repos.d/mysql-community.repo
将所有仓库中的 gpgkey
路径修改为新密钥:
ini
[mysql80-community]
...
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
[mysql57-community]
...
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
4.2.3 验证密钥导入结果
bash
gpg --list-keys | grep mysql
# 预期输出:显示新密钥的指纹和用户信息
4.3 方案二:忽略 GPG 验证(终极解决方案)
4.3.1 安全风险提示
忽略 GPG 验证会绕过软件包签名检查,可能导致安装被篡改的恶意软件,仅限测试环境使用。
4.3.2 临时忽略单个软件包验证
bash
yum install --nogpgcheck mysql-community-server
4.3.3 全局忽略 GPG 验证(不推荐)
修改 /etc/yum.conf
文件,添加:
ini
gpgcheck=0
注意:此操作会禁用所有软件包的 GPG 验证,存在严重安全隐患。
五、MySQL 8.0 安装与初始化配置
5.1 执行安装命令
bash
yum install -y mysql-community-server
安装过程中需确认依赖关系,等待软件包下载并安装完成。
5.2 启动 MySQL 服务
bash
# 启动服务
systemctl start mysqld
# 查看服务状态
systemctl status mysqld
# 设置开机自启
systemctl enable mysqld
5.3 获取临时密码
MySQL 8.0 首次启动时会生成随机临时密码,存储在日志文件中:
bash
grep 'temporary password' /var/log/mysqld.log
# 输出示例:A temporary password is generated for root@localhost: S9pNthwkJd:X
5.4 登录并修改密码
5.4.1 使用临时密码登录
bash
mysql -u root -p
# 输入临时密码(注意保留冒号)
5.4.2 修改 root 密码
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPassword123!';
FLUSH PRIVILEGES;
EXIT;
密码策略说明:
- MySQL 8.0 默认启用密码复杂度检查(
validate_password
插件),密码需包含至少 8 个字符、大小写字母、数字和特殊符号。
六、高级配置与安全加固
6.1 允许远程登录
6.1.1 修改权限表
sql
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPassword123!';
CREATE USER 'root'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
6.1.2 修改 MySQL 配置文件
bash
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉 bind-address = 127.0.0.1
以允许所有 IP 访问(生产环境需谨慎)。
6.2 安全配置向导
运行官方提供的安全脚本:
bash
mysql_secure_installation
依次完成以下设置:
- 输入当前 root 密码
- 是否移除匿名用户(建议移除)
- 是否禁止 root 远程登录(建议启用)
- 是否移除测试数据库(建议移除)
- 刷新权限表
6.3 配置文件优化
6.3.1 调整字符集
修改 /etc/mysql/mysql.conf.d/mysqld.cnf
,添加:
ini
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
6.3.2 优化连接数
ini
[mysqld]
max_connections = 1000
table_open_cache = 2048
innodb_buffer_pool_size = 4G # 根据服务器内存调整
七、故障排查与常见问题解决
7.1 镜像源失效问题
现象:yum
命令无法下载软件包
- 解决方案:切换至其他国内镜像源(如清华大学镜像源),确保
baseurl
路径正确。
7.2 GPG 验证失败
现象:重复提示密钥不匹配
- 解决方案:
- 确认密钥文件路径正确(
RPM-GPG-KEY-mysql-2022
) - 清除 Yum 缓存并重新导入密钥
- 检查系统时间是否正确(避免证书过期)
- 确认密钥文件路径正确(
7.3 服务无法启动
现象:systemctl start mysqld
报错
- 常见原因:
- 端口冲突(检查 3306 端口是否被占用)
- 数据目录权限错误(默认
/var/lib/mysql
需属主为mysql
用户)
- 解决命令:
bash
netstat -tunlp | grep 3306 chown -R mysql:mysql /var/lib/mysql