在 Debian 上 MySQL(或 MariaDB)无法连接是比较常见的问题,原因通常集中在服务状态、网络绑定、用户权限、防火墙、Socket 配置这几类。下面按「最常见 → 较少见」帮你系统排查。
systemctl status mysql
# 或 MariaDB
systemctl status mariadb
如果没运行:
sudo systemctl start mysql
sudo systemctl enable mysql
常见错误:
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
检查:
ls -l /var/run/mysqld/mysqld.sock
如果不存在:
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
sudo systemctl restart mysql
连接时指定 socket:
mysql -u root -p --socket=/var/run/mysqld/mysqld.sock
错误示例:
ERROR 2003 (HY000): Can't connect to MySQL server on 'ip' (111)
ss -tlnp | grep 3306
如果看到:
127.0.0.1:3306
说明 只允许本地连接
修改配置文件(Debian 常见位置):
/etc/mysql/mysql.conf.d/mysqld.cnf
# 或
/etc/mysql/mariadb.conf.d/50-server.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;
sudo ufw status
如果开启:
sudo ufw allow 3306/tcp
⚠️ 公网环境 不建议直接暴露 3306
Debian 新版本可能用:
caching_sha2_password
旧客户端连不上,可改为:
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
Debian 默认有 AppArmor,一般不影响连接
若数据目录改过,需要改:
/etc/apparmor.d/usr.sbin.mysqld
你可以直接发:
mysql -u root -p 的结果ss -tlnp | grep 3306 输出我可以精准定位是哪一类问题。