必须添加Oracle官方YUM源并禁用MariaDB模块才能安装MySQL 8.0;首次启动失败需检查journal日志、手动初始化数据目录并修复SELinux上下文;登录需用临时密码并切换为mysql_native_password插件;远程连接须同时配置bind-address、防火墙及权限。

MySQL 在 CentOS/RHEL 系统上用 YUM 安装看似简单,但默认仓库常提供旧版 mysql(其实是 MariaDB 替代包),或安装后无法启动、密码失效、远程连不上——这些问题不是配置错了,而是没绕过几个关键陷阱。
确认你装的是 Oracle 官方 MySQL,不是 MariaDB
很多系统运行 yum install mysql 实际装的是 mariadb-server,它和 MySQL 兼容但版本号、默认配置、密码策略、服务名都不同。想用官方 MySQL,必须先添加 Oracle 的 YUM 仓库:
- 下载并安装官方 repo 包:
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
(注意el7-3要按你的系统版本选,如 CentOS 8 用el8) - 禁用默认的
mariadb模块(CentOS 8+):sudo dnf module reset mysql
- 启用 MySQL 8.0 模块(可选,但推荐明确指定):
sudo dnf module enable mysql:8.0
- 检查是否已启用官方源:
sudo yum repolist enabled | grep mysql
应看到mysql80-community
安装后首次启动失败:Failed to start mysqld.service
常见原因是初始化数据目录失败,或 SELinux 拦截。不要直接删 /var/lib/mysql 重来——先看日志:
- 查错误根源:
sudo journalctl -u mysqld --since "1 hour ago" | tail -20
- 典型报错
Can't open the mysql.plugin table或Table 'mysql.plugin' doesn't exist:说明初始化未完成,手动触发:sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql
- SELinux 拒绝访问?临时验证:
sudo setenforce 0
,若此时能启动,说明需修复上下文:sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?" && sudo restorecon -Rv /var/lib/mysql
- 确保
/var/lib/mysql所属用户是mysql:mysql:sudo chown -R mysql:mysql /var/lib/mysql
登录不了 root:空密码、Access denied 或 plugin caching_sha2_password
MySQL 5.7+ 默认生成临时密码,且 8.0 默认用 caching_sha2_password 插件,老客户端不支持。别急着改配置文件:
安装说明重要提醒:程序不支持二级目录安装,请使用一级目录或二级目录绑定!第一步,确定你的服务器支持PHP+mysql。第二步,确定你的服务器开启了gd库。第三步,将upload文件内的文件上传到网站的根目录第四步,访问你的域名+ /install/index.html进行安装,linux系统访问你的域名+ /Install/index.html第五步,按照安装程序步骤进行安装配置第六步,安装完毕后
- 找临时密码:
sudo grep 'temporary password' /var/log/mysqld.log
(注意大小写敏感) - 用临时密码登录:
mysql -u root -p
- 立刻改密码并换认证插件(否则 Navicat、PHP 7.4 以下会连不上):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123';
- 如果要允许远程 root 登录(仅测试环境):
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
远程连接被拒:防火墙、bind-address、skip-networking
即使开了 3306 端口,MySQL 也可能只监听本地。三处必须同时检查:
- 确认 MySQL 允许网络连接:编辑
/etc/my.cnf,在[mysqld]下确保没有skip-networking,且bind-address是0.0.0.0或具体 IP(不是127.0.0.1) - 重启服务生效:
sudo systemctl restart mysqld
- 开放系统防火墙:
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload
- 检查监听状态:
sudo ss -tlnp | grep :3306
输出应含*:3306,而非127.0.0.1:3306
真正卡住的地方,往往不是某一步做错了,而是多个环节叠加:比如用了官方 repo 却没禁用 mariadb 模块,导致 yum 装了两个冲突的服务;或者改了 bind-address 却忘了关 SELinux 上下文,结果日志里只报 “Permission denied” 而不提具体路径。动手前,先 journalctl -u mysqld 看一眼,比瞎试十次都管用。









