mysql在Linux上使用YUM安装与配置指南

来源:这里教程网 时间:2026-02-28 20:39:25 作者:

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
插件,老客户端不支持。别急着改配置文件:

找临时密码:
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
看一眼,比瞎试十次都管用。

相关推荐