最稳妥方式是使用MySQL最新仓库安装:先执行sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm添加el9适配仓库,再sudo dnf install mysql-community-server自动拉取依赖,启动后通过sudo grep 'temporary password' /var/log/mysqld.log获取初始root密码,并务必运行mysql_secure_installation加固。
直接用最新仓库安装最稳妥,别自己编译或瞎下tar包——Rocky Linux 9自带dnf和systemd,MySQL 8.0最新RPM包完全适配,装完就能跑,还能自动更新。
Rocky Linux 9默认源里没有MySQL 8.0,必须先加最新仓库。这步漏了,后面dnf install mysql-community-server会报“没有可用软件包”。
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm ——注意是el9,不是el8或el7,错一个版本号就装不上/etc/yum.repos.d/mysql-community.repo,确保 [mysql80-community] 下的 enabled=1,而 [mysql57-community] 是 enabled=0
sudo dnf install mysql-community-server,它会自动拉取mysql-community-client、mysql-common等依赖,不用单独装MySQL 8.0首次启动会自动生成临时root密码,不找出来就登不进去,也别试空密码——8.0默认禁用空密码登录。
sudo systemctl start mysqld 启动服务,再执行 sudo systemctl enable mysqld 开机自启sudo grep 'temporary password' /var/log/mysqld.log,输出类似 A temporary password is generated for root@localhost: xxxxxxxx,后面那串就是临时密码mysql_secure_installation:它不只是改root密码,还会删匿名用户、禁远程root、关test库——跳过等于裸奔默认只监听127.0.0.1,外网连不上不是防火墙问题,而是MySQL压根没对外暴露端口。
/etc/my.cnf 或 /etc/my.cnf.d/mysql-server.cnf,找到 bind-address 行,改成 bind-address = 0.0.0.0(或指定IP);没这行就手动加在[mysqld]段下sudo systemctl restart mysqld,不重启配置不生效CREATE USER 'user'@'%' 的 % 表示任意IP,生产环境强烈建议换成具体IP,比如 'user'@'192.168.1.100'
sudo firewall-cmd --permanent --add-port=3306/tcp + sudo firewall-cmd --reload,否则即使MySQL开了,包也进不来离线装tar包容易翻车,尤其glibc不匹配——Rocky Linux 9用的是glibc 2.34,但MySQL正式tar包里标“glibc 2.28”的那个其实也能跑,只是得手动初始化,还容易权限出错。
mysqld --initialize-insecure,8.0默认要求强密码,用这个会导致后续ALTER USER报错/var/lib/mysql目录上下文可能不对,启动失败看journalctl -u mysqld,出现Permission denied就执行 sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?" + sudo restorecon -Rv /var/lib/mysql
[mysqld]段加 character-set-server = utf8mb4 和 collation-server = utf8mb4_unicode_ci,别用utf8(那是MySQL的假UTF-8)真正麻烦的不是装上,而是装完立刻改密码、开远程、调字符集、关匿名用户——这四件事漏掉任何一项,接下来三天都在排查连不上或存不了中文。