天天看點

MySQL server has gone away報錯原因分析

在平時和開發的交流 以及 在論壇回答問題的或稱中會發現這個問題被問及的頻率非常高。 程式中報錯: MySQL server has gone away 是什麼意思? 如何避免? 是以,感覺有必要總結一下發生這個問題的原因。今天正好看到一篇外文blog總結的比較好,就翻譯過來了

判斷是否屬于這個原因的方法很簡單,執行以下指令,檢視mysql的運作時長

或者檢視MySQL的報錯日志,看看有沒有重新開機的資訊

如果uptime數值很大,表明mysql服務運作了很久了。說明最近服務沒有重新開機過。

如果日志沒有相關資訊,也表名mysql服務最近沒有重新開機過,可以繼續檢查下面幾項内容。

如果程式使用的是長連接配接,則這種情況的可能性會比較大。

即,某個長連接配接很久沒有新的請求發起,達到了server端的timeout,被server強行關閉。

此後再通過這個connection發起查詢的時候,就會報錯server has gone away

這種情況和情況2相似,隻是發起者是DBA或者其他job。發現有長時間的慢查詢執行kill xxx導緻。

當查詢的結果集超過 max_allowed_packet 也會出現這樣的報錯。定位方法是打出相關報錯的語句。

用select * into outfile 的方式導出到檔案,檢視檔案大小是否超過 max_allowed_packet ,如果超過則需要調整參數,或者優化語句。

修改參數:

繼續閱讀