在 Ubuntu 上,PHP-FPM 本身不直接“连接”MySQL,而是通过 PHP 的 MySQL 扩展(mysqli / PDO) 去连接 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'
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
初始化安全设置(可选):
sudo mysql_secure_installation
sudo mysql
CREATE DATABASE testdb;
CREATE USER 'phpuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'phpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
<?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 连接成功";
?>
<?php
try {
$pdo = new PDO(
"mysql:host=localhost;dbname=testdb;charset=utf8mb4",
"phpuser",
"password"
);
echo "MySQL 连接成功";
} catch (PDOException $e) {
die("连接失败: " . $e->getMessage());
}
?>
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
访问:
http://localhost/test.php
Connection refused127.0.0.1 但 MySQL 只监听 socket✅ 解决:
sudo systemctl status mysql
或用 socket 连接:
new mysqli('localhost', ...); // 默认走 socket
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
$host = '192.168.1.100';
需要:
0.0.0.0'phpuser'@'%'PHP-FPM 通过 PHP 的 mysqli / PDO 扩展,使用 TCP 或 Unix Socket 连接 MySQL 服务
如果你愿意,可以告诉我:
我可以给你更精确的配置示例。