关于数据库:MySQL:”超出了锁定等待超时”

关于数据库:MySQL:”超出了锁定等待超时”

MySQL: “lock wait timeout exceeded”

我正在尝试从MySQL 5.0.45数据库中删除几行:

1
delete from bundle_inclusions;

客户端工作一段时间,然后返回错误:

1
Lock wait timeout exceeded; try restarting transaction

可能有一些未提交的事务在此表上具有锁,但是我需要此过程来胜过任何此类锁。如何在MySQL中解除锁定?


我同意Erik; TRUNCATE TABLE是必经之路。但是,如果由于某种原因不能使用它(例如,如果您确实不想删除表中的每一行),则可以尝试以下选项:

  • 批量删除行(例如,从?和?之间的ID为bundle_inclusions的DELETE中删除)
  • 如果它是MyISAM表(实际上,它也可以与InnoDB一起使用),请尝试在DELETE之前发出LOCK TABLE。这应确保您具有独占访问权。
  • 如果它是InnoDB表,则在发生超时后,使用SHOW INNODB STATUS。这应该使您对锁定获取失败的原因有一些了解。
  • 如果您具有SUPER特权,则可以尝试使用SHOW PROCESSLIST ALL来查看正在使用该表的其他连接(如果有),然后使用KILL摆脱与之竞争的连接。

我确信还有很多其他可能性;希望这些帮助之一。


Linux:在mysql配置(/etc/my.cnf或/etc/mysql/my.cnf)中,插入/编辑此行

1
innodb_lock_wait_timeout = 50

充分增加该值(以秒为单位),重新启动数据库,执行更改。然后还原更改并再次重新启动。


我遇到了同样的问题,一个无休止的流氓交易。我重新启动了mysqld进程。您不需要截断表。您可能会从该流氓交易中丢失数据。


猜测:截断表bundle_inclusions


推荐阅读