今天遇到了删除表的语句导致表被锁的情况,kill锁之后再执行还是被锁。
问题描述
1、drop table 的时候导致表被锁,一直再等待
2、SHOW FULL PROCESSLIST ; 能找到等待中的进程
3、kill 相应的锁之后,查询不受影响。
4、再次删除这个表又出现锁表。
问题解决
通过如下语句查询是否有正在执行的事务, 如果有未提交的事务, 可以考虑kill事务或等待事务提交.
SELECT trx_state, trx_started, trx_mysql_thread_id, trx_query FROM information_schema.innodb_trx;
查询到一个正在执行的事务,kill掉之后执行删除表操作正常。
总结
debug代码的时候停住了,在navicat中执行的时候其实等待的是代码中的事务,占用到这个表了,这时候删除表一直在等待代码,SHOW FULL PROCESSLIST还查不到这个,然而我忘了,忘了,忘了,一直删不掉,kill事务后把表删了后看到了代码停在在debug。。。。
本文
https://blog.csdn.net/wangwenpeng0529/article/details/104172297
参考
https://blog.csdn.net/robinhoodzz/article/details/80435921