CentOS 9 安装 MySQL 8.0 避坑指南:从反复失败到一次成功

459 阅读5分钟

在 CentOS 服务器上安装 MySQL 本是基础操作,但不少开发者(包括我)在 CentOS 9 上却反复遇到 GPG 密钥验证失败、依赖不匹配等问题。本文结合我的踩坑经历,拆解失败原因,给出一套“零失败”安装方案,帮你避开同类陷阱。

一、那些反复失败的报错场景

安装过程中,我先后遇到了两个典型错误,相信很多人也有类似经历:

1. 依赖版本不匹配(EL7/EL8 包错用在 EL9 系统)

最初直接照搬 CentOS 7 的安装命令,下载了 mysql80-community-release-el7-7.noarch.rpm 仓库包,结果安装时出现依赖缺失:

Error: 
 Problem: cannot install the best candidate for the job
  - nothing provides libcrypto.so.10()(64bit) needed by mysql-community-server-8.0.43-1.el7.x86_64

原因是 CentOS 9 对应 EL9 版本,而 EL7 包依赖的 libcrypto.so.10 在 EL9 中已升级为 libcrypto.so.3,版本完全不兼容。

2. GPG 密钥验证失败(密钥与包不匹配)

后来换成 EL9 版本仓库包,却又卡在 GPG 验证:

Error: GPG check FAILED
Public key for mysql-community-server-8.0.43-1.el9.x86_64.rpm is not installed

即使手动导入密钥,仍提示“密钥不匹配”——这是因为 MySQL 官方对不同系统版本的包使用了不同签名密钥,旧密钥无法识别 EL9 包。

二、失败根源:3 个核心认知误区

复盘后发现,失败并非操作复杂,而是对 CentOS 和 MySQL 的适配逻辑理解不到位:

1. 混淆“系统版本”与“MySQL 包版本”

CentOS/RHEL 用 el+版本号(如 el7/el8/el9)标识系统大版本,MySQL 官方包也严格对应这个标识。错用跨版本包必然导致依赖冲突,这是最常见的低级错误。

2. 忽视 GPG 密钥的版本关联性

MySQL 官方为不同时期的包签发了不同 GPG 密钥(如 2022 版密钥、旧版 0x5072E1F5 密钥),且密钥与仓库包强绑定。导入错误密钥或未清理旧密钥,会直接触发验证失败

3. 不清楚 CentOS 对 MySQL 的“默认替换”

CentOS 8 及以上版本已默认用 MariaDB 替代 MySQL,系统原生仓库中没有 Oracle 官方 MySQL 包。必须手动添加 MySQL 官方仓库,否则安装的只是 MariaDB

三、“零失败”安装方案:4 步搞定 MySQL 8.0

针对 CentOS 9 系统,我整理了一套经过验证的安装流程,全程避开上述陷阱:

步骤 1:彻底清理旧配置(关键!避免残留冲突)

先删除之前的错误仓库、缓存和旧密钥,防止干扰新安装:

# 卸载所有 MySQL 仓库包(无论 el7/el8)
sudo rpm -e mysql80-community-release-el7-7.noarch 2>/dev/null
sudo rpm -e mysql80-community-release-el8-1.noarch 2>/dev/null

# 删除旧 GPG 密钥
sudo rpm -e gpg-pubkey-5072e1f5-* 2>/dev/null
sudo rpm -e gpg-pubkey-3a79bd29-* 2>/dev/null

# 清理 dnf 缓存
sudo dnf clean all
sudo rm -rf /var/cache/dnf/mysql80-community-*

步骤 2:安装 EL9 适配的 MySQL 仓库

下载 CentOS 9 专用的 MySQL 官方仓库包(明确标识 el9):

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

执行后无报错,说明仓库配置成功。

步骤 3:跳过 GPG 验证安装 MySQL(解决密钥冲突)

由于 EL9 下 MySQL 仓库存在密钥兼容性小问题,临时跳过 GPG 验证(包来源是官方仓库,安全性有保障):

# --nogpgcheck 跳过验证,--refresh 强制重新下载包
sudo dnf install -y mysql-community-server --refresh --nogpgcheck

等待安装完成(约 1-2 分钟),出现 Complete! 即成功。

步骤 4:启动服务并初始化密码

安装完成后,配置 MySQL 服务并设置密码:

# 启动 MySQL 并设置开机自启
sudo systemctl start mysqld
sudo systemctl enable mysqld

# 查看初始临时密码(关键!用于首次登录)
sudo grep 'temporary password' /var/log/mysqld.log

# 登录 MySQL 并修改密码(替换为你的密码,需包含大小写+数字+特殊符号)
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourPass123!';
exit;

验证安装:再次登录 MySQL,执行 show databases;,若能正常显示默认数据库,说明安装成功。

四、后续优化:2 个必做配置

1. 允许远程访问(按需开启)

默认 MySQL 只允许本地连接,若需远程管理,需修改配置:

# 编辑配置文件
sudo vim /etc/my.cnf.d/mysql-server.cnf
# 在 [mysqld] 下添加:bind-address=0.0.0.0(监听所有网卡)

# 重启服务
sudo systemctl restart mysqld

# 授权远程用户(登录 MySQL 后执行)
mysql -u root -p
CREATE USER 'root'@'%' IDENTIFIED BY 'YourPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

# 开放防火墙 3306 端口
sudo firewall-cmd --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

2. 调整密码策略(可选)

若觉得默认密码策略太严格(需大小写+数字+特殊符号),可放宽限制:

-- 登录 MySQL 后执行
UNINSTALL PLUGIN validate_password;  -- 禁用密码强度验证
ALTER USER 'root'@'localhost' IDENTIFIED BY 'simplepass';  -- 设置简单密码

五、总结

CentOS 9 安装 MySQL 失败的核心是“版本适配”和“密钥冲突”,记住以下 3 个原则即可避免踩坑:

  1. 包版本必须匹配系统:EL9 系统用 el9 版本的 MySQL 仓库包;
  2. 清理旧配置再安装:残留的仓库和密钥是冲突根源;
  3. 灵活应对 GPG 问题:官方仓库的包可临时跳过验证,不影响后续使用。

按照本文步骤操作,无需复杂调试,即可一次成功安装 MySQL 8.0。如果追求更简单的方案,也可以用 Docker 安装(docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=xxx mysql:8.0),彻底避开系统依赖问题。