异常com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

异常现象

抛出异常:com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

解释:MYSQL事务回滚异常,超过锁等待超时;尝试重新启动事务

原因:执行update的SQL语句时,由于表被锁座,无法更新,导致时间超时;

此时在数据库对当前表进行update语句更新时,会提示:时间超时

当执行一个方法请求到数据库,抛出当前异常时,即使定位到执行的是哪一条SQL语句。确定是哪一张表;

MYSQL中手动执行该update语句时,提示:失败,等待锁超时;

解决方案:

1、查看数据库被锁表的进程,若表被锁住,可以查看到当前锁表的进程信息,若表被一直锁住不释放,则信息会一直存在;

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

2、找到当前锁表的进程ID,即:trx_mysql_thread_id,将其终止

kill 进程ID;

此时当前表会被释放,即可正常进行update操作。

 

以上只是解决锁表的临时解决方案,并不推荐,应该从造成锁表的原因去调整,避免后续执行方法时也会锁表;

拓展:

1、查看未提交的事务

select * from  information_schema.INNODB_TRX;

 2、查看正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 

3、查看正在等待锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

 

参考:https://blog.csdn.net/lejustdoit/article/details/120276851

posted @ 2022-09-07 16:26  DHaiLin  阅读(12245)  评论(0编辑  收藏  举报