必须先执行 sudo dnf module disable mysql,否则因EL8系统默认启用的mysql模块屏蔽官方包,直接安装会失败并报“no package available”错误;再下载el8适配的Yum源、安装mysql-community-server、启动mysqld服务、获取日志中临时密码并修改认证插件以兼容客户端。

直接用 dnf install mysql-community-server 会失败——CentOS 8 默认启用了系统自带的 mysql 模块,它会屏蔽官方仓库里的包。
必须先禁用系统内置的 mysql 模块
这是最常被跳过的一步,也是安装卡住或报“no package available”错误的根源。EL8 系统(包括 CentOS 8、Stream、RHEL 8)默认启用 mysql 模块,它优先级高于 Yum 仓库,不关掉就永远装不上官方 MySQL 8。
- 运行
sudo dnf module list mysql查看当前状态,输出中应有enabled标记 - 执行
sudo dnf module disable mysql彻底关闭该模块 - 禁用后建议清理缓存:
sudo dnf clean all && sudo dnf makecache
添加 MySQL 官方 Yum 仓库(注意 el8 后缀)
下载地址必须匹配 CentOS 8,用 el7 的 RPM 包在 el8 上可能安装成功但后续更新异常,尤其在 Stream 版本上更敏感。
- 正确命令:
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm - 验证是否生效:
dnf repolist enabled | grep mysql,应看到mysql80-community且状态为 enabled - 如果下载慢或超时,可换国内镜像源(如阿里云),但注意:MySQL 官方 repo 不支持镜像代理,只能替换系统 base repo 加速整体 dnf 操作
安装并启动 mysqld 服务(不是 mysql.service)
MySQL 8.0 在 CentOS 8 中的服务名是 mysqld,不是 mysql。用错名字会导致 systemctl start mysql 报 “Unit mysql.service could not be found”。
- 安装命令:
sudo dnf install mysql-community-server(不要加-y前先确认 repo 已生效) - 首次启动:
sudo systemctl start mysqld;检查状态:sudo systemctl status mysqld - 开机自启:
sudo systemctl enable mysqld - 初始密码在日志里:
sudo grep 'temporary password' /var/log/mysqld.log,不是/var/log/mysql/
配置远程访问前先改认证插件(否则 Navicat 等工具连不上)
MySQL 8 默认用 caching_sha2_password 插件,老客户端不兼容。不改的话,即使开了 bind-address = 0.0.0.0 和用户权限,也会报 Authentication plugin 'caching_sha2_password' cannot be loaded。
- 登录后立即执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 如需远程 root 登录,再加一条:
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -
bind-address默认是127.0.0.1,改之前务必确认防火墙放行 3306:sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload
真正容易出问题的地方不在安装命令本身,而在于模块冲突、服务名混淆、认证插件不兼容这三处。尤其是 dnf module disable mysql 这一步,官网文档写了,但几乎所有中文教程都漏掉了。


















