必须禁用 CentOS 8 的 AppStream MySQL 模块,否则安装 mysql-community-server-8.0.28 会失败或装成 MariaDB;需先 dnf module reset mysql 再 disable mysql,然后按指定顺序安装 6 个 RPM 包,并检查 /var/log/mysqld.log 获取初始密码。

直接上结论:CentOS 8 上手动安装 mysql-8.0.28-1.el8.x86_64.rpm 前,必须先禁用系统默认的 AppStream MySQL 模块,否则 yum install mysql-community-server 会失败或装错包(比如装成 mariadb 或旧版兼容包)。
为什么必须禁用 AppStream 的 mysql 模块
CentOS 8 默认把 mysql 作为模块(module)托管在 AppStream 仓库中,而该模块只提供 mariadb 或极老的 MySQL 兼容层(如 mysql:5.7),不包含 mysql-community-server-8.0.28。即使你已添加官方 MySQL Yum 仓库,dnf/yum 仍可能优先匹配模块而非外部 repo,导致安装失败或版本错乱。
常见错误现象:
Error: Unable to find a match: mysql-community-serverPackage mysql-community-server is not available.- 装完后
mysqld --version显示的是mariadb或空输出
验证是否被模块干扰:
dnf module list mysql
如果输出中显示 mysql: [8.0] [5.7] [latest] 或类似,说明模块已启用,需禁用。
禁用 AppStream mysql 模块的正确命令
执行以下命令彻底关闭模块影响:
dnf module reset mysql<br>dnf module disable mysql
这两步缺一不可:reset 清除当前 profile 状态,disable 阻止后续自动启用。之后再运行:
dnf module list mysql
应显示 mysql: [disabled]。
注意:不要用 dnf remove @mysql 或 dnf groupremove "MySQL Database" —— 这些是废弃操作,在 CentOS 8+ 上无效且可能破坏依赖。
安装 mysql-8.0.28 RPM 包的顺序不能错
从官网下载的 mysql-8.0.28-1.el8.x86_64.rpm-bundle.tar 解压后含多个 RPM,安装顺序直接影响依赖解析是否成功。必须严格按以下顺序安装(少一个或顺序错,rpm -ivh 会报 failed dependencies):
mysql-community-common-8.0.28-1.el8.x86_64.rpmmysql-community-icu-data-files-8.0.28-1.el8.x86_64.rpmmysql-community-client-plugins-8.0.28-1.el8.x86_64.rpmmysql-community-client-8.0.28-1.el8.x86_64.rpmmysql-community-libs-8.0.28-1.el8.x86_64.rpmmysql-community-server-8.0.28-1.el8.x86_64.rpm
推荐用单条命令批量安装(确保当前目录只有这 6 个必需包):
rpm -ivh mysql-community-{common,icu-data-files,client-plugins,client,libs,server}-8.0.28-1.el8.x86_64.rpm
跳过 -debuginfo、-test、-devel 等非运行必需包,避免引入冗余依赖冲突。
启动前检查 /var/log/mysqld.log 是否生成初始密码
CentOS 8 + MySQL 8.0.28 启动时会自动生成 root 初始密码,但前提是:
-
/var/log/mysqld.log可写(SELinux 不拦截) - 首次启动未被中断(如
systemctl start mysqld执行中途 Ctrl+C) - 没提前手动初始化数据目录(如误跑
mysqld --initialize)
若 grep "temporary password" /var/log/mysqld.log 无输出,先确认日志权限:
ls -l /var/log/mysqld.log
正常应属 mysql:mysql;若属 root:root,手动修复:
chown mysql:mysql /var/log/mysqld.log
然后清空并重启服务:
truncate -s 0 /var/log/mysqld.log<br>systemctl restart mysqld
再等 10–15 秒,重试 grep。别跳过这步 —— 很多人卡在这里反复重装,其实只是日志没写进去。


















