温馨提示×

Debian LNMP为何连接数据库失败

小樊
46
2026-07-15 18:03:50
栏目: 智能运维

Debian + LNMP(Linux + Nginx + MySQL/MariaDB + PHP) 环境中,连接数据库失败常见原因很多,下面按由浅入深给你一个排查清单,基本能覆盖 90% 的情况。


一、最常见原因(优先检查)

1️⃣ 数据库服务未启动

systemctl status mariadb
# 或
systemctl status mysql

如果没启动:

systemctl start mariadb
systemctl enable mariadb

2️⃣ 连接参数错误(最常见)

检查你的 PHP 代码或配置文件:

$host = 'localhost';
$user = 'dbuser';
$pass = 'password';
$db   = 'dbname';

Debian 下注意:

  • localhost使用 Unix Socket
  • 127.0.0.1使用 TCP

如果 MySQL 没开 TCP,用 localhost 反而可能失败。

✅ 建议先测试:

$host = '127.0.0.1';

3️⃣ 用户权限不足

登录数据库:

mysql -u root -p

查看用户权限:

SELECT user, host FROM mysql.user;

如果用户只允许 localhost

GRANT ALL PRIVILEGES ON dbname.* TO 'dbuser'@'localhost';
FLUSH PRIVILEGES;

如果是 PHP 通过 Nginx + PHP-FPM 连接,确认不是 127.0.0.1localhost 混用。


4️⃣ MySQL / MariaDB 监听方式问题

查看监听端口:

ss -lntp | grep 3306

如果 没有监听 3306

nano /etc/mysql/mariadb.conf.d/50-server.cnf

确认:

bind-address = 127.0.0.1
# 或
bind-address = 0.0.0.0

修改后重启:

systemctl restart mariadb

二、PHP 相关问题

5️⃣ PHP 未安装 MySQL 扩展

php -m | grep mysql

Debian 常见包:

apt install php-mysql
systemctl restart php-fpm

6️⃣ Unix Socket 路径错误

查看 socket 位置:

mysql -u root -p -e "SHOW VARIABLES LIKE 'socket';"

PHP 中指定 socket:

new PDO('mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=dbname', 'user', 'pass');

三、Nginx + PHP-FPM 问题

7️⃣ PHP-FPM 用户权限不足

ps aux | grep php-fpm

PHP-FPM 用户通常是:

www-data

确保 socket 或数据库权限允许 www-data 访问。


四、防火墙 & SELinux(Debian 较少)

8️⃣ 防火墙拦截(少见)

iptables -L

Debian 默认不启用 SELinux,一般不是它的问题。


五、快速排错命令(强烈推荐)

✅ 用命令行测试连接

mysql -u dbuser -p -h 127.0.0.1 dbname

如果命令行能连,PHP 连不上 → PHP 配置问题
如果命令行也连不上 → 数据库权限 / 服务问题


六、常见错误码速查

错误信息 原因
Access denied 用户名 / 密码 / 权限
Unknown database 数据库不存在
Connection refused 服务未启动 / 端口
No such file or directory Socket 路径错误
Too many connections 连接数爆满

七、如果你愿意,我可以直接帮你定位

你可以直接贴出:

  1. 完整报错信息
  2. PHP 连接代码
  3. Debian 版本
  4. MySQL / MariaDB 版本

我可以 精确告诉你哪一步错了

0