MySQL複製剛剛觸發了一個bug,該bug的觸發條件是slave上Xtrabackup備份的時候執行flushs tables with read lock和show slave status有可能和SQL Thread造成死鎖。php
該bug在MySQL5.6.23上已修復, https://bugs.mysql.com/bug.php?id=70307html
15:24分開始收到報警,這臺slave上發生阻塞,併發線程升高,下面描述下死鎖和阻塞是如何造成的mysql
一、slave上sql thread執行SQL,還未提交sql
這是當時抓取到的事務信息,63就是sql thread,活動的事務運行了479S,能夠計算出這個事務開始的時間約在2018-06-08 15:15:42服務器
二、Xtrabackup進程執行flush tables with read lock併發
三、sql thread執行commit,被blocked,Waiting for commit lock (holding rli->data_lock, waiting for MDL_COMMIT)url
四、Xtrabackup進程執行show slave status被block (holding LOCK_active_mi and mi->data_lock, waiting for rli->data_lock),造成死鎖.net
五、其餘大部分事務都在等待Waiting for global read lock,造成阻塞,併發線程數升高線程
六、kill掉sql thread後,阻塞消失3d