当前位置:  开发笔记 > 后端 > 正文

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

如何解决《MySQL:"锁定等待超时超时"》经验,为你挑选了2个好方法。

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

delete from bundle_inclusions;

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

Lock wait timeout exceeded; try restarting transaction

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



1> Matt Solnit..:

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

删除较小批量的行(例如DELETE FROM bundle_inclusions WHERE id BETWEEN?和?)

如果它是MyISAM表(实际上,这也适用于InnoDB),请尝试在DELETE之前发出LOCK TABLE.这应该保证您拥有独家访问权限.

如果是InnoDB表,则超时发生后,使用SHOW INNODB STATUS.这可以让您深入了解锁定获取失败的原因.

如果您拥有SUPER权限,您可以尝试SHOW PROCESSLIST ALL以查看其他连接(如果有)正在使用该表,然后使用KILL去除您正在竞争的那个.

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



2> Lars Bohl..:

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

innodb_lock_wait_timeout = 50

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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有