MySQL:“锁定等待超时超时”

时间:2008-09-15 16:53:55

标签: mysql database

我试图从MySQL 5.0.45数据库中删除几行:

delete from bundle_inclusions;

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

Lock wait timeout exceeded; try restarting transaction

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

4 个答案:

答案 0 :(得分:21)

我同意Erik; TRUNCATE TABLE是要走的路。但是,如果由于某种原因无法使用它(例如,如果您

  • 删除较小批量的行(例如DELETE FROM bundle_inclusions WHERE id BETWEEN?and?)
  • 如果它是MyISAM表(实际上,这也适用于InnoDB),请尝试在DELETE之前发出LOCK TABLE。这应该保证您拥有独家访问权。
  • 如果是InnoDB表,那么发生超时后,使用SHOW INNODB STATUS。这可以让您深入了解锁定获取失败的原因。
  • 如果您拥有SUPER权限,可以尝试SHOW PROCESSLIST ALL查看其他连接(如果有)正在使用该表,然后使用KILL删除您正在竞争的那个。

我确信还有很多其他的可能性;我希望其中一个有所帮助。

答案 1 :(得分:5)

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

innodb_lock_wait_timeout = 50

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

答案 2 :(得分:3)

我有同样的问题,一个没有结束的流氓交易。我重新启动了mysqld进程。您不需要截断表。您可能会丢失该恶意交易中的数据。

答案 3 :(得分:2)

猜测:截断表bundle_inclusions