根本原因是旧密钥残留导致密钥环冲突,必须先清空所有MySQL相关gpg-pubkey条目(如0x5072E1F5、0xA8D3785C),再导入RPM-GPG-KEY-mysql-2022和2023,并执行yum clean all && yum makecache刷新元数据。

为什么 rpm --import 后还是报 GPG check FAILED
根本不是密钥没导入,而是系统里混着旧密钥(比如 0x5072E1F5、0xA8D3785C),yum install mysql-community-server 校验时随机挑一个失败的密钥去比对新包——你刚导入的 RPM-GPG-KEY-mysql-2022 反而没被调用。
RPM 密钥环支持同名密钥共存,rpm --import 只加不删,旧密钥仍驻留在 rpm -qa gpg-pubkey 列表中。MySQL 8.0.45 或 5.7.40+ 的包必须由 key ID 3a79bd29 签名,旧密钥完全无法识别。
- 执行
rpm -qa gpg-pubkey | grep -i mysql查看是否残留多个密钥条目 - 别信“重装
mysql80-community-release就能解决”,那只是覆盖 repo 配置,不清理密钥环 - 错误提示里若出现
key ID 3a79bd29: NOKEY,就是明确信号:系统认不出这个 ID
如何彻底清理并导入正确的 GPG 密钥
必须清空所有 MySQL 相关密钥,再导入官方全量密钥。只导入不清理,90% 的失败都会复现。
- 一键清空残留密钥:
for key in $(rpm -qa gpg-pubkey | grep -i mysql | cut -d'-' -f4-); do rpm -e --allmatches gpg-pubkey-$key; done - 确认清空:
rpm -qa gpg-pubkey | grep -i mysql应无任何输出 - 导入两个官方密钥(兼容性更稳):
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022和sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 - 验证导入结果:
rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n' | grep -i mysql,应看到含2022和2023的条目
仓库配置和缓存刷新不能跳过
密钥导入成功 ≠ 安装立即成功。yum 会缓存旧的元数据,里面还硬编码着过期密钥的指纹。不清理,它继续拿旧指纹去比对新包,必然报错。
- 执行
yum clean all清掉所有缓存(包括/var/cache/yum下的 metadata 和 package cache) - 紧接着跑
yum makecache,让 yum 重新拉取仓库信息并绑定新密钥 - 检查启用的仓库:
yum repolist enabled | grep mysql,确保只有mysql80-community或mysql57-community(根据你要装的版本),禁用其他冲突段:yum-config-manager --disable mysql57-community - 确认 repo 文件
/etc/yum.repos.d/mysql-community.repo中enabled=1的是对应版本段,且gpgkey指向的是https://repo.mysql.com/RPM-GPG-KEY-mysql-2022,不是本地路径或旧 URL
安装命令和依赖冲突要严格匹配
CentOS 7/8/9 对应不同 EL 版本,MySQL 官方包也严格按 el7/el8/el9 区分。错用跨版本包,不仅依赖报错,GPG 校验也会失败——因为不同 EL 版本的包由不同密钥签名。
- CentOS 7 必须用
mysql80-community-release-el7或mysql57-community-release-el7仓库包,不能用 el8/el9 的 - 安装命令必须写全:
yum install mysql-community-server,不能简写成mysql-server(那是 MariaDB 兼容包) - 若之前装过 MariaDB,先执行
yum remove mariadb-libs mariadb-server,否则依赖冲突会干扰 GPG 验证流程 - SSL 证书过期导致
rpm --import https://失败时,仅临时加--nogpgcheck:rpm --import --nogpgcheck https://repo.mysql.com/RPM-GPG-KEY-mysql-2022,后续所有操作必须恢复校验
最常被忽略的是:密钥清理必须在 yum install 前完成,且不能只删 /etc/pki/rpm-gpg/ 下的文件——那些只是副本,真正起作用的是 RPM 数据库里的 gpg-pubkey- 条目。


















