AlmaLinux 9 安装 MySQL 8.4 必须使用 mysql84-community-release-el9 仓库包,验证系统版本后执行 dnf install --nogpgcheck;需卸载 mariadb-libs 等冲突包;首次启动后用 journalctl 获取临时密码并用 ALTER USER 重置。

确认系统版本与MySQL仓库匹配
AlmaLinux 9 对应的 MySQL Yum 仓库包名是 mysql84-community-release-el9,不是 el8 或 el10。装错会导致 yum repolist 看不到 MySQL 源,后续 dnf install mysql-server 会报“没有可用软件包”。
执行前先验证系统版本:
cat /etc/redhat-release
输出应含 AlmaLinux 9。若为 9.x(如 9.6),仍用 el9;不要试图用 el10 包。
- 正确命令:
sudo dnf install https://repo.mysql.com/mysql84-community-release-el9-2.noarch.rpm - 错误示例:
mysql80-community-release-el9.rpm(这是 MySQL 8.0 的源,不包含 8.4) - 验证是否生效:
dnf repolist enabled | grep mysql,应看到mysql84-community且状态为 enabled
安装时跳过 GPG 验证失败问题
MySQL 8.4 官方 RPM 包有时因 GPG 密钥未及时更新或本地密钥环缺失,触发 GPG check failed 错误,导致 dnf install mysql-community-server 中断。
这不是安全妥协,而是临时绕过——因为 AlmaLinux 9 默认启用 GPG 检查,而 MySQL 8.4 的签名密钥可能尚未被系统信任链收录。
- 推荐做法:
sudo dnf install -y mysql-community-server --nogpgcheck - 不建议全局禁用:
--nogpgcheck只作用于本次安装,不影响其他包 - 若坚持启用 GPG,需手动导入密钥:
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022,但该密钥对 8.4 部分构建不一定有效,实测成功率低于 50%
启动服务前必须清理旧 MariaDB/MySQL 包
AlmaLinux 9 默认可能预装 mariadb-libs 或旧版 mysql-common,它们会与 mysql-community-server 的 libmysqlclient 冲突,导致 systemctl start mysqld 失败并报错:Failed to start mysqld.service: Unit not found 或 cannot open shared object file: libmysqlclient.so.21。
这不是配置问题,是动态库打架。
- 检查残留:
rpm -qa | grep -E '^(mysql|mariadb)' - 强制卸载(仅限安装前):
sudo rpm -e --nodeps mariadb-libs mysql-common - 注意:
--nodeps是必须的,否则依赖阻止卸载;卸载后无需重启,但建议dnf clean all清缓存 - 装完再运行
ldd $(which mysqld) | grep mysql,确认链接的是libmysqlclient.so.21(MySQL 8.4 使用),而非.so.18(MariaDB 10.6)
首次启动后立即获取临时密码并重置
MySQL 8.4 启动时自动生成 root@localhost 临时密码,但日志路径和格式有变化:不再写入 /var/log/mysqld.log,而是统一输出到 journald,且关键词从 temporary password 改为 A temporary password is generated。
直接 grep 文件会找不到,必须用 journalctl。
- 正确获取方式:
sudo journalctl -u mysqld | grep 'temporary password' | tail -1 - 常见错误:
sudo cat /var/log/mysqld.log | grep password→ 返回空,因为 8.4 默认不写该文件 - 重置密码必须用新语法:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPass123!';(不能用老式SET PASSWORD) - 如果跳过这步直接连
mysql -u root -p,会报错ERROR 1045 (28000): Access denied,不是密码错,是认证插件拒绝未初始化用户
最易忽略的一点:MySQL 8.4 默认启用 caching_sha2_password 认证插件,客户端连接时若未指定 --default-auth=mysql_native_password,部分旧工具(如某些 PHP PDO 版本)会握手失败。这不是 bug,是设计选择——得在应用层适配,而不是回退认证方式。


















