MySQL innodb waiting for table level lock 问题解决

场景

某客户告知数据库(MySQL5.6)发生锁,数据无法增删改,已严重影响业务。

问题排查

登录数据库检查数据库状态如下

table level lock???都是innodb存储引擎这种状态不该出现啊。会不会是人为加了锁?
MySQL innodb waiting for table level lock 问题解决
果然。查看innodb的状态发现有一个事务持有大量的锁。
MySQL innodb waiting for table level lock 问题解决
MySQL innodb waiting for table level lock 问题解决
kill掉该事物,数据库状态正常。
通过时间戳推算得知在该时刻进行了一个逻辑备份,添加了add locks参数,未完成被KILL掉了,unlock未执行导致多表被锁。

模拟场景复现

复现倒是挺简单的,就是一个连接执行lock table xxx read,在对该表的增删改操作就变成了waiting table level lock。但是这个是MySQL-5.6的表现,MySQL5.7表现为Waiting for table metadata lock。看来Waiting for table metadata lock在5.7又多了一种场景!