解決數據庫超時問題

     最近做測試,發現Mysql 過一段時間會無法連接,導致數據庫數據不一至,極其鬱悶。

    下面是轉一哥門的

    使用Connector/J連接MySQL數據庫,程序運行較長時間後就會報以下錯誤:

Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was ***  millisecond ago。

    其中錯誤還會提示你修改wait_timeout或是使用Connector/J的autoReconnect屬性避免該錯誤。

後來查了一些資料,才發現遇到這個問題的人還真不少,大部分都是使用連接池方式時纔會出現這個問題,短連接應該很難出現這個問題。這個問題的原因:

    MySQL服務器默認的“wait_timeout”是28800秒即8小時,意味着如果一個連接的空閒時間超過8個小時,MySQL將自動斷開該連接,而連接池卻認爲該連接還是有效的(因爲並未校驗連接的有效性),當應用申請使用該連接時,就會導致上面的報錯。

    1.按照錯誤的提示,可以在JDBC URL中使用autoReconnect屬性,實際測試時使用了autoReconnect=true& failOverReadOnly=false,不過並未起作用,使用的是5.1版本,可能真像網上所說的只對4之前的版本有效。

    2.沒辦法,只能修改MySQL的參數了,wait_timeout最大爲31536000即1年,在my.cnf中加入:

[mysqld]

wait_timeout=31536000

interactive_timeout=31536000

重啓生效,需要同時修改這兩個參數。

本文鏈接地址爲:http://zhangwei12hao.blog.163.com/blog/static/240030432011313111225150/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章