mysql:error 1205-Lock wait timeout exceeded; try restarting transaction的问题解决

在这里插入图片描述
第一步:
因为mysql数据库默认是autocommit的自动提交,需要查看一下数据库的设置是否真的是自动提交

select @@autocommit;

在这里插入图片描述
确定是自动提交,那么就进一步确定问题,需要先知道MySQL数据库的information_schema库的三个关于锁的表:
innodb_trx – 当前运行的所有事务
innodb_locks – 当前出现的锁
innodb_lock_waits – 锁等待的对应关系

** 第二步: **
查看数据库的事物隔离级别

select @@tx_isolation;

在这里插入图片描述
REPEATABLE-READ : MySQL默认的事务隔离级别就是REPEATABLE-READ

** 第三步:**
查看当前数据库的线程情况:

SHOW FULL PROCESSLIST;

在这里插入图片描述
没有看到正在执行得很慢的sql记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否存在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉

** 第四步:**
查看当前数据库的lock进程

SELECT * FROM information_schema.INNODB_TRX;

在这里插入图片描述
发现有id为616694的sql,需要手动kill掉

KILL 616694;
发布了28 篇原创文章 · 获赞 0 · 访问量 392

猜你喜欢

转载自blog.csdn.net/qq_42098424/article/details/103560748
今日推荐