201411121022PHP 與 MySQL 無法連線 - 連線測試 - selinux
問題是~當使用 wordpress 套件連結遠端的資料庫(WEB與DB不同台主機),無法正常連線該怎麼進行除錯,可能是什麼原因呢?
基本的 iptables (Firewall)問題與 MySQL 帳號權限問題,不在本篇討論。
當發生資料庫無法正常連線的時候,可以利用底下兩種方式進行測試
A. 使用指令 mysql -h [遠端主機] -u[帳號] -p 來進行連線到遠端的資料庫主機
ex: mysql -h 140.113.3.3 -uroot -p
B. 寫一個 php 的資料庫連線測試程式
<?php
$servername = "140.113.3.3";
$username = "root";
$password = "password";
$dbnamne = "mysql";
// Create connection
$conn = new mysqli($servername, $username, $password);
mysql_select_db($dbname,$conn);
// Check connection
if (!mysql_ping ($conn)) {
if ($conn->connect_error) {
die("連線失敗!!Connection failed: " . $conn->connect_error);
} else {
echo "連線成功! Connected successfully";
}
$conn->close();
} else {
echo "無法連線....";
}
?>
----------------------------------------------------
我遇到的問題
-1. iptables 已開啟、ping 測試OK
-2. mysql -h 測試方式可以連線,資料庫使用者可以正常存取 OK
-3. 已使用 sudo restorecon -R -v /var/www/html/new_folder 及設定 chown apache.apache -R new_folder 解決 apache 權限問題 OK
-4. php 測試連線失敗
-5. wordpress 套件的DB連線失敗
解決方式
-1. 暴力的關掉 selinux
$ getenforce
Enforcing
$ sudo setenforce 0
$ getenforce
Permissive
-2. 開啟 selinux 的 httpd_can_network_connect_db 權限
sudo setsebool -P httpd_can_network_connect_db=1
註:執行時會跑一小段時間
~End