擴展閲讀wait_timeout 是mysql在關閉一個非交互的連接之前所要等待的秒數,其取值範圍為1-2147483(Windows),1-31536000(linux),默認值28800。
1. 查詢當前mysql連接等待時間(wait_timeout)
show variables like '%timeout%';
如果前期沒有設置wait_timeout的時間默認時間28800
2. 在數據庫配置文件內加上wait_timeout設置
mysql 5以上的版本修改my.cnf這個文件(/etc/my.cnf 文件所在位置) 找到[mysqld]後面加上如下兩行代碼
wait_timeout=388000
interactive_timeout=388000
3.重啓mysql服務在次執行show variables like '%timeout%';命令查看wait_timeout連接等待時間
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 服務。
- 解決步驟:
- 修改配置文件:
[mysqld] wait_timeout=3600。 - 重啓 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 服務。