| 維度 | 交互式連接 | 非交互式連接 |
|---|---|---|
| 典型場景 | MySQL Client 黑窗口、手動操作 | 應用程式(Java/Go/Python)通過驅動/連接池 |
| 協議 | TCP/IP | TCP/IP (JDBC、ODBC、連接池) |
| 超時參數 | interactive_timeout | wait_timeout |
| 默認值 | 28800 秒 (8 小時) | 28800 秒 (8 小時) |
CLIENT_INTERACTIVE 標誌)決定會話級 wait_timeout 初始值wait_timeout = 全局 interactive_timeoutwait_timeout = 全局 wait_timeoutmysql_real_connect() 內部根據調用參數設定 CLIENT_INTERACTIVE
-- 查看全局值
SHOW VARIABLES LIKE '%timeout%';
-- 修改當前會話(斷開失效)
SET SESSION wait_timeout = 3600;
-- 修改全局(需寫入配置文件並重啟生效)
-- my.cnf [mysqld] 區塊
wait_timeout = 3600
interactive_timeout = 3600

應用啟動後閒置超過 8 小時,再次請求拋出:
Communications link failure due to underlying exception
wait_timeout,MySQL 主動 KILL 掉這些連接
true
true
300
SELECT 1 -- 輕量級驗證查詢
C3P0TestTable
| 策略 | 觸發時機 | 性能影響 | 推薦度 |
|---|---|---|---|
| testConnectionOnCheckout | 每次借用 | 高(每請求多一次 RTT) | ⭐ |
| testConnectionOnCheckin | 每次歸還 | 中 | ⭐⭐ |
| idleConnectionTestPeriod | 後台定時 | 低(異步、批量) | ⭐⭐⭐⭐⭐ |
idleConnectionTestPeriod 更穩健將業務邏輯包裝在@Transactional中,一個 HTTP 請求對應一個事務,連接只在事務開始時借用、結束時歸還。
配合testConnectionOnCheckin或idleConnectionTestPeriod,大幅減少驗證開銷。
wait_timeout(建議 ≥ 30 分鐘)idleConnectionTestPeriod)