背景
今天在mysql数据库中执行了一个错误的语句,导致mysql执行窗口直接宕了,毫无反应。但该数据的其他表操作都是正常的。
因此判断是这张表被锁定了。
排查与解决
可以先查看当前的所有进程:
1 | SHOW PROCESSLIST |
发现有一个进程一直在查询,删除进程:
1 | KILL 568 |
删除之后,再次运行对该表的操作,发现仍然卡死状态。
但此时再次查看进程,已经没有了。
通过搜索,若存在未提交的事务也会导致表被锁死。
切换到mysql的root用户,查看是否有未提交事务:
1 | select * from information_schema.innodb_trx; |
发现有一个未提交事务,进程id为407。
删除该进程:
1 | mysql> kill 407; |
在查询一次未提交事务:
1 | mysql> select * from information_schema.innodb_trx; |
此时再对该表进行操作,恢复正常了。
总结
当数据库某张表出现卡死等待的异常时,可以参考如下两步排查:
检查是否有卡死的进程,有的话,结束进程。
1
SHOW PROCESSLIST
检查是否有未提交的事务,有的话,结束进程。
1
select * from information_schema.innodb_trx;