問題:php程序連接mysql只能使用localhost,不能使用127.0.0.1
系統環境:centos5.6 64位系統 mysql 版本5.6.29 php版本5.6.22
以下為我解決問題的過程:
1、根據出錯的提示信息“sqlstate hy000 2002 Permission denied” 使用google搜索mysql_connect 有人說是可能mysql_connect這個函數被禁用了,使用其它的連接,測試過不行。
2、使用google搜索mysql能用localhost連接,不能使用127.0.0.1連接,結果大部分人的解決辦法是:
修改my.cnf文件,去掉skip_networking,bind_address=127.0.0.1,重啟mysql 故障依舊。
權限問題,grant all privileges on *.* to 'root'@'127.0.0.1' identified by '密碼'; 然后flush privileges; 故障依舊。
修改/etc/hosts文件,添加127.0.0.1 localhost 項,故障依舊。
3、查看apache錯誤日志,發現只記錄了文件不存在之類的日志信息,未發現和訪問mysql數據連接文件相關的項目。
4、查看mysql的日志,未發現相關的連接項目。
5、最后我想起來要查看一下系統日志/var/log/messages 信息太多,清理之: echo "" > /val/log/messages 然后訪問 數據連接測試文件。發現了如下信息:
Nov 30 10:18:49 localhost setroubleshoot: SELinux 正在阻止http 守護進程連接到網絡端口3306 For complete SELinux messages. run sealert -l a214e214-c710-4c84-9eb
2-12764f4b27de
結果就很明顯了,是selinux闖的禍,關閉selinux測試一下“/usr/sbin/setenforce 0 立刻關閉SELINUX ” 數據庫連接一切正常。
最后得出一個結論,請大家在安裝服務器的時候,一定要selinux給關閉掉。下面給出方法:
如何關閉SeLinux
1、快速關閉SElinux,使用如下命令就可以:
/usr/sbin/setenforce 0 立刻關閉SELINUX
/usr/sbin/setenforce 1 立刻啟用SELINUX
2、加到系統默認啟動里面
echo "/usr/sbin/setenforce 0" >> /etc/rc.local
3、可以編輯配置文件達到同樣的目的
vi /etc/selinux/conf
set SELINUX=disabled
備注:pbl項目,數據庫127.0.0.1無法訪問連接,導致前端報“未知錯誤”,“獲取列表失敗”