在 Debian 上 MySQL 连接失败 的原因很多,下面按最常见 → 较少见的顺序帮你排查。你可以逐条对照。
systemctl status mysql
# 或
systemctl status mariadb
如果没启动:
sudo systemctl start mysql
sudo systemctl enable mysql
mysql -u root 报错如:
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
说明 socket 文件不存在或路径不对
检查:
ls -l /var/run/mysqld/mysqld.sock
或查看配置:
grep socket /etc/mysql/my.cnf
mysql -h 127.0.0.1 -P 3306 -u root -p
如果这样能连,说明是 socket 问题
查看监听:
ss -lntp | grep 3306
如果看到:
127.0.0.1:3306
说明 只允许本机连接
修改:
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
⚠️ 远程连接还需授权用户
SELECT user, host FROM mysql.user;
如果用户是:
root | localhost
那你 不能远程连接
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
FLUSH PRIVILEGES;
MySQL 8 默认使用:
caching_sha2_password
某些旧客户端不支持
解决:
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
sudo ufw allow 3306
云服务器还要检查 安全组
日志查看:
journalctl -xe
cat /var/log/mysql/error.log
| 错误信息 | 原因 |
|---|---|
| Access denied | 用户名/密码/host 不对 |
| Can’t connect to socket | 服务未启动 |
| Connection refused | 端口未监听 |
| Too many connections | 连接数满 |
| Unknown database | 数据库不存在 |
你可以告诉我:
我可以直接帮你给出 精确解决方案 ✅