CentOS7服务器PHP/MySQL应用数据库连接报错[111] Connection refused求助
解决PHP连接MySQL时出现[111] Connection refused的问题
看起来你已经做了不少基础排查,但PHP应用的连接问题有时候会卡在一些容易忽略的细节上,我来帮你一步步梳理可能的原因:
1. 检查PHP代码中的连接参数
首先确认你的PHP连接代码里的主机参数:
- 如果代码里写的是
localhost,PHP可能会尝试通过Unix socket连接MySQL,而不是TCP端口3306。如果MySQL的socket路径和PHP配置里的不一致,就会出现连接拒绝。- 可以先把代码里的主机改成
127.0.0.1试试,强制走TCP连接,看是否能成功。
- 可以先把代码里的主机改成
- 另外,确认端口号是不是写对了——你提到开放了50005,但MySQL默认是3306,除非你修改了MySQL的端口,否则代码里要对应3306。
2. 验证MySQL用户的权限范围
你提到给root@localhost授权了,但要注意:
- MySQL中
localhost和127.0.0.1是两个不同的身份:root@localhost只能通过socket连接,root@127.0.0.1才能通过TCP连接。 - 可以登录MySQL执行以下命令,检查是否有允许TCP连接的用户:
如果没有SELECT user, host FROM mysql.user;root@127.0.0.1或者你的应用使用的用户对应的host不是%/127.0.0.1,就需要授权:GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '你的密码' WITH GRANT OPTION; FLUSH PRIVILEGES;
3. 检查SELinux的限制
CentOS7默认启用SELinux,它可能会阻止PHP进程连接MySQL,即使防火墙已经开放端口。
- 可以先临时关闭SELinux测试:
如果关闭后连接正常,说明是SELinux的问题,需要添加允许规则:setenforce 0
这个命令会永久允许HTTP服务(PHP通常跑在Apache/Nginx下,属于httpd相关进程)连接数据库。setsebool -P httpd_can_network_connect_db on
4. 确认PHP的MySQL扩展配置
- 首先检查PHP是否加载了正确的MySQL扩展,执行以下命令:
如果没有输出,说明扩展没启用,需要安装或启用对应的扩展(比如php -m | grep -E 'mysqli|pdo_mysql'php-mysqli或php-pdo-mysql)。 - 如果用socket连接,确认PHP配置里的socket路径和MySQL的一致:
- 查看MySQL的socket路径:
mysql -e "SHOW VARIABLES LIKE 'socket'" - 查看PHP的socket配置:
php -i | grep 'mysql.default_socket'
如果不一致,可以修改php.ini里的对应参数,或者在连接代码里指定socket路径。
- 查看MySQL的socket路径:
5. 检查MySQL的监听状态
虽然你能通过Workbench连接,但还是确认下MySQL是否真的在监听3306端口:
netstat -tulpn | grep mysqld
输出应该包含0.0.0.0:3306或者127.0.0.1:3306,如果只有:::3306(IPv6),而PHP没启用IPv6支持,也可能出现连接问题。
按照上面的步骤逐一排查,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

