线上java程序报错:Lock wait timeout exceeded; try restarting transaction

提问者:帅平 问题分类:微服务
线上的java程序突然报错了,提示:
Caused by: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:123)
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
        at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
        at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)
        at com.p6spy.engine.wrapper.PreparedStatementWrapper.execute(PreparedStatementWrapper.java:362)

如下图:
线上java程序报错:Lock wait timeout exceeded; try restarting transaction
1 个回答
Rae
Rae 管理员
mysql版本是多少?
发布于:1年前 (2023-03-29) IP属地:四川省
帅平
帅平提问者
mysql的版本是5.7
发布于:1年前 (2023-03-29) IP属地:四川省
Rae
Rae管理员
mysql的版本是5.7
看了下mysql的隔离级别:MySQL5.6 中整个事务回滚后会自动创建一个事务,而MySQL5.7则不会再自动创建事务。因此这里需要在mysql的[mysqld]下配置一个:
innodb_rollback_on_timeout = on

在生产环境使用中,建议将innodb_rollback_on_timeout 设置为ON。应用程序一定要做好事务控制,在一个事务出现异常时必须进行显式rollback
发布于:1年前 (2023-03-29) IP属地:四川省
我来回答