簡體   English   中英

遠程服務器SQLSTATE [HY000] [2002]連接超時

[英]Remote Server SQLSTATE[HY000] [2002] Connection timed out

當使用php從運行在不同IP(例如888.888.888.888 )上的服務器連接到遠程MySQL數據庫(例如999.999.999.999 )時,出現此錯誤:

SQLSTATE [HY000] [2002]連接超時

這是我嘗試或研究的內容:

  • 在遠程服務器上,我允許來自“本地服務器”( 888.888.888.88 )的連接,但這沒有幫助。
  • 一些答案建議將連接詳細信息從localhost更改為127.0.0.1 ,但這與我無關,因為我們正在連接到遠程數據庫。
  • 我沒有幾次運氣就重啟了服務器(帶有cPanel CentOS)。

任何想法?

因為我在cPanel上遇到了類似的問題,而找到的答案都沒有解決該問題,所以重新提出了這個問題。

解決此問題的過程分為三個步驟。 對我來說,第三點很關鍵。

1.憑證

我們假設您已經具有訪問數據庫的正確憑據。 這些可以測試:

  • 如果您具有直接訪問權限,則在數據庫本地。
  • 不是給您帶來麻煩的IP(您的CentOS服務器)遠程獲得。 例如,您可以使用HeidiSQL(Win)或Sequel Pro(OSX)等程序進行健全性檢查。

您還可以從麻煩的原始服務器和另一台服務器上運行如下所示的php腳本。 如果只有服務器拒絕連接,則說明您沒有憑據問題。

<?php
try {
    $db = new PDO('mysql:host=999.999.999.999;dbname=Database_Name_Goes_Here;charset=utf8',
            'User_Goes_Here', 'Password_Goes_Here',
            array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )
            );
    echo "We connected.";
} catch (PDOException $e) {
    print($e->getMessage());
    }
?>              

2.遠程訪問:允許您的IP

大多數答案都指出,在遠程服務器中,必須允許來自IP的連接。 您已經做到了。

對於其他人,如果您還使用cPanel像OP,可以在添加IP Remote MySQL的部分cPanel

3.防火牆

這是我找到的答案中缺少的要素。 畢竟,難道錯誤消息可能是正確的,即連接只是超時了嗎?

這表明您的服務器已禁用外部連接。 我調查了php.ini中是否存在任何可能沖突的參數,然后轉向了防火牆,防火牆提供了答案。

我不知道您正在使用哪個防火牆。 這是使用csf防火牆的用戶的處理方法,這在cPanel / WHM安裝中很常見。 假設您具有SSH訪問權限,請輸入以下內容,其中IP是遠程數據庫服務器的IP:

csf -a 999.999.999.999 'allow connection to XYZ database server'

  • 如果您有其他防火牆,請參閱文檔。
  • 如果您既沒有ssh也沒有WHM(或同等權限)訪問,請要求您的Web主機為您取消阻止遠程IP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM