MySQL:"超出了锁定等待超时"

时间:2020-03-05 18:53:58  来源:igfitidea点击:

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

delete from bundle_inclusions;

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

Lock wait timeout exceeded; try restarting transaction

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

解决方案

回答

猜测:截断表bundle_inclusions

回答

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

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

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