Rocky Linux 9.4+ 的 mysql-community-server 是 MariaDB 的别名包,无法通过官方源安装 MySQL 8.4;唯一可行方案是下载官方 Linux-Generic 二进制包(如 mysql-8.4.10-linux-glibc2.28-x86_64.tar.xz),手动部署并配置依赖、路径与参数。

Rocky Linux 9.4+ 的默认 mysql-community-server 包实际指向 MariaDB,哪怕你装的是 mysql80-community-release 源,dnf install mysql-community-server 启动的仍是 mariadb 进程——mysqld --version 会报错或输出 MariaDB 版本。官方源无法安全安装 MySQL 8.4,必须放弃。
为什么 dnf install mysql-community-server 在 Rocky 9.4+ 上无效
从 Rocky Linux 9.4 开始,系统仓库对 mysql-community-server 做了 alias 重定向:它不再是 Oracle MySQL,而是 mariadb 的包装包。执行 systemctl start mysqld 后,ps aux | grep mysqld 显示的是 /usr/libexec/mariadb/mysqld,不是 MySQL 官方二进制。即使你导入了 MySQL 的 GPG key、清空缓存、启用 mysql80-community 源,也绕不开这个硬绑定。
- 验证方式:
rpm -q --provides mysql-community-server会输出mariadb-server - 启动后检查:
cat /proc/$(pgrep -f "mysqld")/cmdline | tr '\0' '\n' | head -1—— 路径含mariadb即为假 MySQL -
mysql --version显示8.0.32并不等于 MySQL 8.4;它只是 MariaDB 借用的兼容版本号
想用官方源?唯一可行路径是禁用 alias + 强制指定包名
仅适用于 Rocky Linux 9.0–9.3(未引入 alias 的旧版本),且需手动排除 mariadb 冲突。9.4+ 已不可行,但如果你确认系统是 9.3 或更早,可尝试:
- 先卸载所有 MariaDB 相关:
dnf remove mariadb* mysql* - 安装 MySQL 8.0 源(注意:不是 8.4):
dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm - 禁用默认模块:
dnf module reset mysql && dnf module disable mysql - 强制安装社区版服务端(非 LTS):
dnf install mysql-community-server --enablerepo=mysql80-community - 初始化前必须在
/etc/my.cnf的[mysqld]段写入:lower_case_table_names=1,否则初始化失败或后续表名大小写敏感出错
⚠️ 该路径不支持 MySQL 8.4.x,最高只能到 8.0.x(如 8.0.46)。MySQL 官方未为 Rocky 9 提供 8.4 的 RPM 包,mysql84-community-release 是个空壳或仅用于文档占位。
真正能装上 MySQL 8.4.10 的做法:只用二进制包
这是目前 Rocky Linux 9(任意小版本)唯一稳定、可验证、生产可用的方式。核心动作不是“配源”,而是跳过包管理器,直取官方 .tar.xz:
- 下载地址必须是 “Linux - Generic” 分类下的:
mysql-8.4.10-linux-glibc2.28-x86_64.tar.xz(不是 RPM Bundle,也不是el9后缀的包) - 依赖不能漏:
libaio(缺则mysqld启动直接段错误)、perl-Data-Dumper(缺则--initialize-insecure报Can't locate Data/Dumper.pm)、ncurses-compat-libs(缺则客户端命令崩溃) - 初始化命令必须带
--lower-case-table-names=1参数,且配置文件/etc/my.cnf中[mysqld]段也要重复声明,否则初始化后无法更改,ORM 和迁移工具会频繁报Table doesn't exist - socket、datadir、bind_address 等路径必须显式指定,不能依赖默认值;
basedir必须设为解压后的绝对路径(如/usr/local/mysql)
配置文件里 default_authentication_plugin=mysql_native_password 仍建议保留,避免某些旧客户端(如 Navicat 15、Django 4.2 默认配置)握手失败。
别在 dnf repolist 里找 MySQL 8.4 —— 它根本不在那里。二进制包解压即用,路径可控、版本确定、行为可预测,这才是 Rocky 9 上跑 MySQL 8.4 的事实标准。


















