温馨提示×

ubuntu下php-fpm连接数据库失败怎么办

小樊
54
2025-10-01 18:17:25
栏目: 编程语言

Ubuntu下PHP-FPM连接数据库失败的排查与解决步骤

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

PHP-FPM连接数据库需依赖对应的PHP扩展(如mysqlipdo_mysql)。若未安装,会导致扩展缺失错误。

  • 安装扩展:根据PHP版本选择对应命令(以PHP 8.1为例):
    sudo apt-get install php8.1-mysql
    
  • 重启PHP-FPM:安装后需重启服务使扩展生效:
    sudo systemctl restart php8.1-fpm
    
  • 验证扩展:创建phpinfo.php文件(内容为<?php phpinfo(); ?>),通过浏览器访问确认扩展是否存在。

2. 检查MySQL服务运行状态

若MySQL未启动,PHP-FPM无法建立连接。

  • 查看服务状态
    sudo systemctl status mysql
    
  • 启动服务:若未运行,执行以下命令启动:
    sudo systemctl start mysql
    
  • 设置开机自启(可选):
    sudo systemctl enable mysql
    

3. 验证数据库连接配置信息

PHP代码中的连接信息(主机名、用户名、密码、数据库名)需与数据库实际配置一致。

  • 常见配置位置
    • PHP代码中的mysqli_connect()或PDO连接字符串(如mysql:host=localhost;dbname=test)。
    • 若使用框架(如Laravel),检查.env文件中的DB_HOSTDB_USERNAME等参数。
  • 关键检查项
    • 主机名:本地开发通常为localhost,远程数据库需填写IP或域名。
    • 用户名/密码:确保与MySQL中创建的用户一致(区分大小写)。
    • 数据库名:确认数据库已存在。

4. 检查MySQL用户权限

用户需具备访问目标数据库的权限,否则会返回“Access denied”错误。

  • 登录MySQL
    mysql -u root -p
    
  • 查看用户权限
    SELECT User, Host FROM mysql.user WHERE User = 'your_username';
    SHOW GRANTS FOR 'your_username'@'localhost';
    
  • 授予权限(若权限不足):
    GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'localhost' IDENTIFIED BY 'your_password';
    FLUSH PRIVILEGES;
    

5. 检查防火墙设置

若PHP-FPM与MySQL位于不同服务器,需开放MySQL端口(默认3306)。

  • Ubuntu防火墙(ufw)
    sudo ufw allow 3306/tcp
    sudo ufw reload
    
  • 远程数据库服务器:确保防火墙允许来自PHP-FPM服务器的IP访问3306端口。

6. 查看PHP-FPM与MySQL错误日志

日志是定位问题的关键,可获取具体错误信息(如连接超时、权限拒绝)。

  • PHP-FPM错误日志
    • 路径通常在/var/log/php-fpm.log/var/log/php8.1-fpm.log(取决于PHP版本)。
    • 若未找到,可通过journalctl查看:
      sudo journalctl -u php8.1-fpm -n 50 --no-pager
      
  • MySQL错误日志
    • 路径通常在/var/log/mysql/error.log,可通过以下命令查看:
      sudo tail -n 50 /var/log/mysql/error.log
      

7. 检查MySQL绑定地址配置

MySQL默认可能仅绑定到127.0.0.1,导致远程连接失败。

  • 修改配置文件:编辑/etc/mysql/mysql.conf.d/mysqld.cnf(或/etc/mysql/my.cnf),找到bind-address行:
    bind-address = 0.0.0.0  # 允许所有IP连接(生产环境建议指定具体IP)
    
  • 重启MySQL
    sudo systemctl restart mysql
    

8. 测试数据库连接

使用命令行工具验证连接是否正常,排除PHP代码问题。

  • MySQL命令行测试
    mysql -h localhost -u your_username -p your_database
    
    输入密码后若能进入MySQL命令行,说明连接正常;若失败,需根据错误信息进一步排查(如密码错误、用户权限不足)。

按照以上步骤逐一排查,通常可解决PHP-FPM连接数据库失败的问题。若问题仍存在,建议结合错误日志中的具体信息进一步分析(如连接超时需检查网络,权限问题需调整用户权限)。

0