Communications link failure的解決辦法


 

使用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將自動斷開該連接,而連接池卻認為該連接還是有效的(因為並未校驗連接的有效性),當應用申請使用該連接時,就會導致上面的報錯。

修改MySQL的參數,wait_timeout最大為31536000即1年,在my.cnf中加入:

[mysqld]

wait_timeout=31536000

interactive_timeout=31536000

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

================================================================================

從數據庫方面解決org.hibernate.exception.JDBCConnectionException:could not execute query

或者是報錯:com.MySQL.jdbc.exceptions.jdbc4.CommunicationsException: Communicationslink failure

http://blog.csdn.net/xingyunpi/article/details/7216016

 

網站部署好之后是可以好好運行的,但是,總是隔一段時間就會報org.hibernate.exception.JDBCConnectionException:could not executequery錯誤,在網上查了一下說是因為mysql數據庫默認連接時間的問題,mysql默認連接時間是8個小時,所以,一般如果訪問不多的網站來說,如果隔8個小時沒有與數據庫的連接,那就會報這個錯誤.

查了一些資料,有兩大方向的解決方案吧:

一. 修改數據庫設置

步驟一:進入數據庫,看一下wait_timeout 的值:

Show global variables like ‘wait_timeout’;

28800秒就是8小時

步驟二:修改wait_timeout的值:

Set global  wait_timeout=1814400;

看一下變了沒有:

步驟三:最后重啟tomcat.

這種方法有一個局限,那就是這樣設置的話,總有一個時間限制.所以,最好使用下面的方法.

二. 使用數據庫連接池.

這個方法還沒有測試成功.但是這個應該是最好的解決方法.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM