温馨提示×

ubuntu php为何连不上库

小樊
42
2026-09-13 09:54:24
栏目: 编程语言

在 Ubuntu 上 PHP 连不上数据库,常见原因可以归纳为这几类。你可以对照排查:


一、PHP 扩展没装 / 没启用(最常见)

1. MySQL / MariaDB

如果你用的是 MySQLiPDO_MySQL

php -m | grep -i mysql

如果没有输出,说明扩展没装。

安装:

# PHP 8.1 示例
sudo apt install php8.1-mysql

# 或通用
sudo apt install php-mysql

重启服务:

sudo systemctl restart apache2
# 或
sudo systemctl restart php8.1-fpm

2. PostgreSQL

sudo apt install php8.1-pgsql

二、数据库服务没启动

systemctl status mysql
# 或
systemctl status mariadb

启动:

sudo systemctl start mysql
sudo systemctl enable mysql

三、连接参数错误(host / user / password / db)

常见错误:

  • localhost 在 PHP 中可能走 socket 而不是 TCP
  • 用户没权限
  • 密码错误

建议测试方式

<?php
try {
    $pdo = new PDO(
        "mysql:host=127.0.0.1;dbname=test",
        "user",
        "password"
    );
    echo "OK";
} catch (Exception $e) {
    echo $e->getMessage();
}

127.0.0.1 而不是 localhost,排除 socket 问题


四、MySQL 用户权限问题(Ubuntu 常见)

MySQL 默认可能不允许远程或 socket 登录。

登录 MySQL:

mysql -u root -p

查看用户:

SELECT user, host FROM mysql.user;

授权示例:

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

五、Socket 文件路径不一致

PHP 和 MySQL socket 路径不一致会导致连不上。

查看 MySQL socket:

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

PHP 配置中确认:

pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock

六、防火墙 / 端口问题(远程数据库)

如果是远程数据库:

telnet 数据库IP 3306

Ubuntu 防火墙:

sudo ufw allow 3306

七、看错误日志(最关键)

PHP 错误

tail -f /var/log/apache2/error.log
# 或
tail -f /var/log/php8.1-fpm.log

MySQL 错误

tail -f /var/log/mysql/error.log

如果你愿意,可以把:

  • PHP 版本
  • 数据库类型(MySQL / MariaDB / PostgreSQL)
  • 报错信息

发出来,我可以直接帮你定位是哪一步的问题。

0