温馨提示×

ubuntu php为何连接不上mysql

小樊
52
2026-09-28 13:26:00
栏目: 云计算

在 Ubuntu 上 PHP 连不上 MySQL,常见原因和排查思路如下(按出现频率从高到低):


一、最常见原因

1. PHP 没有安装 MySQL 扩展

不同 PHP 版本扩展名不同:

  • PHP 7.0+:mysqli 或 pdo_mysql
  • 老版本:mysql(已废弃)

检查是否安装:

php -m | grep -i mysql

如果没有,安装:

# PHP 7.x / 8.x 示例
sudo apt install php-mysql

# 重启服务
sudo systemctl restart apache2
# 或
sudo systemctl restart php8.1-fpm

2. MySQL 服务没启动

systemctl status mysql

启动:

sudo systemctl start mysql

3. 使用了错误的主机地址

常见错误:

mysqli_connect("localhost", ...)

在 Ubuntu 上:

  • localhost → 走 socket
  • 127.0.0.1 → 走 TCP

如果 socket 配置不对,建议先用:

mysqli_connect("127.0.0.1", "user", "pass", "db");

4. MySQL 用户权限问题

MySQL 用户可能不允许连接:

SELECT user, host FROM mysql.user;

如果用户是:

user@localhost

但你用 127.0.0.1 连接,就会失败。

解决:

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

5. 认证插件不兼容(PHP 8 + MySQL 8 常见)

MySQL 8 默认:

caching_sha2_password

某些 PHP 版本不支持。

修改用户:

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

二、查看真实错误信息(非常重要)

PHP 中开启错误显示

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli("127.0.0.1", "user", "pass", "db");

或:

echo mysqli_connect_error();

三、防火墙 / 端口问题(远程连接才需要考虑)

本地一般不用管:

sudo ufw status

四、典型错误对照表

错误信息 原因
Connection refused MySQL 没启动 / 端口错
Access denied 用户名密码或权限错
No such file or directory socket 路径不对
unknown authentication method 认证插件不兼容

五、快速自检清单 ✅

  • [ ] MySQL 服务已启动
  • [ ] php-mysql 已安装
  • [ ] 使用 127.0.0.1 测试
  • [ ] 用户有对应 host 权限
  • [ ] 看到明确错误信息

如果你愿意,可以把 PHP 连接代码 + 报错信息 发出来,我可以直接帮你定位是哪一步出问题。

0 踩