2015-05-17 82 views
0

安裝Drupal 7時出現以下錯誤:Drupal安裝無法連接到MySQL服務器,但它在那裏

無法連接到您的數據庫服務器。服務器報告以下消息:SQLSTATE [HY000] [2003]無法連接到'myservername'(13)上的MySQL服務器。

我在一臺Windows服務器上運行MySQL,在另一臺linux上運行httpd。 MySQL正在運行得很好,在httpd服務器上我可以連接就好到MySQL,如下所示:

的mysql -h DBSERVER -p --port = 3001 -u的Drupal

同樣地,我可以運行的mysqli和pdo和它的連接也很好從我的httpd:

<?php 
$servername = "dbserver"; 
$username = "drupal"; 
$password = "xxx"; 
$dbname = "drupal"; 
$port = 3001; 

$conn = new mysqli($servername, $username, $password, $dbname, $port); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
echo "Connected successfully"; 
$conn->close(); 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname;port=$port", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo "Connection failed: " . $e->getMessage(); 
    } 
$conn=null; 
?> 

因此,我的網絡服務器或PHP或MySQL沒有錯。只是通過安裝,它失敗了。我一直在進階,並輸入了所有正確的細節。

有什麼想法?我看,並沒有apache日誌,我無法弄清楚如何增加安裝過程中的錯誤報告或確切地找到它在做數據庫連接檢查..

謝謝。

回答

1

你能確認你有dbserver的ip映射嗎? 轉到終端並鍵入:「ping dbserver」,並請發佈結果。

編輯:這種情況是由Linux發行版的安全策略引起的,其中apache服務器設置爲不允許它連接到遠程mysql實例。爲了解決這種情況,請到終端並輸入sudo setenforce 0,這樣linux就不會執行這種嚴格的網絡服務器行爲。

+0

是的,這有效。在我的mysqli和pdo代碼中,我使用的是服務器名稱,這很好。我也試過IP地址,並失敗。正如我所說,它從Web服務器上的代碼運行,而不是從Drupal安裝。我懷疑這是什麼,但我追溯方法'getConnection',對於關鍵和目標變量,他們都是'默認',我本來以爲他們會是別的...... –

+0

簡單地說,我不認爲它得到那麼遠。在我的測試代碼中,大約需要5秒鐘才能完成代碼,但只要按一下按鈕,它就會返回一個失敗的Drupal安裝程序。 –

+0

好吧我現在要檢查服務。請在終端上使用:'service --status-all'並顯示mysql條目。 – biozes

0

假設你使用RHEL/CentOS的,我找到了答案,從@alexbilbiehere

setsebool -P httpd_can_network_connect_db 1 

the RHEL documentation

禁用時,這個布爾防止HTTP腳本和模塊從啓動與數據庫服務器的連接。啓用此布爾值以允許此訪問。