Mysql連接超時解決方案1: 修改默認超時時間

MySQL數據庫一般默認的連接超時time爲28800s(即8小時),超過8h,數據庫會斷開這個連接。後臺程序出現類似“org.hibernate.exception.JDBCConnectionException: could not extract ResultSet”錯誤,或者如下圖所示異常。

在進行大規模的線程事務操作時,一個連接會一直等待執行,這時候如果數據庫的超時時間設置的過短,就可能會出現Mysql數據連接自動被釋放,影響後面對數據庫的操作。

當然MySQL連接設置的大小,要根據需求場景進行設置,wait_timeout過大也有弊端,其體現就是MySQL裏大量的SLEEP進程無法及時釋放,拖累系統性能,不過也不能把這個指設置的過小,否則你可能會遭遇到“mysql has gone away”之類的問題。

所以需要根據自己項目業務場景,進行適當的設置超時時間。

在mysql命令提示符下執行以下命令即可:

SHOW GLOBAL VARIABLES LIKE '%timeout%';

方案1.在mysql命令提示符執行以下命令即可(臨時方法,重啓MySQL服務器會失效,恢復默認值)

SET GLOBAL wait_timeout=259200;
SET GLOBAL interactive_timeout=259200;

方案2.修改JDBC連接url(不推薦)

在mysql4.x版本,可添加 autoReconnect=true這個參數,即能解決mysql超時重連問題。但在mysql5以上版本,autoReconnect=true這個設置是無效的;

jdbc:mysql://hostaddress:3306/testDB?autoReconnect=true

方案3.修改mysql的配置文件(慎用)

此方法要謹慎使用,如果這個值設置的太大,將導致空閒連接過多,白白消耗內存;如果設置的太小,就失去了mysql超時自動重連的作用。到底需要設置多大,難以界定。

  • Windows下,配置文件路徑爲MySQL安裝的根目錄中,my.ini

打開my.ini文件,添加如下配置:

interactive_timeout=2592000
wait_timeout=2592000
  • Linux系統下,配置文件爲路徑/etc/my.cnf(或/etc/mysql/my.cnf)

在屬性組 [mysqld] 下面添加參數(配置超時時間爲30天)如下:

interactive_timeout=2592000
wait_timeout=2592000

其實以上三種方案都只是臨時的,並沒有有效地解決mysql超時重連的問題。要徹底解決這個問題,推薦大家閱讀本系列後續兩篇文章:
1、Mysql連接超時解決方案2: 配置Proxool連接池

2、Mysql超時重連解決方案3: 配置c3p0連接池

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