必须使用el9标识的MySQL RPM包,如mysql-8.0.32-1.el9.x86_64.rpm-bundle.tar;需先清理残留MariaDB、解压bundle后用dnf install -y *.rpm安装;启动前须将fs.inotify.max_user_watches调至524288。

确认系统架构与MySQL RPM包版本匹配
Rocky Linux 9 是 el9 架构(x86_64),必须使用 mysql-8.0.32-1.el9.x86_64.rpm-bundle.tar 这类明确带 el9 标识的 RPM 包。用错 el7 或 el8 包会导致依赖解析失败、dnf install 报 “no package available” 或直接拒绝安装。检查当前系统:
cat /etc/redhat-releaseuname -m
两者都应指向 Rocky Linux 9.x 和 x86_64。
卸载残留 MariaDB 并清理旧数据目录
Rocky Linux 9 默认不预装 MariaDB,但若从旧系统升级或手动装过,mariadb-server、mariadb-libs 会与 MySQL 的 mysql-community-libs 冲突,导致 RPM 安装中途退出或服务无法启动。执行以下清理:
-
systemctl stop mariadb(如果正在运行) -
rpm -qa | grep mariadb查出所有包名 -
rpm -e --nodeps mariadb-libs mariadb-server mariadb-common(按实际输出替换) rm -rf /etc/my.cnf /var/lib/mysql /var/log/mysqld.log
--nodeps 是必需的,否则 mariadb-libs 会被其他系统包依赖而无法卸载;但后续必须确保没有其他服务依赖它——通常只有旧 MySQL 安装才会残留此类依赖。解压 RPM Bundle 并用 dnf 批量安装
MySQL 官方提供的 .rpm-bundle.tar 是多个 RPM 文件的集合,不能直接 rpm -ivh *.rpm ——那会因依赖顺序错误失败。正确做法是:
- 解压后进入目录:
tar -xvf mysql-8.0.32-1.el9.x86_64.rpm-bundle.tar - 只保留核心组件(跳过
debuginfo和test包):ls mysql-community-* | grep -E "(server|client|common|libs|devel)" - 用
dnf install -y *.rpm一次性安装——dnf会自动排序依赖并解决冲突,比rpm命令可靠得多
--nogpgcheck 临时绕过(仅限内网可信环境),生产环境应先导入密钥:rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022。启动前必须调大 inotify 限制
MySQL 8.0 在 Rocky Linux 9 上首次启动时,mysqld 会为数据目录和日志目录注册 inotify 监控,若系统默认值太小,systemctl start mysqld 会静默失败,journalctl -u mysqld 只显示:
Failed to allocate directory watch: Too many open files
这不是文件句柄数(ulimit -n)问题,而是 inotify 资源耗尽。立即修复:
- 查看当前值:
sysctl fs.inotify.max_user_watches(通常为 8192) - 临时生效:
sysctl -w fs.inotify.max_user_watches=524288 - 永久生效:写入
/etc/sysctl.d/99-mysql-inotify.conf,内容为fs.inotify.max_user_watches = 524288
mysqld 就根本不会进入初始化流程,后续所有密码重置、远程授权操作都无从谈起。


















