在 Debian 上 PHP 连接 MySQL 失败,常见原因和排查思路如下(按出现频率排序):
Debian 默认可能没装 MySQL 扩展。
php -m | grep -i mysql
看不到 mysqli 或 pdo_mysql 就说明没装。
sudo apt update
sudo apt install php-mysql
sudo systemctl restart apache2 # 或 php-fpm
systemctl status mysql
# 或
systemctl status mariadb
启动:
sudo systemctl start mysql
sudo systemctl enable mysql
localhost → PHP 走 socket127.0.0.1 → 走 TCPmysql -e "SHOW VARIABLES LIKE 'socket';"
PHP 中:
new mysqli('localhost', 'user', 'pass', 'db');
// 或
new mysqli('127.0.0.1', 'user', 'pass', 'db', 3306);
MySQL 用户可能不允许当前连接方式。
SELECT user, host FROM mysql.user;
如果用户是 user@localhost,却用 127.0.0.1 连接会失败。
授权示例:
GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
sudo ufw status
MySQL 默认端口:
3306
在 php.ini 中:
display_errors = On
error_reporting = E_ALL
或 PHP 代码里:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
| 报错 | 原因 |
|---|---|
Class 'mysqli' not found |
没装 php-mysql |
Connection refused |
服务没起 / 端口错 |
Access denied |
用户名密码 / 权限 |
No such file or directory |
socket 路径不对 |
<?php
$conn = new mysqli('127.0.0.1', 'user', 'pass', 'db');
if ($conn->connect_error) {
die("失败: " . $conn->connect_error);
}
echo "连接成功";
如果你愿意,可以把具体报错信息或PHP 版本 / Debian 版本发出来,我可以直接帮你定位。