温馨提示×

ubuntu php-fpm怎么连接mysql

小樊
50
2026-09-10 09:10:18
栏目: 云计算

在 Ubuntu 上,PHP-FPM 本身不直接“连接”MySQL,而是通过 PHP 的 MySQL 扩展(mysqli / PDO) 去连接 MySQL 服务。下面按常见场景一步步说明。


一、环境准备

1. 安装 PHP-FPM 和 MySQL 扩展

sudo apt update
sudo apt install php-fpm php-mysql

php-mysql 会自动启用 mysqli 和 pdo_mysql

重启 PHP-FPM:

sudo systemctl restart php-fpm
# 或(取决于版本)
sudo systemctl restart php8.1-fpm

确认扩展已加载:

php -m | grep -E 'mysqli|pdo_mysql'

2. 安装并启动 MySQL

sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

初始化安全设置(可选):

sudo mysql_secure_installation

二、创建 MySQL 用户和数据库

sudo mysql
CREATE DATABASE testdb;
CREATE USER 'phpuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'phpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

三、PHP-FPM 连接 MySQL 的方式

✅ 方式 1:使用 mysqli(最常见)

<?php
$host = 'localhost';
$user = 'phpuser';
$pass = 'password';
$db   = 'testdb';

$conn = new mysqli($host, $user, $pass, $db);

if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "MySQL 连接成功";
?>

✅ 方式 2:使用 PDO(推荐)

<?php
try {
    $pdo = new PDO(
        "mysql:host=localhost;dbname=testdb;charset=utf8mb4",
        "phpuser",
        "password"
    );
    echo "MySQL 连接成功";
} catch (PDOException $e) {
    die("连接失败: " . $e->getMessage());
}
?>

四、通过 Web 服务器访问(Nginx / Apache)

Nginx + PHP-FPM 示例

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

访问:

http://localhost/test.php

五、常见问题排查

1. Connection refused

  • MySQL 没启动
  • 用了 127.0.0.1 但 MySQL 只监听 socket

✅ 解决:

sudo systemctl status mysql

或用 socket 连接:

new mysqli('localhost', ...); // 默认走 socket

2. Permission denied (socket)

PHP-FPM 用户(如 www-data)无权访问 MySQL socket

✅ 解决:

ls -l /var/run/mysqld/mysqld.sock

确保 www-data 在 mysql 组:

sudo usermod -aG mysql www-data

3. 远程连接 MySQL

$host = '192.168.1.100';

需要:

  • MySQL 监听 0.0.0.0
  • 用户为 'phpuser'@'%'

六、总结一句话

PHP-FPM 通过 PHP 的 mysqli / PDO 扩展,使用 TCP 或 Unix Socket 连接 MySQL 服务

如果你愿意,可以告诉我:

  • 用的是 Nginx 还是 Apache
  • PHP 版本
  • 是否 本地 / 远程 MySQL

我可以给你更精确的配置示例。

0 踩