CentOS中PHP连接127.0.0.1报错2003的排查与修复

纸上星河
纸上星河
发布时间:2026-10-14 | 4人浏览过
原创

解决CentOS环境下PHP通过127.0.0.1连接MySQL报错“Can't connect to MySQL server on '127.0.0.1' (13) 2003”的问题。该错误多由SELinux阻止Web服务进程发起网络连接引起,可通过调整SELinux布尔值或修改配置文件来解决。

问题描述

在Linux本机运行PHP脚本时连接正常,但在浏览器访问同一脚本时却抛出以下错误:

Could not connect: Can't connect to MySQL server on '127.0.0.1' (13) 2003

这表明PHP脚本本身语法无误,但执行环境(Apache/Nginx)被系统安全模块拦截了出站数据库连接请求。

根本原因:SELinux网络限制

CentOS默认开启了SELinux,其策略默认禁止HTTPD进程(如Apache或Nginx)连接外部网络。使用以下命令检查相关布尔值:

# getsebool -a | grep httpd

如果输出显示 httpd_can_network_connect --> off,则说明确实是SELinux阻止了连接。

解决方案一:临时开启网络连接权限

如果不打算关闭SELinux,可以手动允许HTTPD进程进行网络连接:

# setsebool -P httpd_can_network_connect 1

参数解释:
- -P:持久化配置,即使重启服务器后依然生效。
- 1:开启该布尔值。

操作完成后,刷新页面测试连接是否恢复。

解决方案二:彻底关闭SELinux(生产环境需谨慎)

对于开发环境或非严格安全要求的服务器,直接关闭SELinux是更彻底的解决方式。请按照以下步骤操作:

第1步:验证当前状态

确认SELinux处于开启状态:

# sestatus -v

或者:

# getenforce

若返回 Enforcing 或 Enabled,则继续下一步。

第2步:临时关闭(立即生效)

重启不生效,仅针对当前会话:

# setenforce 0

此时再次测试,连接应当正常。但这只是权宜之计。

第3步:永久关闭(修改配置文件)

警告:在生产环境中关闭SELinux会降低系统安全性。请务必评估安全风险后再操作。

  1. 编辑SELinux配置文件:
# vi /etc/selinux/config
  1. 找到 SELINUX=enforcing 一行,将其修改为:
SELINUX=disabled
  1. 保存退出并重启系统:
# reboot

补充:关闭防火墙(如需)

如果上述步骤后仍无法连接,可能是防火墙拦截。可参考以下操作关闭iptables和ip6tables:

# chkconfig --level 12345 iptables off
# chkconfig --level 12345 ip6tables off
# service iptables stop
# service ip6tables stop

完成判断

  • SELinux布尔值已更改或状态为Disabled。
  • PHP脚本在浏览器端可成功打印出MySQL连接资源,不再报2003错误。

以上就是CentOS下PHP使用127.0.0.1连接MySQL报错的详细内容,更多关于PHP连接MySQL故障排查的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表