手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

启用SELinux后PHP远程连接MySQL异常

[日期:2017-02-25] 来源:Linux社区  作者:Linux [字体: ]

一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip、unix socket)都无法连接MySQL。 

 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 

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-02/141057.htm

linux
相关资讯       PHP连接MySQL  PHP远程连接MySQL 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款