擴展閲讀wait_timeout 是mysql在關閉一個非交互的連接之前所要等待的秒數,其取值範圍為1-2147483(Windows),1-31536000(linux),默認值28800。

1. 查詢當前mysql連接等待時間(wait_timeout)
show variables like '%timeout%';

mysql 設置wait_timeout連接等待時間_mysql

如果前期沒有設置wait_timeout的時間默認時間28800

2. 在數據庫配置文件內加上wait_timeout設置

mysql 5以上的版本修改my.cnf這個文件(/etc/my.cnf 文件所在位置) 找到[mysqld]後面加上如下兩行代碼

wait_timeout=388000
interactive_timeout=388000

mysql 設置wait_timeout連接等待時間_配置文件_02

3.重啓mysql服務在次執行show variables like '%timeout%';命令查看wait_timeout連接等待時間

mysql 設置wait_timeout連接等待時間_mysql_03

MySQL wait_timeout 設置常見問題及注意事項

1. 問題原因分析

  • 默認值問題wait_timeout 默認值為 28800 秒(8 小時),若連接空閒超過此時間,MySQL 會主動關閉連接。
  • 連接類型差異wait_timeout 主要影響非交互式連接(如腳本或應用連接),交互式連接(如命令行)由 interactive_timeout 控制(默認同為 28800 秒)。
  • 配置文件優先:配置文件設置優先於動態修改,動態修改僅對當前會話生效。

2. 常見問題及解決方案

2.1 連接超時導致應用崩潰
  • 現象:應用長時間無操作後報錯 Lost connection to MySQL server 或 CommunicationsException
  • 解決方案
  • 調整 wait_timeout:在配置文件(如 my.cnf)中設置 wait_timeout=3600(1 小時)。
  • 啓用連接池心跳:配置連接池心跳機制(如 C3P0 的 idleConnectionTestPeriod)定期刷新連接。
2.2 配置文件修改無效
  • 原因:修改後未重啓 MySQL 服務。
  • 解決步驟
  1. 修改配置文件:[mysqld] wait_timeout=3600
  2. 重啓 MySQL:sudo systemctl restart mysql
2.3 會話變量與全局變量混淆
  • 現象:動態修改後 show variables 未顯示變化。
  • 解決方法:使用 show global variables like 'wait_timeout' 查看全局值。

3. 注意事項

  • 最小值限制wait_timeout 最小值為 1 秒,最大值受限於系統架構。
  • 安全風險:過長的 wait_timeout 可能導致資源浪費,建議根據業務需求合理設置。
  • 監控建議:使用雲平台監控工具實時查看連接狀態,避免因超時導致的業務中斷。

4. 最佳實踐

  • 配置文件優先:通過配置文件永久生效,避免重啓後失效。
  • 結合連接池:配置連接池的 autoReconnect 和心跳機制,提升穩定性。
  • 定期檢查:通過 show global status like 'Aborted_clients' 監控連接斷開次數。

示例配置:在 my.cnf 中添加

[mysqld] wait_timeout=3600 interactive_timeout=3600

然後重啓 MySQL 服務。