温馨提示×

debian php连接mysql失败为啥

小樊
41
2026-09-11 02:10:37
栏目: 云计算

在 Debian 上 PHP 连接 MySQL 失败,常见原因和排查思路如下(按出现频率排序):


1️⃣ PHP 缺少 MySQL 扩展(最常见)

Debian 默认可能没装 MySQL 扩展。

检查

php -m | grep -i mysql

看不到 mysqli 或 pdo_mysql 就说明没装。

安装(以 PHP 8.2 为例)

sudo apt update
sudo apt install php-mysql
sudo systemctl restart apache2   # 或 php-fpm

2️⃣ MySQL / MariaDB 服务没启动

systemctl status mysql
# 或
systemctl status mariadb

启动:

sudo systemctl start mysql
sudo systemctl enable mysql

3️⃣ 连接地址错误(localhost vs 127.0.0.1)

  • localhost → PHP 走 socket
  • 127.0.0.1 → 走 TCP

查看 socket 路径

mysql -e "SHOW VARIABLES LIKE 'socket';"

PHP 中:

new mysqli('localhost', 'user', 'pass', 'db');
// 或
new mysqli('127.0.0.1', 'user', 'pass', 'db', 3306);

4️⃣ 用户权限问题

MySQL 用户可能不允许当前连接方式。

SELECT user, host FROM mysql.user;

如果用户是 user@localhost,却用 127.0.0.1 连接会失败。

授权示例:

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

5️⃣ 防火墙 / 端口问题(远程连接)

sudo ufw status

MySQL 默认端口:

3306

6️⃣ 错误信息没打开(看不到原因)

在 php.ini 中:

display_errors = On
error_reporting = E_ALL

或 PHP 代码里:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

7️⃣ 典型报错对应原因

报错 原因
Class 'mysqli' not found 没装 php-mysql
Connection refused 服务没起 / 端口错
Access denied 用户名密码 / 权限
No such file or directory socket 路径不对

8️⃣ 快速测试脚本

<?php
$conn = new mysqli('127.0.0.1', 'user', 'pass', 'db');
if ($conn->connect_error) {
    die("失败: " . $conn->connect_error);
}
echo "连接成功";

如果你愿意,可以把具体报错信息或PHP 版本 / Debian 版本发出来,我可以直接帮你定位。

0 踩