首页 > 解决方案 > MySQL - 获取“超过锁定等待超时;尝试重新启动事务”

问题描述

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

我创建了简单Spring Boot的应用程序并从文件中读取记录并插入到MySQL数据库中。

MySQL在记录计数 4912442 后将记录插入数据库时​​出现以下错误:

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

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

并且即使出现上述错误也执行以下命令:

SET GLOBAL innodb_lock_wait_timeout = 5000; 
SET innodb_lock_wait_timeout = 5000;

标签: mysqlspring-boot

解决方案


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
    

推荐阅读