應用直接中斷連接導致數據被鎖(生產故障)
- 這是一個由應用重啟連接直接而導致數據被鎖的問題。
- 系統大致結構

基本情況:
- 整個架構為了統一管理db連接,共享連接。
- 應用通過loadbalance連接db訪問層。
- db訪問層后端代理若干db。
- 應用到loadbalance以mysql協議通信。
- db訪問層到db以JDBC方式通信。
故障: 某些數據庫中的表數據相當長一段時間被鎖,導致應用某些場景失敗。
故障分析:應用開啟一個事務的set autocommit=0命令是從app-lb-db訪問層-db,期間如果某個事務還未執行完,而app強行中斷連接,就會導致app-lb的連接斷開,而lb并不直接斷開后端的連接,即lb-db訪問層-db的連接不會斷,從而導致db不會發生回滾操作。而且此事務對某些記錄加了鎖,于是就會發生某些數據被鎖。直到db訪問層檢測出該連接超過了idle時間才會關閉,并發送回滾命令給db。
解決問題:
① lb在前端連接關閉時要同時關閉同會話的后端連接,并且db訪問層要監聽lb的連接,一旦關閉則要做回滾操作。
②去掉lb,提供客戶端loadbalance,應用一旦關閉連接db訪問層也要關閉連接。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:- MYSQL主從庫不同步故障一例解決方法
- 線上MYSQL同步報錯故障處理方法總結(必看篇)
- MySQL下高可用故障轉移方案MHA的超級部署教程
- 一次MySQL慢查詢導致的故障
- MySQL復制的概述、安裝、故障、技巧、工具(火丁分享)
- 檢測MySQL的表的故障的方法
- mysql 無法聯接常見故障及原因分析
- MySQL故障切換筆記之應用無感知設計詳解