應用程式與 MySQL 建立連接後,若超過 8 小時無交互,MySQL 會主動斷開連接,導致後續訪問拋出異常(如「Communications link failure」)。本文從參數原理、修改方式、連接池配置三個維度給出完整解決方案。
MySQL 兩個超時參數控制空閒斷連:
關鍵點: 同一時間只有一個生效。JDBC 等非交互連接預設走 wait_timeout。
SET GLOBAL wait_timeout = 86400; -- 24 小時
SET GLOBAL interactive_timeout = 86400;
注意:設為 0 會被強制改為 1,不可永久禁用。
[mysqld]
wait_timeout = 86400
interactive_timeout = 86400
路徑:Linux /etc/my.cnf、Windows my.ini。修改後 systemctl restart mysqld 或重啟服務。
testWhileIdle=true、timeBetweenEvictionRunsMillis、minEvictableIdleTimeMillis < wait_timeoutSELECT 1autoReconnect=true(不推薦單獨依賴)SHOW VARIABLES LIKE '%timeout%';
確認 wait_timeout、interactive_timeout 顯示為新值。
Aborted_clients、Threads_connected 指標雙端協同治理,徹底杜斷「8 小時斷連」異常。