mysql的8小時重連問題

2021-06-28 14:04:31 字數 1522 閱讀 6842

如果你沒有修改過mysql的配置,預設情況下,

wait_timeout

的初始值是28800。

wait_timeout 過大有弊端,其體現就是mysql裡大量的sleep程序無法及時釋放,拖累系統效能,不過也不能把這個指設定的過小,否則你可能會遭遇到「mysql has gone away」之類的問題,通常來說,我覺得把wait_timeout設定為10是個不錯的選擇,但某些情況下可能也會出問題,比如說有乙個cron指令碼, 其中兩次sql查詢的間隔時間大於10秒的話,那麼這個設定就有問題了(當然,這也不是不能解決的問題,你可以在程式裡時不時mysql_ping一下, 以便伺服器知道你還活著,重新計算wait_timeout時間):

# vi /etc/my.cnf

[mysqld]

wait_timeout=10

# /etc/init.d/mysql restart

不過這個方法太生硬了,線上服務重啟無論如何都應該盡可能避免,看看如何在mysql命令列裡通過

set來設定:

mysql> set global wait_timeout=10;

mysql> show global variables like 'wait_timeout';

+----------------------------+-------+

| variable_name              | value |

+----------------------------+-------+

| wait_timeout               | 10       |

+----------------------------+-------+

這 裡乙個容易把人搞蒙的地方是如果查詢時使用的是show variables的話,會發現設定好像並沒有生效,這是因為單純使用show variables的話就等同於使用的是show session variables,查詢的是會話變數,只有使用show global variables,查詢的才是全域性變數。

網路上很多人都抱怨說他們set global之後使用show variables查詢沒有發現改變,原因就在於混淆了會話變數和全域性變數,如果僅僅想修改會話變數的話,可以使用類似set wait_timeout=10;或者set session wait_timeout=10;這樣的語法。

另乙個值得注意的是會話變數wait_timeout初始化的問題,這一點在手冊裡已經明確指出了,我就直接拷貝了:

on thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client (as defined by the client_interactive connect option to mysql_real_connect()).

MySql的8小時問題

如果連線閒置8小時 8小時內沒有進行資料庫操作 mysql就會自動斷開連線,要重啟tomcat。解決辦法 1.使用hibernate c3p0連線池 新增如下配置即可 org.hibernate.dialect.mysqldialect com.mysql.jdbc.driver jdbc mysq...

Mysql連線 8小時問題

mysql預設設定當乙個連線的空閒時間超過8h,mysql就會自動斷開該連線,而連線池仍認為該連線有效。此情況下,若客戶端向連線池請求連線的話,連線池就會把已經失效的連線返回給客戶端,此時客戶端使用失效連線時即丟擲異常。解決方法 配置 spring.datasource.validation que...

mysql 8小時問題

假設你的資料庫是mysql,如果資料來源配置不當,將可能發生經典的 8小時問題 原因是mysql在預設情況下,如果發現乙個連線的空閒時間超過8小時,將會在資料庫端自動關閉這個連線。而資料來源並不知道這個連線已經關閉了,當它將這個無用的連線返回給某個dao時,dao就會報無法獲取connection異...