rpm --import 是解决 MySQL 8.0 GPG 密钥失效最直接方式,但需先清理旧密钥(rpm -e --allmatches $(rpm -qa gpg-pubkey | grep -i mysql | cut -d' ' -f1))、导入最新 RPM-GPG-KEY-mysql-2023、修正仓库中 gpgkey 为 https://repo.mysql.com/RPM-GPG-KEY-mysql-2023、启用 gpgcheck=1,并执行 dnf clean all && dnf makecache。

rpm --import 是解决 MySQL 8.0 安装时 GPG 密钥失效最直接有效的方式,但必须配合密钥清理、仓库配置和缓存刷新才能真正生效。跳过验证(--nogpgcheck)只是临时绕过,不解决根本问题。
先确认当前系统已安装哪些 MySQL 密钥
很多问题其实源于“旧密钥还在,新密钥没清干净”。执行以下命令查看:
rpm -qa gpg-pubkey | grep -i mysql
输出类似 gpg-pubkey-3a79bd29-61b8bab7 或 gpg-pubkey-5072e1f5-5c4058fb,说明已有残留密钥。这些 ID 对应不同年份的签名(如 3a79bd29 是 2022/2023 年密钥,5072e1f5 是更早版本),混用必然失败。
- 如果输出为空,说明密钥缺失,需直接导入最新密钥
- 如果有输出,建议全部清除,避免冲突 —— 尤其在 CentOS/RHEL 8+、Rocky/AlmaLinux 9 等系统上
- 清除命令(安全且批量):
rpm -e --allmatches $(rpm -qa gpg-pubkey | grep -i mysql | cut -d' ' -f1)
导入对应系统年份的最新官方密钥
MySQL 官方每年更新一次主密钥,2026 年当前有效的是 RPM-GPG-KEY-mysql-2023(注意:不是 2022,也不是 2024 —— 官方尚未发布 2024 版,2023 版仍为最新,截至 2026 年 5 月)。
- 推荐命令(远程导入,无需下载文件):
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 - 若网络受限或超时,可手动下载再导入:
wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 -O /tmp/RPM-GPG-KEY-mysql-2023 && rpm --import /tmp/RPM-GPG-KEY-mysql-2023 - Ubuntu/Debian 用户请用:
curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | sudo gpg --dearmor -o /usr/share/keyrings/mysql-2023-keyring.gpg(APT 系统不认 RPM 密钥)
检查并修正仓库配置中的 gpgkey 路径
即使密钥已导入,如果 /etc/yum.repos.d/mysql-community.repo 中的 gpgkey 指向错误路径,YUM/DNF 仍会校验失败。
- 打开仓库文件:
vi /etc/yum.repos.d/mysql80-community.repo - 找到
[mysql80-community]段,确认gpgkey值为:https://repo.mysql.com/RPM-GPG-KEY-mysql-2023(不是file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql,该路径不会自动创建) -
gpgcheck=1必须保持启用;设为 0 是放弃安全机制,不建议 - EL9 系统务必确认 baseurl 中是
el9,不是el7或el8—— 密钥与包版本强绑定
清理缓存并重建元数据
旧缓存里存着过期的密钥指纹和包签名信息,不清掉,新密钥无法参与校验。
- 执行:
yum clean all(CentOS 7/RHEL 7)或dnf clean all(RHEL 8+/Rocky/AlmaLinux) - 再重建缓存:
yum makecache或dnf makecache - 验证是否成功:
dnf --refresh list available mysql-community-server—— 若不再报 GPG 错误,说明密钥链已就绪
真正容易被忽略的是:密钥 ID(如 3a79bd29)和年份(2023)必须严格匹配你正在安装的 MySQL 包版本。2026 年发布的 mysql-community-server-8.0.46 仍由 2023 年密钥签名,这不是滞后,而是 MySQL 官方当前的签名策略周期。











