温馨提示×

linux mariadb为何连接不上

小樊
62
2026-10-18 21:56:19
栏目: 云计算

Linux 下 MariaDB 连接不上,常见原因很多,可以按下面顺序排查。你可以先看报错信息,再对号入座。


一、先确认 MariaDB 是否真的在运行

systemctl status mariadb
# 或
systemctl status mysql

如果没运行:

systemctl start mariadb
systemctl enable mariadb

二、确认监听地址和端口

ss -lntp | grep 3306
# 或
netstat -lntp | grep 3306

常见问题:

  • 只监听 127.0.0.1 → 只能本机连
  • 监听 0.0.0.0 → 可远程连

如果只监听本机,而你想远程连: 编辑配置文件(常见位置):

/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf

修改:

bind-address = 0.0.0.0

然后重启:

systemctl restart mariadb

三、用户权限问题(最常见)

MariaDB 用户是 用户+来源IP 绑定的。

例如:

SELECT user, host FROM mysql.user;

如果你用 root@localhost 从远程连,一定会失败。

解决:

CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
FLUSH PRIVILEGES;

四、防火墙 / 安全组

本地防火墙

iptables -L -n
# 或
firewall-cmd --list-all

开放端口:

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

云服务器

还要检查 安全组是否放行 3306


五、SELinux(容易被忽略)

getenforce

如果是 Enforcing,可临时测试:

setenforce 0

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


六、socket 连接 vs TCP 连接

本地命令:

mysql -u root -p

用的是 socket

如果指定 IP:

mysql -h 127.0.0.1 -u root -p

用的是 TCP

有时 socket 在但 TCP 没开。


七、常见报错对应原因

报错 原因
Can't connect to MySQL server 服务没起 / 端口不通
Access denied for user 用户或权限问题
Unknown database 数据库不存在
Connection refused 端口未监听或被防火墙挡

八、快速排查清单 ✅

  1. 服务在跑吗?
  2. 3306 在监听吗?
  3. 用户允许这个 IP 吗?
  4. 防火墙放了吗?
  5. SELinux 挡了吗?

如果你愿意,可以把**具体报错信息 + 连接方式(本地/远程、命令或程序)**发出来,我可以直接帮你定位是哪一步的问题。

0 踩