Ubuntu 连不上 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
mysql -h 127.0.0.1 -u root -p
如果报错,但下面能连:
mysql -u root -p
说明 MySQL 只允许 socket 连接。
解决:
/etc/mysql/mysql.conf.d/mysqld.cnfbind-address = 127.0.0.1
现象:远程或容器连不上
查看:
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 默认 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
云服务器还要看安全组。
Ubuntu 常见是 AppArmor:
sudo aa-status | grep mysql
host.docker.internal 或容器 IP如果你愿意,可以把具体报错信息贴出来(完整错误码),我可以直接帮你精确定位是哪一类问题。