温馨提示×

ubuntu上php-fpm连接mysql失败怎么办

小樊
47
2025-10-26 23:55:17
栏目: 云计算

Ubuntu上PHP-FPM连接MySQL失败的解决方法

1. 确认PHP MySQL扩展是否安装并启用

PHP-FPM连接MySQL需要对应的扩展支持(如mysqlipdo_mysql)。若未安装或未启用,会导致连接失败。

  • 安装扩展:根据PHP版本安装对应扩展(以PHP 8.1为例):
    sudo apt-get install php8.1-mysql
    
  • 重启PHP-FPM:安装后需重启服务使扩展生效:
    sudo systemctl restart php8.1-fpm
    
  • 验证扩展:创建info.php文件(<?php phpinfo(); ?>),通过浏览器访问查看是否有mysqlipdo_mysql模块。

2. 检查MySQL服务状态

MySQL服务未运行会导致连接失败,需确认服务状态:

sudo systemctl status mysql
  • 若未运行,启动服务:
    sudo systemctl start mysql
    
  • 若需开机自启:
    sudo systemctl enable mysql
    

3. 验证数据库连接信息

PHP代码中的连接信息(主机名、用户名、密码、数据库名)必须与MySQL配置一致:

  • 检查代码中的连接参数:如使用mysqli_connect()函数,确认参数正确:
    $conn = mysqli_connect("localhost", "username", "password", "database");
    
  • 测试连接:通过命令行工具mysql测试连接,确认信息无误:
    mysql -u username -p -h localhost database
    

4. 检查MySQL用户权限

MySQL用户需具备访问指定数据库的权限,否则会拒绝连接:

  • 登录MySQL
    mysql -u root -p
    
  • 授予权限:为用户分配数据库权限(将usernamepassworddatabase替换为实际值):
    GRANT ALL PRIVILEGES ON database.* TO 'username'@'localhost' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
  • 检查权限:查看用户权限是否正确:
    SHOW GRANTS FOR 'username'@'localhost';
    

5. 检查防火墙设置

若PHP-FPM与MySQL不在同一服务器,需开放MySQL端口(默认3306):

  • 查看防火墙状态
    sudo ufw status
    
  • 允许MySQL端口
    sudo ufw allow 3306/tcp
    
  • 重启防火墙
    sudo ufw reload
    

6. 确认MySQL Socket路径一致性

若使用localhost连接,PHP会通过Socket文件通信,需确保PHP配置与MySQL配置的Socket路径一致:

  • 查看MySQL Socket路径:编辑MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf),找到[mysqld]段的socket参数:
    [mysqld]
    socket = /var/run/mysqld/mysqld.sock
    
  • 查看PHP Socket配置:编辑PHP配置文件(如/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
    
  • 重启服务:修改后重启PHP-FPM和MySQL:
    sudo systemctl restart php8.1-fpm
    sudo systemctl restart mysql
    

7. 查看错误日志定位问题

若以上步骤无法解决,可通过错误日志获取详细信息:

  • PHP-FPM错误日志:通常位于/var/log/php8.1-fpm.log(路径随PHP版本变化),查看是否有连接错误记录。
  • MySQL错误日志:通常位于/var/log/mysql/error.log,查看是否有拒绝连接或权限问题。

按照上述步骤逐一排查,可解决大部分PHP-FPM连接MySQL失败的问题。若仍有异常,建议结合错误日志中的具体信息进一步分析。

0