解决mysql死锁 Lock wait timeout exceeded; try restarting transaction

出现原因

在高并发的情况下或者代码问题下,Spring事务造成数据库死锁

查看数据库当前的进程,看一下有无正在执行的慢SQL记录线程。

show processlist 

在这里插入图片描述

show processlist 是显示用户正在运行的线程,需要注意的是,除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。

  1. Id: 就是这个线程的唯一标识,当我们发现这个线程有问题的时候,可以通过 kill 命令,加上这个Id值将这个线程杀掉。
  2. User: 就是指启动这个线程的用户。
  3. Host: 记录了发送请求的客户端的 IP 和 端口号
  4. DB: 当前执行的命令是在哪一个数据库上。如果没有指定数据库,则该值为 NULL 。
  5. Command: 是指此刻该线程正在执行的命令
  6. Time: 表示该线程处于当前状态的时间。
  7. State: 线程的状态,和 Command 对应
  8. Info: 一般记录的是线程执行的语句。

当前运行的所有事务

SELECT * FROM information_schema.INNODB_TRX;

在这里插入图片描述

其中trx_mysql_thread_id对应 show processlist 里面id

杀死进程

KILL id
KILL 15354
id:trx_mysql_thread_id对应 show processlist 里面id


版权声明:本文为qq_43019754原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。