当我尝试删除数据库时,它会挂起。进程列表显示:
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)。
答案 0 :(得分:1)
如果你想立即解决问题只需重新启动mysql,然后再次尝试删除数据库。我也会遇到类似的问题,上面的技巧总是对我有用。
答案 1 :(得分:0)
有多种原因:
答案 2 :(得分:0)
感谢大家的回复。所有的方法都很好,很好地克服了这个问题。
实际上我知道如何克服的方法,但我想要一些相同的预防方法。
实际上看到每当我遇到这个问题时,只需杀死所有睡眠线程并重新运行alter或drop将解决它,或者你解释的任何方法也会起作用。
但是看到所有方法我们需要一些正确的停机时间,你知道这对生产数据库意味着什么。
主要的是我观察到一些早期的命令/事务使用了该表,现在它们处于睡眠模式并且这一次又一次地导致了这种情况。
应该有一些相同的预防方法。我仍然在寻找它 一个简单的解决方案,我目前正在使用,我创建了一个定期检查的bash脚本(每隔几分钟) MySQL进程列表,如果有任何线程,即等待元数据锁定和时间超过30秒 无论是发送警报电子邮件还是执行上述所有步骤以克服这些情况。
我知道这不是完整的解决方案,但只要数据库遇到相同的情况,脚本总会发送警报 我仍然在寻找最佳解决方案,无论什么时候我都会在这里发布。