MySQL-获取“超出了锁定等待超时;尝试重新启动事务”

时间:2018-10-06 15:49:10

标签: mysql spring-boot

我在Oracle MySQL DB和5.7版中创建了一个包含4列的表。数据库中存在的总记录为4 912442。现在我正尝试在MySQL数据库中再插入10万条记录。

我已经创建了一个简单的Spring Boot应用程序,并从文件中读取了记录并插入到MySQL DB中。

在记录计数4912442之后将记录插入MySQL DB中时遇到以下错误:

[WARN ] SqlExceptionHelper - SQL Error: 1205, SQLState: 40001
[ERROR] SqlExceptionHelper - Lock wait timeout exceeded; try restarting transaction

注意:MASTER-MASTER群集在2个实例中使用MySQL数据库。

并在以下命令下执行,甚至出现上述错误:

SET GLOBAL innodb_lock_wait_timeout = 5000; 
SET innodb_lock_wait_timeout = 5000;

1 个答案:

答案 0 :(得分:0)

Lock wait timeout通常在事务更新/插入正在等待已被某些其他事务锁定的数据行上时发生。

可能的原因可能是大量数据,不适当的表设计,约束等。

以下一些解决方法应该可行:

  1. 检查锁定等待时间show variables like 'innodb_lock_wait_timeout的当前值;并将其更新为120更高的值。

  2. 或您可以在此行中将其永久设置在/etc/my.cnf中,但请确保重新启动MySQL,如果无法重新启动,则只需运行查询SET GLOBAL innodb_lock_wait_timeout = 120;

    [mysqld]
    innodb_lock_wait_timeout=120