PHP-FPM连接MySQL需要对应的扩展支持(如mysqli、pdo_mysql)。若未安装或未启用,会导致连接失败。
sudo apt-get install php8.1-mysql
sudo systemctl restart php8.1-fpm
info.php文件(<?php phpinfo(); ?>),通过浏览器访问查看是否有mysqli或pdo_mysql模块。MySQL服务未运行会导致连接失败,需确认服务状态:
sudo systemctl status mysql
sudo systemctl start mysql
sudo systemctl enable mysql
PHP代码中的连接信息(主机名、用户名、密码、数据库名)必须与MySQL配置一致:
mysqli_connect()函数,确认参数正确:$conn = mysqli_connect("localhost", "username", "password", "database");
mysql测试连接,确认信息无误:mysql -u username -p -h localhost database
MySQL用户需具备访问指定数据库的权限,否则会拒绝连接:
mysql -u root -p
username、password、database替换为实际值):GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'username'@'localhost';
若PHP-FPM与MySQL不在同一服务器,需开放MySQL端口(默认3306):
sudo ufw status
sudo ufw allow 3306/tcp
sudo ufw reload
若使用localhost连接,PHP会通过Socket文件通信,需确保PHP配置与MySQL配置的Socket路径一致:
/etc/mysql/mysql.conf.d/mysqld.cnf),找到[mysqld]段的socket参数:[mysqld]
socket = /var/run/mysqld/mysqld.sock
/etc/php/8.1/fpm/php.ini),确保以下参数与MySQL一致:mysqli.default_socket = /var/run/mysqld/mysqld.sock
pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock
sudo systemctl restart php8.1-fpm
sudo systemctl restart mysql
若以上步骤无法解决,可通过错误日志获取详细信息:
/var/log/php8.1-fpm.log(路径随PHP版本变化),查看是否有连接错误记录。/var/log/mysql/error.log,查看是否有拒绝连接或权限问题。按照上述步骤逐一排查,可解决大部分PHP-FPM连接MySQL失败的问题。若仍有异常,建议结合错误日志中的具体信息进一步分析。