ubuntu php-fpm连接数据库失败原因
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使配置生效。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu php-fpm连接数据库失败原因
本文地址: https://pptw.com/jishu/715648.html