当我试图删除一个数据库时,它挂起了。进程列表显示:
20045 | root | localhost | NULL | Query | 4 | Waiting for table metadata lock | drop database dbname1整个数据库没有外键,也没有锁。以下是相同内容的详细信息:
mysql>
mysql> select * from INNODB_LOCKS ;
Empty set (0.00 sec)
mysql> select * from INNODB_LOCK_WAITS ;
Empty set (0.01 sec)我不知道为什么会这样,有谁对这个问题有什么想法吗?我使用的是MySQL 5.5.31-0ubuntu0.12.04.1-log (Ubuntu)。
发布于 2013-08-27 20:18:09
如果你想立即解决这个问题,只需重新启动mysql,然后再次尝试删除数据库。我有时也会遇到类似的问题,上面的技巧对我总是有效的。
发布于 2014-03-06 03:04:33
原因有很多:
发布于 2014-03-06 13:47:50
感谢大家的回复。所有的方法都很好地解决了这个问题。
其实我知道如何克服,但我想要一些同样的预防方法。
实际上,每当我遇到这个问题时,只要杀死所有睡眠线程并重新运行alter或drop就可以解决这个问题,或者您解释的任何方法也可以工作。
但是看看所有的方法,我们需要一些停机时间,你知道这对生产数据库意味着什么。
最重要的是,我观察到一些早期的命令/事务使用了该表,现在它们处于睡眠模式,这导致了这些情况一次又一次地发生。
应该有一些预防方法,对于同一.I我还在寻找它。
一个简单的解决方案,我目前使用的是,我创建了一个bash脚本,定期检查(间隔每分钟) MySQL进程列表,如果有任何线程,即等待元数据锁定和时间超过30秒,要么发送警报电子邮件或做上述所有步骤,以克服这些情况。
我知道这不是一个完整的解决方案,但每当数据库遇到同样的情况时,脚本总是会向我发送警报。
尽管如此,我还是在寻找最好的解决方案,无论什么时候我都会在这里发布。
https://stackoverflow.com/questions/18464936
复制相似问题