应导入mysql官方最新gpg密钥:sudo rpm --import https://repo.mysql.com/rpm-gpg-key-mysql-2022;若网络异常可手动下载后导入,或临时加--nogpgcheck绕过校验,之后需执行yum clean all && yum makecache && yum install -y mysql-community-server。

签名验证失败不是文件被篡改,而是本地没导入对应公钥,或仓库配置里指定了不存在的密钥路径。
rpm安装时提示NOKEY或signature verification failed
这是RPM包管理器在检查MySQL官方GPG签名时发现本地没有对应公钥。错误信息里出现 NOKEY 或 signature verification failed,说明校验流程走到了,但密钥缺失。
- 先确认是否已导入MySQL官方密钥:
rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n' | grep mysql,无输出即未导入 - 导入命令必须用完整URL:
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql,不能只写本地路径 - 如果提示
curl: (7) Failed to connect,说明网络不通,可手动下载密钥文件再导入:wget https://repo.mysql.com/RPM-GPG-KEY-mysql && sudo rpm --import RPM-GPG-KEY-mysql - 某些旧版CentOS 7可能默认不信任DSA签名,需额外启用:
echo '%_gpg_check_level 0' | sudo tee -a /etc/rpm/macros(仅临时绕过,不推荐生产环境)
yum/dnf安装报gpg key retrieval failed
典型错误是 gpg key retrieval failed: [errno 14] curl#37 - "couldn't open file /etc/pki/rpm-gpg/rpm-gpg-key-mysql",本质是仓库配置(如 /etc/yum.repos.d/mysql80-community.repo)中 gpgkey= 指向了一个本地不存在的文件路径。
- 检查该repo文件中的
gpgkey行,常见错误写法:gpgkey=file:///etc/pki/rpm-gpg/rpm-gpg-key-mysql—— 这个路径根本不存在 - 正确做法是删掉
gpgkey=行,保留gpgcheck=1,让yum自动从baseurl下载元数据并用已导入的密钥验证 - 或者直接改成在线密钥地址:
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql(yum/dnf 4.0+ 支持) - 执行
sudo yum clean all && sudo yum makecache刷新元数据,再重试安装
Ubuntu/Debian上apt提示NO_PUBKEY
错误形如 NO_PUBKEY B7B3B788A8D3785C,说明APT密钥环里缺MySQL公钥。这不是网络问题,也不是源不可信,只是本地没加载。
- 别用已废弃的
apt-key add,它会把密钥全局注入,有安全风险 - 推荐方式:下载密钥到
/usr/share/keyrings/目录:sudo mkdir -p /usr/share/keyrings && curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql | sudo gpg --dearmor -o /usr/share/keyrings/mysql-archive-keyring.gpg - 然后修改MySQL源文件(如
/etc/apt/sources.list.d/mysql.list),在deb行末尾加上[arch=amd64 signed-by=/usr/share/keyrings/mysql-archive-keyring.gpg] - 最后运行
sudo apt update,不再报NO_PUBKEY
最容易被忽略的是:密钥导入后,还要确保包管理器实际用上了它——yum依赖 gpgcheck=1 + 正确的 gpgkey 配置,APT依赖源行里的 signed-by 参数。跳过校验(如加 --nogpgcheck 或 --allow-unauthenticated)看似快,但等于放弃完整性保障,线上环境切勿这么做。











