mysql interactive_timeout 設定不當一例

babyyellow發表於2021-12-07




客戶資料庫報錯 : 



[code]

2021-12-07T06:44:49.994568+08:00 131299 [Note] Aborted connection 131299 to db: '' user: 'xxx' host: '10.xxxx16' (Got timeout reading communication packets)


[/code]



資料庫日誌報錯: 


show  global  variables  like '%timeout%' ; 


| interactive_timeout         | 1800     |

 wait_timeout                | 1800  



應用連線池 設定的  idle-timeout   也是 1800  



那麼問題來了.


如果兩邊時間不一致.   一定會有點差距的. 



當兩邊 做心跳檢測的是時候,   最後一次心跳檢測還沒有完成. 


對方的 timeout 來了.  然後直接關閉了當前連結了. 



然後  自己這段 還在傻呵呵的等著對方   傳送資料包.  


然後 就超時了. 


應用 跟  資料庫端 都會有這個錯誤. 



這種情況下應該怎麼處置呢 ? 



除非非常繁忙的系統.  


我們一般建議  資料庫的這個時間, 設定的長一點. 


應用的這個時間, 設定的短一點. 


一般 應用連線池的 idle-timeout  不要超過 5分鐘.  



並且  應用的 idle-timeout   一定要小於資料庫的 timeout 設定. 


否則 出現這個錯誤,只是早晚跟機率問題了.  



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-2846173/,如需轉載,請註明出處,否則將追究法律責任。

相關文章