2010-05-07 59 views
2

我有一個每分鐘運行的cron作業。每隔一段時間,而cron的失敗,錯誤:如何在「MySQL服務器已經消失」錯誤後退出?

MySQL server has gone away

的問題是,這個錯誤下面所有的查詢被執行,有時可能會產生不良的結果。

那麼如何檢測到錯誤發生並退出其餘代碼的執行?

或者任何有關如何解決錯誤的提示將是偉大的。

+0

*(相關)* http://blog.taragana.com/index.php/archive/mysql-tip-mysql-server-has-gone-使用遠程或丟失連接到服務器的查詢修復/ – Gordon 2010-05-08 09:30:09

回答

1

錯誤似乎是由於連接到未響應的服務器,或者您正在使用的超時連接而導致的。

您應該能夠從客戶端API獲取某種錯誤代碼,並查看連接是否仍然有效。

如果失敗,可以拋出異常,然後停止程序。

$query_id = mysqli_query($conn_id, $query); 
if(!$query_id) 
{ 
    // throw an exception 
    throw new DatabaseQueryException("An error occurred accessing the database.\nError: \n".mysqli_error($conn_id)); 
} 

是什麼,我在我的網站

+0

你可以給一個小的代碼片段? – Yeti 2010-05-07 18:45:13

+0

@Lost_in_code你去了,我添加了一個非常簡單的。你顯然需要用自定義的替換'DatabaseQueryException'(或者''DatabaseQueryException extends Exception {}') – 2010-05-07 18:47:47

0

快速修復是關閉持久的mysql連接。一個更好的解決方法是捕獲該特定錯誤並調用重新連接(PDO::__construct),直到獲得具有實時連接的即時消息。我發現當服務器電腦進入睡眠狀態或者mysql連接超時時間過短時,我經常會遇到這個錯誤。

+0

如何關閉持久的mysql連接? – Yeti 2010-05-07 18:44:31

+0

你使用的是PDO還是mysql_ *或mysqli? – 2010-05-07 18:49:28

+0

呃,不太確定。我不是一個真正的php/mysql傢伙,而是使用EZSQL來處理SQL。 – Yeti 2010-05-07 18:55:12