2012-10-10 25 views
0

我有一個連接遠程數據庫服務器的應用程序。如何快速檢測mysql服務器停機狀態

如果MySQL服務器停止的原因,之後成功地星星,我的應用程序不能快速檢測服務器狀態。需要將近20秒才能重新連接到數據庫服務器。所以我的gui凍結了。我不想要一個GUI凍結20秒

到目前爲止,我試過

  • mysql_ping
  • mysql_real_connect

功能

  • MYSQL_OPT_RECONNECT
  • MYSQL_OPT_CONNECT_T IMEOUT

    選項

我的環境是不是多線程。那麼 如何做一個更快的檢測?

+0

當它凍結?不活動或查詢掛起? –

+2

將查詢放在單獨的進程中,並使用IPC?您的系統無法通過線程的原因是什麼?使用GUI所有現代的系統通常有 –

+0

期間重複嘗試連接 – onurozcelik

回答

0

你可以嘗試遠程登錄到MySQL端口(通常是3306)。如果連接被拒絕,mysql不會收聽。

工作。

[email protected]:~# telnet localhost 3306 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
L 
5.6.4-m7)#m#_8:W�hP5YBzaXs[MOmysql_native_password 

向下。

[email protected]:~# telnet localhost 3306 
Trying 127.0.0.1... 
telnet: Unable to connect to remote host: Connection refused 

被拒絕的信息幾乎是即時的。

+2

這可能還需要時間,具體取決於服務器的位置。特別是如果網線被移除。 –

3

如果你同步做網絡,準備凍結。出於這個原因,在單獨的線程中進行數據操作是有意義的。

+0

我的情況沒有數據操作。我只想檢查mysql服務器狀態 – onurozcelik

+0

正如我對約阿希姆所說的:使用IPC或多線程解決了gui freeze問題,但不能解決更快的檢測問題。 – onurozcelik

+0

延遲的總和爲:調用MySQL庫準備請求,TCP堆棧延遲,網絡延遲,MySQL服務器再次TCP堆棧,MySQL解析請求時延遲,TCP堆棧在迴應時,網絡延遲再次,在您的計算機的TCP堆棧,庫函數驗證並將值返回給您的應用程序。除非MySQL服務器在重負載下卡住,否則網絡延遲佔據整體延遲的主導地位。 –

0

正如已經被他人討論,我不會談論使用多個線程或進程。你可以連接到你的MySQL服務器上的TCP?這樣在大多數情況下,您將立即收到一個tcp fin以指示關閉連接,但有時甚至可能不是這樣。但是,大多數強大的應用程序做得很好。

shell> mysql --protocol=TCP 

MYSQL how to specify protocol

如果服務器不接受它,我相信它可以從配置設置來啓用。

然而,這並沒有解決方案,如服務器突然下車網絡,或您的客戶端的連接被中斷等