SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法

 更新时间:2014年07月23日 09:37:35   投稿:junjie  
这篇文章主要介绍了SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法,有2种,一是设置允许,二是关闭SELinux,需要的朋友可以参考下

同事报告一起奇怪的现象,一个最简单的测试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

相关文章

  • MySQL之复杂查询的实现

    MySQL之复杂查询的实现

    本文主要介绍了MySQL之复杂查询的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • MySql索引的作用以及对索引的理解

    MySql索引的作用以及对索引的理解

    这篇文章主要给大家介绍了关于MySql索引的作用以及对索引的理解,MySQL索引的建立对于MySQL的高效运行是很重要的,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • mysql查看索引的方式

    mysql查看索引的方式

    这篇文章主要介绍了mysql查看索引的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • MySQL中的行级锁定示例详解

    MySQL中的行级锁定示例详解

    这篇文章主要给大家介绍了关于MySQL中行级锁定的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 详解如何对MySQL数据库进行授权管理

    详解如何对MySQL数据库进行授权管理

    MySQL数据授权是指数据库管理员通过设置权限,控制用户对数据库中的数据的访问和操作能力,在MySQL中,每个用户账户都有特定的权限,本文给大家介绍了如何对MySQL数据库进行授权管理,需要的朋友可以参考下
    2024-11-11
  • MySQL中having和where的区别及应用详解

    MySQL中having和where的区别及应用详解

    这篇文章主要给大家详细介绍了MySQL中having和where的区别以及他们的使用方法,文中有相关的代码示例,具有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • MySQL深度分页(千万级数据量如何快速分页)

    MySQL深度分页(千万级数据量如何快速分页)

    后端开发中经常需要分页展示,个时候就需要用到MySQL的LIMIT关键字。LIMIT在数据量大的时候极可能造成的一个问题就是深度分页。本文就介绍一下解决方法,感兴趣的可以了解一下
    2021-07-07
  • MySQL全文检索的实现示例

    MySQL全文检索的实现示例

    全文搜索是一种在文本字段中查找关键词的功能。在MySQL中,我们可以使用全文搜索来提高查询的效率,本文主要介绍了MySQL全文检索的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 5个常用的MySQL数据库管理工具详细介绍

    5个常用的MySQL数据库管理工具详细介绍

    本篇文章是对5个常用的MySQL数据库管理工具进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL 5.7增强版Semisync Replication性能优化

    MySQL 5.7增强版Semisync Replication性能优化

    这篇文章主要介绍了MySQL 5.7增强版Semisync Replication性能优化,本文着重讲解支持发送binlog和接受ack的异步化、支持在事务commit前等待ACK两项内容,需要的朋友可以参考下
    2015-05-05

最新评论