mysql主从复制线程死锁_MySQL Bug剖析之Slave节点并行复制死锁

本文讲述了在MySQL主从复制过程中,由于并行复制导致的Slave节点线程死锁问题。在分析过程中,发现死锁涉及`FLUSH PRIVILEGES`和`GRANT`语句对`mysql.user`表的表级锁冲突,进而引发了主从复制的阻塞。通过对binlog的分析和MySQL 5.7.3的优化特性理解,最终确认为MySQL的Bug,并已上报官方。
摘要由CSDN通过智能技术生成

此文已由作者温正湖授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

有天一早,DBA同学就找上来了,说有个DDB集群下的RDS实例Slave节点(从库)死锁了,请求支援。说实话,一大早就遇到死锁这种棘手的问题,我的内心是奔溃的。不过万幸的是,DBA说这个实例还未正式上线,处于上线前压测阶段。这么一来,至少现场可以一直保持着。方便定位问题。那么,是什么问题呢,不卖关子,直接上图:

6553a5d613d55bf05444025fb96f0a1c.png

这是show processlist的结果。可以看到有一大坨的连接,基本上都是权限操作相关的语句,全都卡在“waiting for table level lock”上。还有几个复制管理操作,比如stop slave,也卡住了。这密密麻麻一大堆,看得都烦。还是得从这些连接里面挖掘出少数有用的信息。所以登上实例的mysql客户端捋下才是王道。先看看有没有锁相关的直接信息:

show engine innodb status\G

------------

TRANSACTIONS

------------

Trx id counter 6506046

Purge done for trx's n:o 

History list length 2057

LIST OF TRANSACTIONS FOR EACH SESSION:

---TRANSACTION 421794207149728, not started

0 lock struct(s), heap size 1136, 0 row lock(s)

---TRANSACTION 421794207150640, not started

里面根本就没有持锁相关的提示,而且事务全都处于not started状态。再看看InnoDB锁相关表:

mysql> select * from information_schema.INNODB_LOCK_WAITS;

Empty set (0.00 sec)

mysql>

mysql> select * from  information_schema.INNODB_LOCKS;

Empty set (0.00 sec)

还是空空如也。既然这样,那直接看这些连接吧。理一理先后顺序,发现有3个连接是最早同时被卡主的:

|  284480 | system user |           | dbn3               | Connect | 60771 |             0 | Waiting for table leve

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值