mysql - Communications link failure的解決辦法


com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Communications link failure Last packet sent to the server was X ms ago

使用Connector/J連接MySQL數據庫,程序運行較長時間后就會報這個錯誤,有時錯誤還會提示你修改wait_timeout或是使用Connector/J的autoReconnect屬性避免該錯誤。

錯誤的原因:

    MySQL服務在長時間不連接之后斷開了,斷開之后的首次請求會拋出這個異常

原因分析:

    1、既然是長時間不連接之后斷開了,那這個時間應該是可以設定的,或者現在mysql用的還是默認的值

    2、如何查看現在的時間值,以及如何修改我的mysql是安裝在windows系統上,就以這個說明,若是在開發中mysql安裝在linux上,操作步驟幾乎一樣

查看默認值:

    1、DOC命令啟動mysql:mysql -hlocalhost -u用戶名 -p密碼

    2、查看和連接mysql時間有關的系統變量:show variables like '%timeout%'

1)interactive_timeout:
參數含義:服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。
參數默認值:28800秒(8小時)

(2)wait_timeout:
參數含義:服務器關閉非交互連接之前等待活動的秒數。
在線程啟動時,根據全局wait_timeout值或全局interactive_timeout值初始化會話wait_timeout值,取決於客戶端類型(由mysql_real_connect()

的連接選項CLIENT_INTERACTIVE定義)。
參數默認值:28800秒(8小時)

wait_timeout:超時控制的變量,其時間為長度為28800s,就是8個小時,在8個小時之后會斷開,需要重新連接,可以在訪問的url中使用

jdbc.url=jdbc:mysql://localhost:3306/nd?autoReconnect=true來是連接自動恢復,但這是mysql4及其以下版本使用,在mysql5中已經無效,必須調整系統變量來控制

Mysql5中對wait_timeout和interactive_timeout有兩個說明:interactive_timeout:服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義為在

mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。又見wait_timeout 

   wait_timeout:服務器關閉非交互連接之前等待活動的秒數。在線程啟動時,根據全局wait_timeout值或全局interactive_timeout值初始化

會話wait_timeout值,取決於客戶端類型(由mysql_real_connect()的連接選項CLIENT_INTERACTIVE定義),又見interactive_timeout 

結論:

    若要修改的話,需要同時修改這兩個變量

    變量值大小確定:修改的話,如果變量值有范圍大小限制,肯定不要超過變量的最大范圍值,查資料知:在windows環境中:1-2147483s,

    Linux環境中:1-31536000s

解決方案:

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

[mysqld] 
wait_timeout=31536000 
interactive_timeout=31536000 
重啟生效,需要同時修改這兩個參數。

如果你使用的是hibernate,需要修改連接池的設置,因為 hibernate自帶的連接池性能很差,可以使用C3P0,然后配置: 
test 

c3p0將建一張名為Test的空表,並使用其自帶的查詢語句進行測試。如果定義了這個參數那么 屬性preferredTestQuery將被忽略。你不能在這張Test表上進行任何操 作,它將只供c3p0測試使用。

轉載地址:

https://blog.csdn.net/zouxucong/article/details/53924414

https://blog.csdn.net/Amen_Wu/article/details/55292248


免責聲明!

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



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