手机
当前位置:查字典教程网 >编程开发 >mysql数据库 >SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法
SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法
摘要:同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip、unixsocket)...

同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip、unix socket)都无法连接mysql。

我协助查看了下,确实如此,无论是指定IP、端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似:

复制代码 代码如下:Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13)

无论如何修改MySQL的授权,或者调整php.ini中关于MySQL的设置,或者修改MySQL的监听网口,都无法解决。

而如果用命令行人工连接MySQL,则一切正常。

问题看起来像是php(with apache)不被允许连接MySQL,但是防火墙也没有限制。想来想去,唯有SELinux的因素会导致这个问题。

复制代码 代码如下:getsebool -a|grep -i httpd

可以看到这里设置了httpd进程的许可模式,再仔细看一下,有一个选项:

复制代码 代码如下:getsebool -a|grep -i httpd_can_network_connect

httpd_can_network_connect --> off

现在明白了,原来是SELinux限制了httpd对外访问的权限。将其开启即可:

复制代码 代码如下:setsebool -P httpd_can_network_connect=1

如果对SELinux不熟悉,也可以直接修改系统配置文件 /etc/sysconfig/selinux,全局关闭:

复制代码 代码如下:

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

#SELINUX=enforcing

#把设置改为disabled

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

# targeted - Targeted processes are protected,

# mls - Multi Level Security protection.

SELINUXTYPE=targeted

然后重启操作系统,即可生效。

或者,直接执行命令,可在线生效:

复制代码 代码如下:

[root@imysql~]# setenforce 0

setenforce: SELinux is disabled

【SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法】相关文章:

mysql处理添加外键时提示error 150 问题的解决方法

mysql忘记密码的解决方法

php 不能连接数据库 php error Can't connect to local MySQL server

SQL语句详解 MySQL update的正确用法

Lost connection to MySQL server during query的解决

PHP访问MySQL查询超时处理的方法

MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL server)

phpmyadmin报错:#2003 无法登录 MySQL服务器的解决方法

MySQL下的NoSQL解决方案HandlerSocket

php运行提示Can't connect to MySQL server on 'localhost'的解决方法

精品推荐
分类导航