mysql超時設定的問題

2021-09-02 03:43:23 字數 1219 閱讀 5684

查了一下,原來是mysql超時設定的問題

如果連線閒置8小時 (8小時內沒有進行資料庫操作), mysql就會自動斷開連線, 要重啟tomcat. 

解決辦法:

一種. 如果不用hibernate的話, 則在 connection url中加引數: autoreconnect=true

jdbc.url=jdbc:mysql://ipaddress:3306/database?autoreconnect=true&autoreconnectforpools=true

二種。用hibernate的話, 加如下屬性: 

true

true

true

三。要是還用c3p0連線池: 10

0true

四。最不好的解決方案

使用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

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

檢視mysql設定超時 mysql設定查詢超時方法

文章來介紹了自定義mysql查詢超時的時間長度,下面我們來看看詳細的設定方法。首先,在libmysql中,是提供了mysql opt read timeout設定項的,並且libmysql中提供了設定相關設定項的api,如下 mysql options int stdcall mysql optio...

MySQL 超時問題

mysql預設連線超時時間為28800 也就是8個小時,如果八個小時沒有連線沒有進行操作就會自動斷掉,這樣就會導致有時服務還在執行,但是就是操作不了 既然知道問題了修改配置檔案,超時時間改為一年,就行了 vim etc my.cnf 然後在 mysqld 後面新增下面三句 character set...

C mobile UDP 開發設定超時問題

在mobile 6.5中使用upd 時需要設定超時 函式 sockethandler.setsocketoption socketoptionlevel.socket socketoptionname.receivetimeout,3000 丟擲異常如下 在 getsockopt 或 setsock...