MySQL5.6 Waiting for Commit Lock

mysql  Bug#19843808 自动修复记录

 

MySQL5.6和Xtrabackup之间存在一个bug,这个bug在5.6.23中已经修复。

 

Xtrabackup备份的时候执行flushs tables with read lock和show slave status会有可能和SQL Thread形成死锁,导致SQL Thread一直被卡主,STOP也没有用,Kill我们测试会丢失数据,只有Restart Server才行。

原因是SQL Thread的DML操作完成之后,持有rli->data_lock锁,commit的时候等待DML_COMMIT,而flush tables with read lock之后执行的show slave status会等待rli->data_lock;修复方法是rli->data_lock锁周期只在DML操作期间持有。

 

第一次遇到这个问题,开始还以为是zabbix出现问题,一把叫来了监控,直接说,主业务库中zabbix用户大量执行show slave status 导致数据库卡死。后面就发现监控说话一直抖。好吧,不吓人了,开始解决问题,言归正传:

 

1  show processlist  找到waiting for commit lock 的线程号,然后直接kill。这个是罪魁祸首,虽然他也是无辜的。

2. 执行上面一步后,其实sql线程已经挂了,这里需要stop slave

3. start slave

4.结束

你可能感兴趣的:(MYSQL)