MySql連線空閒8小時自動斷開引起的問題

2022-02-22 07:29:29 字數 921 閱讀 3487

根據查到的資料檢視mysql 有兩個引數,可以設定空閒連線的有效時長,分別是interactive_timeoutwait_timeout,可以在mysql配置檔案中設定。根據這一點,可以來進行排查了。

使用show variables like '%timeout%';命令查詢以上兩個引數的值,一查都是28800(單位是秒,剛好8小時)。

在mysql配置檔案中修改interactive_timeoutwait_timeout都為100,這樣連線100秒不使用就自動關閉了。

重啟mysql服務,開始向資料庫中插入資料,中間暫停3分鐘(確保空閒連線已經斷開),可以使用show status like 'threads%'命令來檢視當前的連線數,查詢結果中threads_connected即為當前連線數。

繼續向mysql插入資料,一看資料果然沒有儲存上,問題成功復現並找到原因。

檢視資料儲存部分**,發現**中有做斷開重連,但是判斷連線是否有效的部分寫的有問題,也沒有校驗mysql_query的返回值,所以資料儲存失敗的時候沒有產生日誌。

修改**,連線斷開後自動重連,校驗mysql_query的返回值並產生日誌,使每次資料庫操作結果都有記錄。注意:mysql c/c++ apimysql_query返回 0為操作成功,非0為操作失敗。

​ 這個問題完全是由於**寫的不嚴謹造成的,如果**寫的嚴謹,該校驗的地方都加上校驗,就算出現問題也能快速定位。吃一塹,長一智以後需要多注意,養成良好的**習慣。還有就是需要找時間系統的學習一下資料庫方面的內容,專案鍛鍊是能夠快速學習一些內容,但是都是用到哪部分學哪部分,不系統。還是需要自己多花時間系統的學。

mysql 空閒事務 mysql的空閒8小時問題

在spring中配置資料來源時,必須設定destroy method close 屬性,以便spring容器關閉時,資料來源能正常關閉。如果資料庫時mysql,如果資料來源配置不當,則可能發生經典的 8小時問題 原因是mysql在預設情況下如果發現乙個連線的空閒時間超過8小時,會在資料庫端自動關閉這...

MySQL空閒連線超過8小時如何解決

程式和mysql資料庫連線,超過8小時應用程式不去訪問資料庫,資料庫就會斷掉連線。再次訪問就會拋異常。通過druid連線池配置 validationquery select 1 用來檢測連線是否有效的sql,要求是乙個查詢語句。testwhileidle true 申請連線的時候檢測,如果空閒時間大...

Mysql連線 8小時問題

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