首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 8 小時空閒連接斷開問題徹底解決方案

     編輯:MySQL 綜合教學

MySQL 8 小時空閒連接斷開問題徹底解決方案

應用程式與 MySQL 建立連接後,若超過 8 小時無交互,MySQL 會主動斷開連接,導致後續訪問拋出異常(如「Communications link failure」)。本文從參數原理、修改方式、連接池配置三個維度給出完整解決方案。

一、核心參數原理

MySQL 兩個超時參數控制空閒斷連:

  • wait_timeout:非交互式連接(JDBC、連接池)的空閒超時,預設 28800 秒(8 小時)
  • interactive_timeout:交互式連接(mysql client)的空閒超時,預設同 28800 秒

關鍵點: 同一時間只有一個生效。JDBC 等非交互連接預設走 wait_timeout。

二、修改方案(三選一)

方案 1:運行時動態修改(立即生效,重啟失效)

SET GLOBAL wait_timeout = 86400;      -- 24 小時
SET GLOBAL interactive_timeout = 86400;

注意:設為 0 會被強制改為 1,不可永久禁用。

方案 2:配置文件永久生效(需重啟)

[mysqld]
wait_timeout = 86400
interactive_timeout = 86400

路徑:Linux /etc/my.cnf、Windows my.ini。修改後 systemctl restart mysqld 或重啟服務。

方案 3:應用層保活(推薦生產環境)

  • 連接池配置 testWhileIdle=true、timeBetweenEvictionRunsMillis、minEvictableIdleTimeMillis < wait_timeout
  • 定時任務(Quartz、Spring @Scheduled)每小時執行 SELECT 1
  • 驅動層 autoReconnect=true(不推薦單獨依賴)

三、驗證修改是否生效

SHOW VARIABLES LIKE '%timeout%';

確認 wait_timeout、interactive_timeout 顯示為新值。

四、最佳實踐建議

  1. MySQL 端設較大值(如 24h),應用端連接池設較小值(如 1h)定期驗證/回收
  2. 監控 Aborted_clients、Threads_connected 指標
  3. 避免長連接佔用資源,業務完成及時釋放

雙端協同治理,徹底杜斷「8 小時斷連」異常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved