mysql查看死锁,mysql查看死锁的几种方式

首页 2025-10-16 13:25:57


在 MySQL 中查看死锁信息可以通过以下几种方式:

1. 查看最近一次死锁详情

使用 SHOW ENGINE INNODB STATUS 命令,其中包含最近一次死锁的详细信息:
sql
SHOW ENGINE INNODB STATUS;
 
在输出结果中,找到 LATEST DETECTED DEADLOCK 部分,里面会显示:
  • 死锁发生的时间
  • 参与死锁的事务 ID
  • 每个事务执行的 SQL 语句
  • 事务持有的锁和等待的锁

2. 开启死锁日志(推荐)

如果需要记录所有死锁信息,可以在 MySQL 配置文件中开启死锁日志:
  1. 编辑配置文件(my.cnf 或 my.ini):
    ini
    [mysqld]
    innodb_print_all_deadlocks = 1
    
     
     
  2. 重启 MySQL 服务使配置生效
  3. 死锁信息会被记录到 MySQL 的错误日志中,错误日志路径可以通过以下命令查看:
    sql
    SHOW VARIABLES LIKE 'log_error';
    
     
     

3. 实时监控死锁(通过 Performance Schema)

MySQL 5.7+ 可以通过 Performance Schema 监控死锁:
sql
-- 查看死锁事件
SELECT * FROM performance_schema.events_errors_summary_by_thread_by_error 
WHERE ERROR_NUMBER = 1213; -- 1213 是死锁的错误代码

-- 查看当前锁等待情况
SELECT * FROM performance_schema.data_locks;
SELECT * FROM performance_schema.data_lock_waits;
 

说明

  • 死锁是指两个或多个事务相互持有对方需要的锁而陷入无限等待的状态
  • MySQL 的 InnoDB 存储引擎会自动检测死锁,并选择其中一个事务进行回滚以解除死锁
  • 查看死锁信息有助于分析应用程序中的锁竞争问题,进而优化 SQL 语句或事务设计
通过以上方法,可以有效地监控和分析 MySQL 中的死锁情况。
nat123映射怎么用?超详细步骤,外网访问内网轻松搞定
nat123域名怎么用?两种方式轻松搞定
nat123怎么用?简单几步实现内网穿透
内网穿透工具对比:nat123、花生壳与轻量新选择
远程访问内网很简单:用对工具,一“箭”穿透
ngrok下载完全指南:从入门到获取客户端
内网远程桌面软件:穿透局域网边界的数字窗口
从外网远程访问内网服务器的完整方案
Windows Server 2008端口转发完全教程:netsh命令添加/查看/删除/重置
为什么三层交换机转发比Linux服务器快?转发表硬件加速的秘密