项目场景:
在测试企信放款时,前端服务起了两个,访问同一个后台接口,导致出现MySQL数据库并发错误
问题描述
原因分析:
:
这个错误是由于MySQL事务超时导致的锁表问题引起的。在MySQL中,当一个事务在执行期间锁定了某些行,而其他事务试图在锁定时间超过设定的超时时间后访问这些行时,就会出现锁等待超时的错误。 要解决这个问题,首先需要描述问题并重现它。可以通过模拟锁表和调用HTTP接口修改用户表数据来重现问题。 解决方法有两种。第一种是通过杀掉对应的线程(Thread Id)来解决问题,这是一个临时的解决方法。第二种方法是更改数据库的超时时间,可以通过修改MySQL的配置文件或者直接在数据库中执行相应的语句来实现。 如果需要模拟锁表问题,可以按照以下步骤进行操作:首先,关闭自动提交功能,然后执行更新操作而不进行提交,这样会一直锁定表。最后,查询锁表情况,可以使用INFORMATION_SCHEMA.INNODB_TRX视图来查看当前的事务信息。 总结起来,Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction这个错误是由于MySQL事务超时导致的锁表问题引起的。解决方法包括杀掉对应的线程或更改数据库的超时时间。要模拟锁表问题,可以关闭自动提交功能,执行更新操作而不提交,并查询锁表情况。1234:
解决方案:
select * from information_schema.INNODB_TRX //查询出超时进程ID
kill 132956 //杀死进程