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

Adr*_*ton 12 mysql database

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

delete from bundle_inclusions;
Run Code Online (Sandbox Code Playgroud)

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

Lock wait timeout exceeded; try restarting transaction
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*nit 22

我同意Erik; TRUNCATE TABLE是要走的路.但是,如果您不能使用某种原因(例如,如果你不真的要删除表中的每一行),你可以尝试以下方法:

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

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


Lar*_*ohl 5

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

innodb_lock_wait_timeout = 50
Run Code Online (Sandbox Code Playgroud)

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