超过了锁定等待超时;尝试重新启动事务


12

我每天重复收到此错误4-5次。

SQLSTATE [HY000]:常规错误:1205超出了锁定等待超时;尝试重新启动事务

这次我重新启动phpmyadmin,但是一次又一次地发生。我无法指出这个问题。

我正在使用Magento ver。网站中的1.9.0.1。我有7000多种产品。在服务器中,我有16GB RAM。

如何解决这个问题?

Answers:


8

您应该考虑通过设置innodb_lock_wait_timeout来增加InnoDB的锁定等待超时值,默认值为50秒

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
+--------------------------+-------+
1 row in set (0.01 sec)

您可以/etc/my.cnf使用此行将其永久设置为更高的值

[mysqld]
innodb_lock_wait_timeout=120

并重启mysql。如果您目前无法重启mysql,请运行以下命令:

SET GLOBAL innodb_lock_wait_timeout = 120; 

您也可以在整个会话期间进行设置

SET innodb_lock_wait_timeout = 120; 

跟着你的查询


3
为什么不140'或2000'?这实际上如何解决问题?隐藏吗?
Elzo Valugi

您有一个问题导致表被锁定的程度超出合理预期。如果这样做,您将迫使自己每次都等待2分钟,而不是立即解决此问题。就像Elzo所说的那样……当120不够时会发生什么?
卡洛斯·罗伯斯

7

如果您尝试访问的数据库内容已被(通常长时间运行的)先前进程锁定,您将看到此消息。MySQL将在放弃并引发该错误之前等待一定的时间来删除该锁。如果您能够跟踪到一天中任何一致的时间看到这些错误消息的时间,则应查看该时间服务器在做什么,例如正在运行数据库备份。通过这种方式,您应该能够缩小可能创建锁的进程的可能性,尽管并非总是那么简单-可能会经过反复试验。


5

此问题背后的原因是,如果您正在运行许多自定义脚本并在数据库连接有机会关闭之前杀死了这些脚本。

某些东西阻止了查询的执行。最有可能是另一个查询在查询中的一个表中进行更新,插入或删除。您必须找出是什么:

如果可以从CLI登录到MySQL并运行以下命令

SHOW PROCESSLIST;

找到阻塞/睡眠过程后,找到它id并运行:

KILL {id};

重新运行您的初始查询。

可能是该链接会对您有所帮助: SQLSTATE [HY000]:常规错误:1205超出了锁定等待超时;默认值是:尝试重新启动事务Magento


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.