温馨提示×

为何Ubuntu连不上MySQL

小樊
34
2026-09-16 06:16:51
栏目: 云计算

Ubuntu 连不上 MySQL 的原因很多,下面按常见场景 + 对应排查方法给你梳理一下,你可以逐项对照。


一、MySQL 服务根本没启动

现象ERROR 2002 (HY000): Can't connect to local MySQL server

排查:

systemctl status mysql

service mysql status

启动:

sudo systemctl start mysql
sudo systemctl enable mysql

二、连接方式搞错了(socket vs TCP)

1️⃣ 本地连接却用 TCP

mysql -h 127.0.0.1 -u root -p

如果报错,但下面能连:

mysql -u root -p

说明 MySQL 只允许 socket 连接

解决:

  • 用 socket 连
  • 或改配置 /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1

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

现象:远程或容器连不上

查看:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

如果有:

bind-address = 127.0.0.1

远程是无法连的。

改成:

bind-address = 0.0.0.0

然后:

sudo systemctl restart mysql

⚠️ 公网暴露 MySQL 很危险,建议用 SSH / 防火墙限制。


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

现象

Access denied for user 'root'@'localhost'

查看用户:

SELECT user, host FROM mysql.user;

授权示例(允许远程):

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

五、Ubuntu 的 auth_socket 插件(坑点)

Ubuntu 默认 root 用 auth_socket不能用密码登

查看:

SELECT user, plugin FROM mysql.user;

如果 root 是 auth_socket

sudo mysql

想改密码登录:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRIVILEGES;

六、防火墙 / 端口问题

查看端口:

sudo netstat -tulnp | grep 3306

防火墙:

sudo ufw allow 3306

云服务器还要看安全组


七、AppArmor / SELinux(较少)

Ubuntu 常见是 AppArmor:

sudo aa-status | grep mysql

八、Docker / 虚拟机特殊情况

  • Docker:要用 host.docker.internal 或容器 IP
  • 虚拟机:确认网络模式(NAT / 桥接)

快速自检清单 ✅

  • [ ] MySQL 服务在运行
  • [ ] 用对连接方式(socket / TCP)
  • [ ] bind-address 正确
  • [ ] 用户有对应 host 权限
  • [ ] 端口开放
  • [ ] 防火墙 / 安全组允许

如果你愿意,可以把具体报错信息贴出来(完整错误码),我可以直接帮你精确定位是哪一类问题。

0