我试图从MySQL 5.0.45数据库中删除几行:
delete from bundle_inclusions;
客户端工作一段时间然后返回错误:
Lock wait timeout exceeded; try restarting transaction
有可能有一些未提交的事务在这个表上有一个锁,但我需要这个过程来胜过任何这样的锁.如何打破MySQL的锁定?
我同意Erik; TRUNCATE TABLE是要走的路.但是,如果您不能使用某种原因(例如,如果你不真的要删除表中的每一行),你可以尝试以下方法:
删除较小批量的行(例如DELETE FROM bundle_inclusions WHERE id BETWEEN?和?)
如果它是MyISAM表(实际上,这也适用于InnoDB),请尝试在DELETE之前发出LOCK TABLE.这应该保证您拥有独家访问权限.
如果是InnoDB表,则在超时发生后,使用SHOW INNODB STATUS.这可以让您深入了解锁定获取失败的原因.
如果您拥有SUPER权限,您可以尝试SHOW PROCESSLIST ALL以查看其他连接(如果有)正在使用该表,然后使用KILL去除您正在竞争的那个.
我相信还有很多其他的可能性; 我希望其中一个有所帮助.
Linux:在mysql配置(/etc/my.cnf或/etc/mysql/my.cnf)中插入/编辑此行
innodb_lock_wait_timeout = 50
充分增加值(以秒为单位),重启数据库,执行更改.然后还原更改并重新启动.