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.结束

后面我会把这个过程写成自动化修复脚本,后面再分享,不过在分享后,上面的废话就会删除。哈哈哈哈。暂时就自己看看,做做记录,不公开了。

时间: 2024-10-09 15:13:11

MySQL5.6 Waiting for Commit Lock的相关文章

MySQL5.6.12 Waiting for commit lock导致从库hang住的问题剖析

nagios报警,线上一台从库检测不到slave状态,于是远程上去查看问题: 1,show slave status\G卡住: Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show slave status\G show slave status卡住了,动弹不了,这种情况还是第一次遇到. 2,看w负载无压力: [root@tmp3_72 ~]# w 13:23:31 u

metadata lock

1 锁等待的例子 session 1: 执行查询但不提交 mysql> begin; mysql> select * from test where c2 = '1'; session 2: 执行ddl发生等待 mysql> alter table test drop index idx5; 查看show processlist; | 20487 | mytest | ****:35986 | test123 | Sleep | 3799 | | NULL || 20501 | myte

MySQL复制slave服务器死锁案例

原文: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上发生阻塞,并发线程升高,下面描述下死锁和阻塞是如何形成

MySQL Flush导致的等待问题

--MySQL Flush导致的等待问题 -------------------------------2014/07/13 前言 在实际生产环境中有时会发现大量的sql语句处于waiting for table.. 状态中,有时候看起来会让人觉得困惑,本文将讲解此状态产生的原因及解决办法. 正文 本文中用到了lock table来模拟实际情况, 首先介绍一个lock tables需要注意的事项,如果在一个session中使用了lock tables,那么在此session中将只能访问获取到lo

MySQL - Show Processlist 整理(转)

原文来源:MySQL 5.5 Reference Manual 部分翻译取自:<MySQL_5.1中文参考手册> 转载请注明原文链接http://www.cnblogs.com/lenagt/archive/2012/06/06/2538201.html 谢谢. ------------------------------------------------------------------------------------------ Show processlist 在Show pro

MySQL SHOW PROCESSLIST 状态详解

官方手册:https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html 8.14.2 General Thread States The following list describes thread State values that are associated withgeneral query processing and not more specialized activities such asreplicat

MySQL - Show Processlist 整理

System lock Show processlist 在Show processlist输出中的Status项: 5.1手册中没有的或者翻译有问题的,都附带5.5原文说明: After create This occurs when the thread creates a table (including internal temporary tables), at the end of the function that creates the table. This state is

【MySQL】线程状态详解

前言:我们常用 show processlist 或 show full processlist 查看数据库连接状态,其中比较关注的是 State 列,此列表示该连接此刻所在的状态.那么你真的了解不同 State 值所表示的状态吗?下面我们参考官方文档来一探究竟 . 以MySQL 5.7版本为例 官方文档地址:https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html 简单翻译下: After create 当线程在创建表

MySQL线程状态详解

前言: 我们常用 show processlist 或 show full processlist 查看数据库连接状态,其中比较关注的是 State 列,此列表示该连接此刻所在的状态.那么你真的了解不同 State 值所表示的状态吗?下面我们参考官方文档来一探究竟 . 以MySQL 5.7版本为例 官方文档地址: https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html 简单翻译下: After create 当线程在创