清理旧密钥比导入新密钥更重要,因为rpm --import只添加不删除,系统残留的旧密钥(如0x5072e1f5)会与新密钥共存,yum随机选用失败密钥校验新包;必须用rpm -e --allmatches彻底卸载所有gpg-pubkey-*匹配项,再导入rpm-gpg-key-mysql-2023并刷新缓存。

rpm --import 不能单独起作用,必须先清旧密钥、再导新密钥、最后刷新缓存——否则 yum install mysql-community-server 仍会随机挑一个失败的旧密钥去校验新包。
为什么清理旧密钥比导入新密钥更重要
报错不是密钥真过期了,而是系统里混着多个 MySQL 相关密钥(比如 gpg-pubkey-5072e1f5-*、gpg-pubkey-b7b3b788a8d3785c-*),yum/dnf 随机选一个校验,而你刚导入的 RPM-GPG-KEY-mysql-2023 根本没被用上。
-
rpm --import只加不删,旧密钥一直留在rpm -qa gpg-pubkey列表里 - 残留密钥 ID(如
0x5072E1F5)对应的是 MySQL 5.7 或更早签名,无法验证 MySQL 8.0.46+ 的包 - 执行
rpm -qa gpg-pubkey | grep -i mysql有输出,就说明还没清干净
彻底清理所有 MySQL GPG 密钥的命令
别信“重装 repo 包”或“删文件就行”,必须从 RPM 数据库中真正卸载所有匹配项。
- 批量清除(安全、生产可用):
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 rm -f /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql*
导入并验证最新官方密钥(2023 版)
截至 2026 年 9 月,MySQL 官方仍在使用 RPM-GPG-KEY-mysql-2023,不是 2022,也不是 2024(尚未发布)。指纹必须是 3A79BD29。
- 远程导入(推荐):
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,应看到含2023的条目 - Debian/Ubuntu 用户注意:
apt不认 RPM 密钥,需用curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | sudo gpg --dearmor -o /usr/share/keyrings/mysql-2023-keyring.gpg,并在源配置中指定signed-by=/usr/share/keyrings/mysql-2023-keyring.gpg
仓库配置和缓存刷新不可跳过
即使密钥已导入,若仓库配置错误或缓存未更新,GPG 校验仍会失败。
- 检查
/etc/yum.repos.d/mysql-community.repo中的gpgkey是否为https://repo.mysql.com/RPM-GPG-KEY-mysql-2023(不是file://路径) - 确保
gpgcheck=1保持启用;设为0是放弃安全机制 - 执行:
sudo yum clean all && sudo yum makecache(RHEL/CentOS/Rocky/AlmaLinux)或sudo dnf clean all && sudo dnf makecache(EL8+)
yum install 前完成,且不能只删文件;gpgkey 配置里的 URL 必须与导入的密钥版本严格一致——这两点最容易被忽略。











