mysql死锁【MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction】

天老爷,mysql死锁居然让我给遇上了!!!

场景复现:

我本地IDEA连接了测试环境的mysql,然后调一个需要事务的接口,断点打到一半。然后测试环境又调同一个接口拿到同一个事务。这个时候就抛异常

思考:所以两个进程去同一个事务处理,但是业务代码又不是同步的,且前一个去事务的进程还没有释放锁,就抛了这个异常。

确认问题:去数据库执行这个语句,有两个事务

SELECT * FROM information_schema.INNODB_TRX;

解决问题:

1 释放本地造成的事务锁:我把本地IDEA的断点释放了,还有有异常,于是,我把本地服务关了,这个时候再执行上面的语句只有一个事务了。

2 释放测试环境造成的锁:测试环境是用Jenkins+docker部署的,我执行了Jenkins的build,再去用上面的语句查数据库,还是存在。于是用下面语句查询出来,并执行查询出的语句去kill。

SELECT concat('KILL ',id,';')  FROM information_schema.processlist p  INNER JOIN  information_schema.INNODB_TRX x  ON p.id=x.trx_mysql_thread_id  WHERE db='数据库名';

成功处理了问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值