應用程序和數據庫建立連接,如果超過 wait_timeout (默認28000秒8小時) 應用程序不去訪問數據庫,連接一直處于空閑狀態,那么MySQL就會自動關閉該連接 ,如果再在該連接上執行查詢操作,就會發生MySQL server has gone away錯誤。
wait_timeout
服務器在關閉連接之前在一個連接上等待行動的秒數,默認數值是28800,即如果沒有事情發生,服務器在 8個小時后關閉連接。
嘗試解決辦法:
<1>.這是由于超時時間 wait_timeout 過短導致,所以修改它的值即可。打開MySQL安裝目錄下的 mysql.ini,在文件中添加一行配置項 wait_timeout=1000000 即可。(默認沒有此選項,需要手動的添加)
該方法可行。
<2>.在代碼中設置自動重連選項,
m_connection.set_option( new mysqlpp::ReconnectOption(true) );
然后在發生 MySQL server has gone away錯誤 的時候 調用 Connection::ping()方法,該函數會檢查對服務器的連接是否正在工作,必要時重新連接,但經過測試后發現,這種方法不起作用。