报错
com.mysql.jdbc.exceptions.MySQLTransaction.Deadlock found when trying to get lock;try restarting transaction
解决过程
在更新数据的时候报了这个错,报错信息中出现了关键词Deadlock。所以是出现了死锁。
查看数据引擎的日志信息
# 查看当前的事务状态
SHOW ENGINE INNODB STATUS;
# 这条语句将显示InnoDB引擎的状态信息,其中包含了当前执行的事务信息、锁等待的信息以及其他相关的统计数据。
日志中出现了死锁的相关信息
------------------------
LATEST DETECTED DEADLOCK
------------------------
2024-05-28 10:02:48 0x7f2441a34700
*** (1) TRANSACTION:
TRANSACTION 121880930, ACTIVE 168 sec fetching rows
mysql tables in use 1, locked 1
LOCK WAIT 143 lock struct(s), heap size 57552, 5096 row lock(s), undo log entries 4768
MySQL thread id 4096713, OS thread handle 139793685145344, query id 36850628 127.0.0.1 root updating
查看事务的线程id,kill掉就可以了
# 查看当前事务列表
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
# 这条语句将返回一个包含所有当前活动事务的结果集,包括事务ID、开始时间、等待锁的状态等信息。
# 杀死造成死锁的进程:thread_id就是上一个语句查询结果中的trx_mysql_thread_id
KILL <thread_id>;
# 使用上一步中提供的死锁信息,确定造成死锁的线程ID,并使用此命令终止该线程。这将强制终止正在运行的事务,解开死锁。
问题解决,具体的死锁原因待排查
over~