CentOS 7 安装 MySQL 8.0.45 解决 GPG 密钥不匹配问题(生产环境合规版)
一、文档说明
1.1 适用场景
本文适用于 CentOS 7 系统,在安装 MySQL 8.0.45 社区版(通过 YUM 源方式)时,遇到「GPG 密钥已安装但与包不匹配」报错的生产环境解决方案。
核心报错信息(本文重点解决):
The GPG keys listed for the “MySQL 8.0 Community Server” repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository. Failing package is: mysql-community-common-8.0.45-1.el7.x86_64. GPG Keys are configured as: https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
1.2 环境前提
- 系统:CentOS 7(x86_64,任意内核版本,生产环境稳定版优先);
- 权限:已获取 root 用户权限(生产环境操作必备);
- 状态:已尝试安装 MySQL 8.0.45,出现上述 GPG 密钥不匹配报错,且已清理旧 MySQL YUM 源配置;
- 网络:服务器可正常访问外网(需下载官方密钥及 MySQL 安装包)。
1.3 文档价值
针对生产环境「安全性、合规性」要求,提供「彻底清理密钥冲突+重新导入官方全量密钥」的解决方案,不跳过 GPG 验证、不降低系统安全等级,全程可追溯、可复用,解决 CentOS 7 与 MySQL 8.0.45 密钥适配兼容性问题。
二、问题根源分析
生产环境出现该报错的核心原因的是 系统密钥环残留冲突,具体如下:
- MySQL 8.0.45 版本对 GPG 密钥校验更严格,需匹配官方 2022/2023 版密钥;
- 系统此前可能安装过 MySQL 旧版本、旧 YUM 源,导致密钥环中残留旧版 MySQL 密钥(如 0x5072E1F5 旧密钥);
- 残留旧密钥与 MySQL 8.0.45 包所需的新密钥冲突,即使重新导入新密钥,系统仍会优先校验残留旧密钥,导致报错;
- YUM 缓存中留存了旧的密钥校验信息,未彻底清理,进一步加剧冲突。
三、解决方案(生产环境合规版)
核心思路:彻底清理所有 MySQL 相关残留密钥 → 导入 MySQL 官方全量密钥 → 强制刷新 YUM 缓存 → 正常安装 MySQL 8.0.45,全程保留 GPG 验证,符合生产环境安全规范。
步骤 1:清理系统中所有 MySQL 相关 GPG 密钥(关键步骤)
执行以下命令,批量列出并删除密钥环中所有与 MySQL 相关的 GPG 密钥,彻底清除冲突根源(生产环境可安全执行,仅删除 MySQL 相关密钥,不影响其他软件):
# 批量列出并删除所有 MySQL 相关 GPG 密钥forkeyin$(rpm -qa gpg-pubkey |grep -i mysql |cut -d '-' -f 4-);dorpm -e --allmatches gpg-pubkey-$keydone执行说明:
- 命令会先通过
rpm -qa gpg-pubkey | grep -i mysql列出所有 MySQL 相关密钥; - 通过
cut -d '-' -f 4-提取密钥编号,再通过rpm -e --allmatches彻底删除该密钥(包括所有匹配的版本); - 执行后无报错即说明清理成功,若提示“未找到对应密钥”,说明系统中无残留,可直接进入下一步。
步骤 2:导入 MySQL 官方全量密钥(覆盖所有版本,避免遗漏)
清理完成后,重新导入 MySQL 官方全量密钥(包括旧版、2022 版、2023 版),确保与 MySQL 8.0.45 包的密钥校验完全匹配,执行以下命令:
# 下载 MySQL 官方基础密钥包并导入wget https://repo.mysql.com/RPM-GPG-KEY-mysql -O /tmp/RPM-GPG-KEY-mysql rpm --import /tmp/RPM-GPG-KEY-mysql # 导入 MySQL 2022 版官方密钥(适配 MySQL 8.0+ 新版本)rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 # 导入 MySQL 2023 版官方密钥(兼容 MySQL 8.0.45+ 高版本校验)rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 执行说明:
- 先下载基础密钥包到 /tmp 目录(避免直接覆盖系统默认路径,更安全),再导入;
- 依次导入 2022、2023 版密钥,确保覆盖 MySQL 8.0.45 所需的所有校验密钥;
- Linux 系统中,密钥导入成功后无任何输出,若提示“密钥已导入”,属于正常现象,无需重复操作。
步骤 3:强制清理 YUM 缓存(彻底清除旧校验信息)
仅执行 yum clean all 无法彻底清理密钥校验缓存,需手动删除缓存目录,再重新生成缓存,执行以下命令(生产环境可安全执行):
# 强制清理 YUM 所有缓存(包括包缓存、密钥校验缓存) yum clean all &&rm -rf /var/cache/yum/* # 重新生成 YUM 缓存(仅缓存 MySQL 官方源相关信息,避免混杂) yum makecache fast 执行说明:
rm -rf /var/cache/yum/*会彻底删除 YUM 缓存目录下的所有文件,确保旧的密钥校验信息被完全清除;yum makecache fast会快速生成新的缓存,缩短后续安装时间;- 缓存生成成功后,会显示 MySQL 8.0 仓库的包数量,说明缓存生成正常。
步骤 4:配置 MySQL 8.0 官方 YUM 源(确保源配置正确)
若此前已清理旧源配置,需重新创建 MySQL 8.0 官方 YUM 源配置文件,确保源地址和密钥地址正确,执行以下命令:
# 创建并写入 MySQL 8.0 官方 YUM 源配置cat> /etc/yum.repos.d/mysql-community.repo <<EOF [mysql80-community] name=MySQL 8.0 Community Server baseurl=https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/ enabled=1 gpgcheck=1 # 配置官方 2022 版密钥地址(与步骤 2 导入的密钥对应) gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 EOF执行说明:该配置文件仅包含 MySQL 8.0 官方源,无多余干扰项,确保安装时从官方源下载包,且密钥地址与导入的密钥一致。
步骤 5:安装 MySQL 8.0.45 服务器(生产环境安全安装)
完成上述所有步骤后,密钥冲突已彻底解决,执行以下命令安装 MySQL 8.0.45,全程会正常进行 GPG 密钥验证,且验证会通过:
yum install -y mysql-community-server 安装说明:
- 安装过程中,系统会自动校验包的 GPG 密钥,无需手动干预;
- 若出现“导入 GPG 密钥”提示,直接按 y 确认即可(与步骤 2 导入的密钥一致);
- 安装完成后,系统会自动配置 MySQL 相关依赖,无需额外操作。
四、安装后生产环境必做验证(合规性检查)
安装完成后,需执行以下验证步骤,确保 MySQL 服务正常、密钥校验合规、包完整,符合生产环境要求:
验证 1:查看 MySQL 版本,确认安装成功
mysql --version 正常输出示例(需包含 8.0.45 版本):
mysql Ver 8.0.45 for Linux on x86_64 (MySQL Community Server - GPL)
验证 2:启动 MySQL 服务并设置开机自启
# 启动 MySQL 服务 systemctl start mysqld # 设置开机自启(生产环境必做,避免服务器重启后服务失效) systemctl enable mysqld # 查看 MySQL 服务状态 systemctl status mysqld 正常状态:输出中包含 active (running),无报错信息,说明服务启动正常。
验证 3:验证 GPG 密钥校验合规性
检查 MySQL 安装包的 GPG 校验状态,确保包未被篡改,符合生产环境安全要求:
# 验证 MySQL 核心包的 GPG 校验状态rpm -K /var/cache/yum/x86_64/7/mysql80-community/packages/mysql-community-common-8.0.45-1.el7.x86_64.rpm 正常输出示例(需包含 pgp sha256 OK):
mysql-community-common-8.0.45-1.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
验证 4:修改初始密码(生产环境必做)
MySQL 8.0.45 安装后会生成临时初始密码,需立即修改为生产环境强密码(符合复杂度:大小写+数字+特殊字符,长度≥8):
# 提取初始密码(从 MySQL 日志中获取)temp_pass=$(grep'temporary password' /var/log/mysqld.log |awk'{print $NF}')# 登录 MySQL 并修改初始密码(一行命令执行,无需手动输入密码) mysql -uroot -p$temp_pass --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass@2026'; FLUSH PRIVILEGES;"说明:将 YourStrongPass@2026 替换为生产环境实际使用的强密码,执行后无报错即说明密码修改成功。
五、常见问题补充(生产环境适配)
问题 1:执行密钥删除命令时,提示“无对应密钥”
原因:系统中无 MySQL 相关残留密钥,属于正常现象;
解决:直接跳过该步骤,进入“导入官方全量密钥”步骤即可。
问题 2:wget 下载密钥时提示“无法连接”
原因:生产环境服务器外网访问受限,无法访问 MySQL 官方地址;
解决:手动下载 https://repo.mysql.com/RPM-GPG-KEY-mysql 密钥文件,上传至服务器 /tmp 目录,再执行 rpm --import /tmp/RPM-GPG-KEY-mysql。
问题 3:安装时仍提示密钥不匹配
原因:密钥缓存未彻底清除,或源配置与密钥地址不对应;
解决:重新执行“步骤 1-步骤 3”,确保密钥清理干净、缓存彻底刷新,再重新安装。
六、总结
- 核心结论:本文方案通过「彻底清理残留密钥+导入官方全量密钥+强制刷新缓存」,从根源解决了 CentOS 7 安装 MySQL 8.0.45 时的 GPG 密钥不匹配问题,全程保留 GPG 验证,符合生产环境安全合规要求;
- 关键要点:生产环境禁止跳过 GPG 验证,密钥冲突的核心是“残留旧密钥干扰”,彻底清理是解决问题的关键;
- 可复用性:本文所有命令均可直接复制执行,适配所有 CentOS 7 系统+MySQL 8.0.45 版本的密钥冲突场景,生产环境可直接复用;
- 后续建议:安装完成后,定期检查 MySQL 服务状态和密钥校验状态,确保生产环境 MySQL 运行稳定、安全。