1. 未安装或未正确配置PHP MySQL扩展
PHP-FPM需要对应的MySQL扩展才能与数据库通信。若未安装扩展,PHP代码中的mysqli_connect()或PDO连接会失败。需根据PHP版本安装对应扩展(如PHP 8.1需安装php8.1-mysql),安装后重启PHP-FPM服务使扩展生效。
2. MySQL服务未启动或无法访问
若MySQL服务未运行,PHP-FPM无法建立连接。可通过sudo systemctl status mysql检查服务状态,未启动则用sudo systemctl start mysql启动。此外,需确认MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)中的bind-address设置为127.0.0.1(本地访问)或0.0.0.0(允许远程访问)。
3. 数据库连接信息错误
PHP代码中的连接参数(主机名、用户名、密码、数据库名)需与实际一致。常见错误包括:主机名写错(如localhost误写为127.0.0.1但MySQL未监听IP)、用户名/密码拼写错误、数据库名不存在。需仔细核对代码中的mysqli_connect()或PDO配置。
4. MySQL用户权限不足
即使连接信息正确,用户无权限访问数据库也会导致失败。需用root账户登录MySQL,执行GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;授予用户对应数据库的访问权限(host需与连接信息中的主机名一致,如localhost)。
5. 防火墙限制
若PHP-FPM与MySQL位于不同服务器,防火墙可能阻止3306端口(MySQL默认端口)的通信。需配置防火墙允许该端口的入站连接(如Ubuntu的ufw命令:sudo ufw allow 3306)。
6. PHP-FPM与Nginx通信问题(间接影响)
若PHP-FPM未正常运行,Nginx无法将PHP请求转发给它,可能导致类似“连接失败”的假象。需检查PHP-FPM服务状态(sudo systemctl status phpX.X-fpm),确认fastcgi_pass指令中的socket文件路径(如/var/run/php/php8.1-fpm.sock)与PHP-FPM配置一致,且socket文件权限允许Nginx用户(通常为www-data)访问。
7. PHP-FPM进程池配置不当
若pm.max_children(最大子进程数)设置过低,高并发时所有进程被占用,新请求无法处理,可能表现为连接超时或失败。需根据服务器资源(CPU、内存)调整该参数(如pm.max_children = 50),并重启PHP-FPM使配置生效。
以上就是关于“ubuntu php-fpm连接数据库失败原因”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm