CentOS7安装MySQL8.0.45解决GPG密钥不匹配问题的全步骤(生产环境合规版)

 更新时间:2026年04月20日 08:36:26   作者:举起大象的蚂蚁  
这篇文章主要介绍了CentOS7安装MySQL8.0.45解决GPG密钥不匹配问题的相关资料,本文详细描述了每一步骤的操作方法和注意事项,确保安装过程中保留GPG验证,符合生产环境安全要求,需要的朋友可以参考下

一、文档说明

1.1 适用场景

本文适用于 CentOS 7 系统,在安装 MySQL 8.0.45 社区版(通过 YUM 源方式)时,遇到「GPG 密钥已安装但与包不匹配」报错的生产环境解决方案。

核心报错信息(本文重点解决):

The GPG keys listed for the “MySQL 8.0 Community Server” repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository. Failing package is: mysql-community-common-8.0.45-1.el7.x86_64. GPG Keys are configured as: https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

1.2 环境前提

  • 系统:CentOS 7(x86_64,任意内核版本,生产环境稳定版优先);

  • 权限:已获取 root 用户权限(生产环境操作必备);

  • 状态:已尝试安装 MySQL 8.0.45,出现上述 GPG 密钥不匹配报错,且已清理旧 MySQL YUM 源配置;

  • 网络:服务器可正常访问外网(需下载官方密钥及 MySQL 安装包)。

1.3 文档价值

针对生产环境「安全性、合规性」要求,提供「彻底清理密钥冲突+重新导入官方全量密钥」的解决方案,不跳过 GPG 验证、不降低系统安全等级,全程可追溯、可复用,解决 CentOS 7 与 MySQL 8.0.45 密钥适配兼容性问题。

二、问题根源分析

生产环境出现该报错的核心原因的是 系统密钥环残留冲突,具体如下:

  1. MySQL 8.0.45 版本对 GPG 密钥校验更严格,需匹配官方 2022/2023 版密钥;

  2. 系统此前可能安装过 MySQL 旧版本、旧 YUM 源,导致密钥环中残留旧版 MySQL 密钥(如 0x5072E1F5 旧密钥);

  3. 残留旧密钥与 MySQL 8.0.45 包所需的新密钥冲突,即使重新导入新密钥,系统仍会优先校验残留旧密钥,导致报错;

  4. YUM 缓存中留存了旧的密钥校验信息,未彻底清理,进一步加剧冲突。

三、解决方案(生产环境合规版)

核心思路:彻底清理所有 MySQL 相关残留密钥 → 导入 MySQL 官方全量密钥 → 强制刷新 YUM 缓存 → 正常安装 MySQL 8.0.45,全程保留 GPG 验证,符合生产环境安全规范。

步骤 1:清理系统中所有 MySQL 相关 GPG 密钥(关键步骤)

执行以下命令,批量列出并删除密钥环中所有与 MySQL 相关的 GPG 密钥,彻底清除冲突根源(生产环境可安全执行,仅删除 MySQL 相关密钥,不影响其他软件):

# 批量列出并删除所有 MySQL 相关 GPG 密钥
for key in $(rpm -qa gpg-pubkey | grep -i mysql | cut -d '-' -f 4-); do
    rpm -e --allmatches gpg-pubkey-$key
done

执行说明:

  • 命令会先通过 rpm -qa gpg-pubkey | grep -i mysql 列出所有 MySQL 相关密钥;

  • 通过 cut -d '-' -f 4- 提取密钥编号,再通过 rpm -e --allmatches 彻底删除该密钥(包括所有匹配的版本);

  • 执行后无报错即说明清理成功,若提示“未找到对应密钥”,说明系统中无残留,可直接进入下一步。

步骤 2:导入 MySQL 官方全量密钥(覆盖所有版本,避免遗漏)

清理完成后,重新导入 MySQL 官方全量密钥(包括旧版、2022 版、2023 版),确保与 MySQL 8.0.45 包的密钥校验完全匹配,执行以下命令:

# 下载 MySQL 官方基础密钥包并导入
wget https://repo.mysql.com/RPM-GPG-KEY-mysql -O /tmp/RPM-GPG-KEY-mysql
rpm --import /tmp/RPM-GPG-KEY-mysql
# 导入 MySQL 2022 版官方密钥(适配 MySQL 8.0+ 新版本)
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 导入 MySQL 2023 版官方密钥(兼容 MySQL 8.0.45+ 高版本校验)
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

