无法在mysql中删除数据库

时间:2013-08-27 12:06:48

标签: mysql

当我尝试删除数据库时,它会挂起。进程列表显示:

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)。

3 个答案:

答案 0 :(得分:1)

如果你想立即解决问题只需重新启动mysql,然后再次尝试删除数据库。我也会遇到类似的问题,上面的技巧总是对我有用。

答案 1 :(得分:0)

有多种原因:

  • 您的数据库正在使用的某个时间>>您尝试删除时可能正在执行某些事务/查询。
  • 可能是打开了查询窗口并选择了数据库名称。在这种情况下,它将告诉查询窗口使用了数据库,因此您无法删除数据库。

答案 2 :(得分:0)

感谢大家的回复。所有的方法都很好,很好地克服了这个问题。

实际上我知道如何克服的方法,但我想要一些相同的预防方法。

实际上看到每当我遇到这个问题时,只需杀死所有睡眠线程并重新运行alter或drop将解决它,或者你解释的任何方法也会起作用。

但是看到所有方法我们需要一些正确的停机时间,你知道这对生产数据库意味着什么。

主要的是我观察到一些早期的命令/事务使用了该表,现在它们处于睡眠模式并且这一次又一次地导致了这种情况。

应该有一些相同的预防方法。我仍然在寻找它 一个简单的解决方案,我目前正在使用,我创建了一个定期检查的bash脚本(每隔几分钟) MySQL进程列表,如果有任何线程,即等待元数据锁定和时间超过30秒 无论是发送警报电子邮件还是执行上述所有步骤以克服这些情况。

我知道这不是完整的解决方案,但只要数据库遇到相同的情况,脚本总会发送警报 我仍然在寻找最佳解决方案,无论什么时候我都会在这里发布。