Ubuntu 上 MariaDB 连不上,常见原因大致就那几类。我按最常见 → 较少见给你梳理,并附上排查命令,你照着一步步来基本能定位。
这是最常见原因。
systemctl status mariadb
如果看到 inactive (dead):
sudo systemctl start mariadb
sudo systemctl enable mariadb
很多连不上是因为 MariaDB 只监听 127.0.0.1 或 localhost。
查看监听端口:
ss -tlnp | grep 3306
如果只看到:
127.0.0.1:3306
说明不允许远程连接。
编辑配置文件(Ubuntu 常见路径):
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
找到:
bind-address = 127.0.0.1
改成:
bind-address = 0.0.0.0
重启:
sudo systemctl restart mariadb
即使端口通了,用户也可能不允许远程登录。
登录 MariaDB:
sudo mysql -u root
查看用户host:
SELECT user, host FROM mysql.user;
如果用户是:
root | localhost
那只能本地连。
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
FLUSH PRIVILEGES;
sudo ufw status
如果启用且没放行:
sudo ufw allow 3306/tcp
(云服务器还要看安全组)
本地命令:
mysql -u root -p
走的是 socket。
远程或指定 IP:
mysql -h 192.168.1.10 -u user -p
走 TCP。
Ubuntu 一般是 AppArmor,默认不会拦 MariaDB,除非你改了数据目录。
| 错误 | 原因 |
|---|---|
Can't connect to MySQL server |
服务没起 / 防火墙 |
Access denied for user |
用户或权限问题 |
Unknown database |
库不存在 |
Connection refused |
端口未监听 |
systemctl status mariadbss -tlnp | grep 3306sudo ufw statusSELECT user, host FROM mysql.user;如果你愿意,把**完整报错信息 + 连接方式(本地/远程/代码)**贴出来,我可以直接帮你定位到根因。