MySQL 怎么查看死锁

在MySQL中,可以通过以下方式查看数据库死锁:

  1. 使用 SHOW ENGINE INNODB STATUS 命令查看 InnoDB 引擎的状态信息,包括最近发生的死锁情况。找到”LATEST DETECTED DEADLOCK”部分,如果有死锁发生,会显示相关的信息。

  2. 查询 information_schema.INNODB_TRXinformation_schema.INNODB_LOCKSinformation_schema.INNODB_LOCK_WAITS 表:使用这两个表可以查询当前正在被锁定的事务和等待锁的事务。如果有事务在等待锁,并且出现循环等待的情况,那么可能发生了死锁。

    1
    2
    3
    4
    5
    6
    1、查看正在进行中的事务
    SELECT * FROM information_schema.INNODB_TRX
    2、查看正在锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
    3、查看等待锁的事务
    SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
  3. 使用 MySQL 的错误日志文件来查看是否有死锁发生。在 MySQL 配置文件中配置错误日志路径,然后查看日志文件中的相关信息。

  4. 执行 SELECT 语句:可以执行一条简单的 SELECT 语句来判断是否发生了死锁。如果发生死锁,会抛出 Deadlock found when trying to get lock 错误。

解除死锁

如果需要解除死锁,有一种最简单粗暴的方式,那就是找到进程id之后,直接干掉。

1
2
3
4
// 查看当前正在进行中的进程
show processlist
// 也可以使用
SELECT * FROM information_schema.INNODB_TRX;

这两个命令找出来的进程id 是同一个,杀掉进程对应的进程 id

1
kill id

MySQL 怎么查看死锁
https://flepeng.github.io/041-MySQL-MySQL-怎么查看死锁/
作者
Lepeng
发布于
2021年3月6日
许可协议