2017-09-17 18 views
1

我使用的是基於SSL的mysqli連接, 所以使用的代碼如下:的mysqli通過SSL給予2003

$mdbconnection = mysqli_init(); 
$mdbconnection->ssl_set('/ssl/xyz.pem', '/ssl/abc-cert.pem', NULL, NULL, 'AES256-SHA');  
$mdbconnection->real_connect(SV_SERVER, SV_MYSQL_LOGIN, SV_MYSQL_PASSWORD, SV_MYSQL_DATABASE); 

我記下了,我不能夠MySQL服務器所有的時間進行連接。如果嘗試100次失敗3次,則爲 。

並獲得以下錯誤

echo($mdbconnection->connect_errno); 

印刷:

,如果我想沒有它{echo($mdbconnection->connect_errno);}總會1045給後第二次。

我想解決這個錯誤。
任何想法,將不勝感激。

回答

0

2003年的錯誤代碼是指連接不能建立: https://dev.mysql.com/doc/refman/5.5/en/error-messages-client.html

錯誤代碼1045是指連接的客戶端,但服務器拒絕的憑據(拒絕訪問): https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html

我會說如果你在每100次嘗試中得到2003錯誤代碼幾次,聽起來有些可能性可能是:

  1. 有些中間應用程序或硬件可能會將您的嘗試視爲可能的淹沒攻擊(DDoS),並且可能會攔截並阻止連接(如果您真的很快連接100次)

  2. 您可能會遇到一些網絡穩定性問題在客戶端。運行Wireshark並重新運行問題可能是值得的,以便捕獲問題並查看它是否顯示任何重要的內容(例如DNS失敗)。

  3. MySQL服務器可能會崩潰然後重新啓動。檢查你的服務器端MySQL錯誤日誌(https://dev.mysql.com/doc/refman/5.7/en/error-log.html)。實際上,每當你在MySQL中出現奇怪的行爲時,你都應該把它作爲第一步。

  4. 如果MySQL服務器日誌沒有顯示任何內容,請檢查您的系統日誌,特別是如果您要記錄阻塞的防火牆(iptables或其他任何正在使用的f/w)數據包,並搜索它們以查找您的客戶端知識產權問題發生的時間。

最後,如果你可以重現這個容易/快速地(例如使通過腳本100個連接,並看到它失敗),試圖消除SSL的方程和連接不使用SSL,看看它給你同樣的問題。如果它在沒有SSL的情況下完美運行,那麼在編譯MySQL包時可能會遇到SSL庫的問題。

您可能還想檢查是否有任何負載平衡,可能會使您的腳本連接到MySQL服務器的不同實例(這是不太可能的,但可以解釋您看到的症狀一臺服務器關閉,下一臺沒有您提供的憑據)