Linux 下 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
getenforce
如果是 Enforcing,可临时测试:
setenforce 0
如果连上了,说明是 SELinux 问题。
本地命令:
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 |
端口未监听或被防火墙挡 |
如果你愿意,可以把**具体报错信息 + 连接方式(本地/远程、命令或程序)**发出来,我可以直接帮你定位是哪一步的问题。