执行说明:

  • 先下载基础密钥包到 /tmp 目录(避免直接覆盖系统默认路径,更安全),再导入;

  • 依次导入 2022、2023 版密钥,确保覆盖 MySQL 8.0.45 所需的所有校验密钥;

  • Linux 系统中,密钥导入成功后无任何输出,若提示“密钥已导入”,属于正常现象,无需重复操作。

步骤 3:强制清理 YUM 缓存(彻底清除旧校验信息)

仅执行 yum clean all 无法彻底清理密钥校验缓存,需手动删除缓存目录,再重新生成缓存,执行以下命令(生产环境可安全执行):

# 强制清理 YUM 所有缓存(包括包缓存、密钥校验缓存)
yum clean all && rm -rf /var/cache/yum/*
# 重新生成 YUM 缓存(仅缓存 MySQL 官方源相关信息,避免混杂)
yum makecache fast

执行说明:

  • rm -rf /var/cache/yum/* 会彻底删除 YUM 缓存目录下的所有文件,确保旧的密钥校验信息被完全清除;

  • yum makecache fast 会快速生成新的缓存,缩短后续安装时间;

  • 缓存生成成功后,会显示 MySQL 8.0 仓库的包数量,说明缓存生成正常。

步骤 4:配置 MySQL 8.0 官方 YUM 源(确保源配置正确)

若此前已清理旧源配置,需重新创建 MySQL 8.0 官方 YUM 源配置文件,确保源地址和密钥地址正确,执行以下命令:

# 创建并写入 MySQL 8.0 官方 YUM 源配置
cat > /etc/yum.repos.d/mysql-community.repo << EOF
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=https://repo.mysql.com/yum/mysql-8.0-community/el/7/x86_64/
enabled=1
gpgcheck=1
# 配置官方 2022 版密钥地址(与步骤 2 导入的密钥对应)
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
EOF

执行说明:该配置文件仅包含 MySQL 8.0 官方源,无多余干扰项,确保安装时从官方源下载包,且密钥地址与导入的密钥一致。

步骤 5:安装 MySQL 8.0.45 服务器(生产环境安全安装)

完成上述所有步骤后,密钥冲突已彻底解决,执行以下命令安装 MySQL 8.0.45,全程会正常进行 GPG 密钥验证,且验证会通过:

yum install -y mysql-community-server

安装说明:

  • 安装过程中,系统会自动校验包的 GPG 密钥,无需手动干预;

  • 若出现“导入 GPG 密钥”提示,直接按 y 确认即可(与步骤 2 导入的密钥一致);

  • 安装完成后,系统会自动配置 MySQL 相关依赖,无需额外操作。

四、安装后生产环境必做验证(合规性检查)

安装完成后,需执行以下验证步骤,确保 MySQL 服务正常、密钥校验合规、包完整,符合生产环境要求:

验证 1:查看 MySQL 版本,确认安装成功

mysql --version

正常输出示例(需包含 8.0.45 版本):

mysql Ver 8.0.45 for Linux on x86_64 (MySQL Community Server - GPL)

验证 2:启动 MySQL 服务并设置开机自启

# 启动 MySQL 服务
systemctl start mysqld
# 设置开机自启(生产环境必做,避免服务器重启后服务失效)
systemctl enable mysqld
# 查看 MySQL 服务状态
systemctl status mysqld

正常状态:输出中包含 active (running),无报错信息,说明服务启动正常。

验证 3:验证 GPG 密钥校验合规性

检查 MySQL 安装包的 GPG 校验状态,确保包未被篡改,符合生产环境安全要求:

# 验证 MySQL 核心包的 GPG 校验状态
rpm -K /var/cache/yum/x86_64/7/mysql80-community/packages/mysql-community-common-8.0.45-1.el7.x86_64.rpm

正常输出示例(需包含 pgp sha256 OK):

mysql-community-common-8.0.45-1.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

验证 4:修改初始密码(生产环境必做)

MySQL 8.0.45 安装后会生成临时初始密码,需立即修改为生产环境强密码(符合复杂度:大小写+数字+特殊字符,长度≥8):

# 提取初始密码(从 MySQL 日志中获取)
temp_pass=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
# 登录 MySQL 并修改初始密码(一行命令执行,无需手动输入密码)
mysql -uroot -p$temp_pass --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass@2026'; FLUSH PRIVILEGES;"

说明:将 YourStrongPass@2026 替换为生产环境实际使用的强密码,执行后无报错即说明密码修改成功。

五、常见问题补充(生产环境适配)

问题 1:执行密钥删除命令时,提示“无对应密钥”

原因:系统中无 MySQL 相关残留密钥,属于正常现象;

解决:直接跳过该步骤,进入“导入官方全量密钥”步骤即可。

问题 2:wget 下载密钥时提示“无法连接”

原因:生产环境服务器外网访问受限,无法访问 MySQL 官方地址;

解决:手动下载 https://repo.mysql.com/RPM-GPG-KEY-mysql 密钥文件,上传至服务器 /tmp 目录,再执行 rpm --import /tmp/RPM-GPG-KEY-mysql

问题 3:安装时仍提示密钥不匹配

原因:密钥缓存未彻底清除,或源配置与密钥地址不对应;

解决:重新执行“步骤 1-步骤 3”,确保密钥清理干净、缓存彻底刷新,再重新安装。

六、总结

  1. 核心结论:本文方案通过「彻底清理残留密钥+导入官方全量密钥+强制刷新缓存」,从根源解决了 CentOS 7 安装 MySQL 8.0.45 时的 GPG 密钥不匹配问题,全程保留 GPG 验证,符合生产环境安全合规要求;

  2. 关键要点:生产环境禁止跳过 GPG 验证,密钥冲突的核心是“残留旧密钥干扰”,彻底清理是解决问题的关键;

  3. 可复用性:本文所有命令均可直接复制执行,适配所有 CentOS 7 系统+MySQL 8.0.45 版本的密钥冲突场景,生产环境可直接复用;

  4. 后续建议:安装完成后,定期检查 MySQL 服务状态和密钥校验状态,确保生产环境 MySQL 运行稳定、安全。

到此这篇关于CentOS7安装MySQL8.0.45解决GPG密钥不匹配问题的文章就介绍到这了,更多相关MySQL解决GPG密钥不匹配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL5.7中的JSON基本操作指南

    MySQL5.7中的JSON基本操作指南

    这篇文章主要给大家介绍了关于MySQL5.7中JSON的基本操作,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • 用SQL实现统计报表中的"小计"与"合计"的方法详解

    用SQL实现统计报表中的"小计"与"合计"的方法详解

    本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • docker安装MySQL报错端口被占用问题解决办法

    docker安装MySQL报错端口被占用问题解决办法

    docker部署mysql容器时,最常见的启动失败原因之一是宿主机的3306端口被占用,这篇文章主要介绍了docker安装MySQL报错端口被占用问题解决办法的相关资料,文中将解决的办法介绍的非常详细,需要的朋友可以参考下
    2026-03-03
  • Mysql Online DDL的使用详解

    Mysql Online DDL的使用详解

    在日常DBA运维过程中,对表结构进行变更算是个普遍的需求了。如果操作的对象是个热表、大表,难免心里一怵,这些DDL操作是否可以直接执行,哪些会影响线上读写,哪些会影响主从,甚至导致服务器压力骤升,本文做了梳理,希望对大家有所帮助。
    2021-05-05
  • mysql设置某字段不能重复问题

    mysql设置某字段不能重复问题

    这篇文章主要介绍了mysql设置某字段不能重复问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 详解MySQL alter ignore 语法

    详解MySQL alter ignore 语法

    这篇文章主要介绍了MySQL alter ignore 语法的相关资料,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-11-11
  • 一文彻底搞懂MySQL TimeStamp时区问题

    一文彻底搞懂MySQL TimeStamp时区问题

    MySQL的timestamp类型默认使用的是服务器的时区来存储时间值,这意味着如果服务器的时区发生了变化,那么存储的timestamp值也会发生变化,下面这篇文章主要给大家介绍了关于如何通过一文彻底搞懂MySQL TimeStamp时区问题的相关资料,需要的朋友可以参考下
    2024-01-01
  • 关于MySQL的存储过程与存储函数

    关于MySQL的存储过程与存储函数

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集(这些SQL语句已经编译过了),它存储在数据库中,一次编译后永久有效,需要的朋友可以参考下
    2023-05-05
  • MySQL8.0设置远程访问权限的方法

    MySQL8.0设置远程访问权限的方法

    这篇文章主要介绍了MySQL8.0设置远程访问权限的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Mysql中Row size too large (> 8126) 错误的问题解决

    Mysql中Row size too large (> 8126)&n

    本文主要介绍了Mysql中Row size too large (> 8126) 错误的问题解决,原因实插入的行数据可能太大了,超过了设定的阙值,下面就来看一下如何解决
    2024-07-07

最新评论