MySQL複製slave伺服器死鎖案例
阿新 • • 發佈:2018-11-07
原文:
MySQL複製slave伺服器死鎖案例
MySQL複製剛剛觸發了一個bug,該bug的觸發條件是slave上Xtrabackup備份的時候執行flushs tables with read lock和show slave status有可能和SQL Thread形成死鎖。
該bug在MySQL5.6.23上已修復, https://bugs.mysql.com/bug.php?id=70307
15:24分開始收到報警,這臺slave上發生阻塞,併發執行緒升高,下面描述下死鎖和阻塞是如何形成的
1、slave上sql thread執行SQL,還未提交
這是當時抓取到的事務資訊,63就是sql thread,活動的事務運行了479S,可以計算出這個事務開始的時間約在2018-06-08 15:15:42
2、Xtrabackup程序執行flush tables with read lock
3、sql thread執行commit,被blocked,Waiting for commit lock (holding rli->data_lock, waiting for MDL_COMMIT)
4、Xtrabackup程序執行show slave status被block (holding LOCK_active_mi and mi->data_lock, waiting for rli->data_lock),形成死鎖
5、其他大部分事務都在等待Waiting for global read lock,形成阻塞,併發執行緒數升高
6、kill掉sql thread後,阻塞消失