温馨提示×

centos mysql为何连不上

小樊
34
2026-10-11 14:51:04
栏目: 云计算

在 CentOS 上 MySQL 连不上 是很常见的问题,通常可以归为以下几类原因。我按「最常见 → 较少见」给你一个排查清单,你可以一条条对照。


一、MySQL 服务没启动(最常见)

systemctl status mysqld
# 或
systemctl status mariadb

如果没启动:

systemctl start mysqld
systemctl enable mysqld

二、端口没监听 / 被防火墙挡住

1️⃣ 看 MySQL 是否在监听 3306

ss -lntp | grep 3306

如果没有,说明:

  • MySQL 没启动
  • 或配置了其他端口

2️⃣ 防火墙(CentOS 7+ 默认 firewalld)

firewall-cmd --list-all

如果没有 3306:

firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload

三、MySQL 只允许本机连接(bind-address)

编辑配置文件:

vi /etc/my.cnf
# 或
vi /etc/my.cnf.d/*.cnf

看是否有:

bind-address = 127.0.0.1

如果是,远程连接会被拒绝。

✅ 改为:

bind-address = 0.0.0.0

然后重启:

systemctl restart mysqld

四、MySQL 用户权限问题(远程连不上)

即使端口通了,用户也可能不允许远程登录。

登录 MySQL:

mysql -u root -p

查看用户 host:

SELECT user, host FROM mysql.user;

如果用户是:

root | localhost

说明 只能本机登录

✅ 创建远程用户:

CREATE USER 'test'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;

五、SELinux 拦了(CentOS 特有坑)

getenforce

如果是 Enforcing,可能拦截 MySQL 网络。

临时测试:

setenforce 0

如果连上了,说明是 SELinux 问题。

✅ 永久解决(允许 MySQL 联网):

setsebool -P mysql_connect_any 1

六、连接信息写错(容易忽略)

检查:

  • IP 是否正确
  • 端口是否是 3306
  • 用户名 / 密码是否正确
  • 是否用了 localhost(走 socket 而不是 TCP)

例如:

mysql -h 127.0.0.1 -u root -p

七、常见报错速查

报错 原因
Can't connect to MySQL server 服务没起 / 防火墙
Access denied for user 用户权限问题
Unknown MySQL server host IP / DNS 错误
Connection refused 端口没监听

✅ 建议你这样快速定位

systemctl status mysqld
ss -lntp | grep 3306
firewall-cmd --list-all
mysql -h 127.0.0.1 -u root -p

如果你愿意,可以把:

  • 报错信息
  • 连接方式(本地 / 远程)
  • CentOS 版本
  • MySQL 还是 MariaDB

发给我,我可以帮你精确判断是哪一步的问题。

0 踩