mysql 8.4.10 是2026年9月官方最新稳定版,rocky linux 9.x 推荐使用官方 el9 yum 源安装,避免误装 mariadb 或二进制包权限/selinux/字符集等问题。

mysql-8.4.10 是当前(2026年9月)MySQL 官方最新稳定版,Rocky Linux 9.x(包括 9.4–9.7)完全支持,但安装方式选错会导致启动失败、权限报错或字符集异常。直接用 dnf install mysql 装的是 MariaDB,不是 MySQL;而二进制包若没装 libaio 或没设对 user=mysql,初始化就会卡在 mysqld --initialize 阶段。
用官方 Yum 源安装(推荐,省心且可自动更新)
这是 Rocky Linux 9 上最稳妥的方式,MySQL 官方为 el9 提供了专用仓库,能装到 mysql-community-server-8.4.10,且后续可通过 dnf update 升级。
- 先清理可能冲突的旧源:
dnf remove mysql*-community-release - 下载并安装 MySQL 8.4 仓库包(注意是
el9,不是el8):dnf install -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm - 启用 8.4 社区版仓库(禁用其他版本):
dnf-config-manager --disable mysql*-community,再执行dnf-config-manager --enable mysql84-community - 安装服务:
dnf install -y mysql-community-server - 启动前必须检查:
systemctl start mysqld启动后立即查日志:journalctl -u mysqld -n 50 -f,确认有没有Failed to initialize database或Can't open /var/lib/mysql/ibdata1类错误
二进制包安装(适合定制路径或离线环境)
如果你需要把 MySQL 装到 /mysql/app/mysql 这类非标准路径,或服务器不能联网,就用二进制包。但必须严格匹配 glibc 版本——Rocky 9.6+ 的 ldd --version 输出是 2.34,所以只能用 glibc2.28 或更低编译的包(官方 mysql-8.4.10-linux-glibc2.28-x86_64.tar.xz 兼容)。
- 解压后必须做软链接:
ln -s /opt/mysql-8.4.10-linux-glibc2.28-x86_64 /opt/mysql,否则basedir配置容易写错 -
mysqld --initialize命令必须加--user=mysql,且运行前确保/mysql/data/3306/data目录属主是mysql:mysql,否则初始化生成的临时密码为空或报错Permission denied -
my.cnf中的socket和pid-file路径必须和mysql用户有写权限,建议全用绝对路径,避免tmpdir默认指向/tmp(SELinux 可能拦截)
避开 validate_password 密码策略坑
MySQL 8.4 默认启用强密码策略,mysql_secure_installation 时输 123456 会直接失败,报错 Your password does not satisfy the current policy requirements。这不是 bug,是默认行为。
- 临时绕过:启动 mysqld 时加参数
--skip-grant-tables,然后连进去执行:SET GLOBAL validate_password.policy = 'LOW'; SET GLOBAL validate_password.length = 8; - 更安全的做法:初始化后立刻改配置文件,在
[mysqld]下加一行:validate_password.policy=LOW,再重启服务 - 生产环境别关策略,而是用
openssl rand -base64 16生成合规密码
防火墙与 SELinux 必须同步处理
只开 3306 端口还不够。Rocky 9 默认启用 SELinux,mysqld 进程被限制访问自定义数据目录(比如 /mysql/data),会报错 Can't create/write to file '/mysql/data/3306/data/ibdata1',日志里看不到 SELinux 关键字,得手动查:ausearch -m avc -ts recent | grep mysqld。
- 放行端口:
firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload - 修复 SELinux 上下文:
semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?",然后restorecon -Rv /mysql - 如果不想调 SELinux,临时设为 permissive:
setenforce 0(仅测试用,重启失效)
Can't start server 的错误——它们几乎都出在权限、SELinux 或 socket 文件路径不一致上。装完别急着连客户端,先盯住 journalctl -u mysqld 的最后 20 行,比反复重装高效得多。











