【error】Lock wait timeout exceeded; try restarting transaction(mysql)事务锁

青旅半醒 2024-03-30 11:06 178阅读 0赞

目录

  • 1.报错信息
  • 2.解决方案
    • 2.1 方案一
    • 2.2 方案二
    • 2.3 方案三
  • 3.补充说明
    • 3.1 三张表字段说明
  • 【原文链接】

1.报错信息

背景:在做更新操作时,电脑重启了,重新运行mysql语句时报以下错误。
报错信息:Lock wait timeout exceeded; try restarting transaction…= 超过锁定等待超时;尝试重新启动事务

在这里插入图片描述

2.解决方案

2.1 方案一

重启mysql;

2.2 方案二

可以通过到information_schema 中来进行当前运行的所有事务:

  1. select * from information_schema.innodb_trx;

在这里插入图片描述

查询结果显示数据库中并没有锁,图中红色语句 RUNING 为占用系统资源的语句,我们需要杀掉这个进程,执行 kill 线程id号。然后重新运行sql语句即可解决问题。

  1. kill 360147
  2. // 查询线程
  3. // SELECT * from information_schema.processlist WHERE id = 738178711;
  4. // show full processlist;

2.3 方案三

查找执行线程用时比较久的用户,然后直接杀死线程。

  1. SELECT * from information_schema.`PROCESSLIST` WHERE Time > 1000 AND USER = '240'
  2. ORDER BY TIME desc;
  3. kill 360147

3.补充说明

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

常用查询语句如下:

  • innodb_trx 当前运行的所有事务
  • innodb_locks 当前出现的锁
  • innodb_lock_waits 锁等待的对应关系

3.1 三张表字段说明

  1. desc information_schema.innodb_trx;

在这里插入图片描述

  1. desc information_schema.innodb_locks;

在这里插入图片描述

  1. desc information_schema.innodb_lock_waits

在这里插入图片描述

【原文链接】

发表评论

表情:
评论列表 (有 0 条评论,178人围观)

还没有评论,来说两句吧...

相关阅读