一、常见报错:
org.springframework.dao.CannotAcquireLockException异常,但是在打印出日志的时候,显示的是
com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction。提示的是Lock wait timeout exceeded(锁等待超时);try restarting transaction (尝试开启新事务);
二、排查
- 排查数据库是否发生表锁,整张表被锁定,也就无法往里插入数据;
show open table where in_use > 0; //查询是否表锁
2. 排查数据库中该表是否有事务抢占了该锁,导致该请求无法获取锁,然后一直等待,等待时间超过数据库设置的默认时间就会失败。
select * from imformation_schema.innodb_trx; //查询运行的事务,是否被锁住
三、问题解决
- 只需要把之前的事务杀死就可以了
kill id; //id为线程id,使用该命令就可以杀死某条线程
2. 再次检查select * from imformation_schema.innodb_trx,看结果是否为空