报“密钥过期”或“密钥不匹配”实为系统残留旧密钥(如0x5072E1F5)导致yum随机选用失败密钥校验,新导入的2022/2023密钥未被调用;须彻底清理所有MySQL相关gpg-pubkey后重新导入官方全量密钥,并同步检查仓库启用状态、卸载mariadb-libs、刷新yum缓存。

直接告诉你结论:报“秘钥过期”或“密钥不匹配”不是因为密钥真过期了,而是系统里混着旧密钥(比如 0x5072E1F5、0xA8D3785C),yum 校验时随机挑一个失败的密钥报错——你刚导入的 RPM-GPG-KEY-mysql-2022 反而没被用上。
为什么 rpm --import 新密钥后还是报 GPG 错误
根本原因是 RPM 密钥环支持多个同名密钥共存,旧密钥不会被新密钥覆盖。只要系统里还留着 gpg-pubkey-5072e1f5-* 这类残留项,yum install mysql-community-server 就可能拿它去校验 MySQL 8.0.45 的包,而这个旧密钥根本签不了新包。
- MySQL 8.0.45 要求用 2022 或 2023 年发布的密钥(如
https://repo.mysql.com/RPM-GPG-KEY-mysql-2022) -
rpm --import只加不删,旧密钥仍驻留在rpm -qa gpg-pubkey列表中 - 阿里云等镜像源若未同步密钥更新,也可能导致本地 repo 配置指向旧密钥 URL
如何彻底清理并导入正确 GPG 密钥
必须清空所有 MySQL 相关密钥,再导入官方全量密钥。别信“重装 repo 包就能解决”,那只是掩耳盗铃。
- 执行批量清理命令(安全、生产环境可用):
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<br>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的条目
安装前必须检查的三个关键点
光导密钥不够,仓库配置和依赖冲突一样会卡在 GPG 阶段。
- 确认只启用了
mysql80-community:yum repolist enabled | grep mysql,若出现mysql57-community,立刻禁用:yum-config-manager --disable mysql57-community - 卸载
mariadb-libs(否则依赖冲突):yum remove -y mariadb-libs,注意加--force或--nodeps可能引发后续问题,优先走标准卸载流程 - 刷新全部缓存:
yum clean all && yum makecache,避免旧元数据干扰密钥匹配逻辑
最容易被忽略的是:密钥清理必须在 yum install 前完成,且不能只删文件(如 /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql),RPM 密钥环是独立数据库,必须用 rpm -e gpg-pubkey-* 彻底清除。一旦漏掉一个旧密钥 ID,下次安装就可能复现同样错误。


















