无法在mysql中删除数据库

无法在mysql中删除数据库,mysql,Mysql,当我试图删除数据库时,它会挂断。processlist显示: 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> sele

当我试图删除数据库时,它会挂断。processlist显示:

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

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

原因有很多:

  • 数据库在使用中的某段时间>>可能是您尝试删除时正在执行某些事务/查询
  • “可能是”查询窗口已打开并选择了数据库名称。在这种情况下,它将显示查询窗口正在使用数据库,因此您不能删除数据库

    • 谢谢大家的回复。所有方法都很好地解决了这个问题

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

      实际上,每当我遇到这个问题时,只要杀死所有睡眠线程并重新运行alter或drop就可以解决它,或者您解释的任何方法也可以

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

      我观察到的主要问题是,以前的一些命令/事务使用了该表,现在它们处于睡眠模式,这导致了这种情况一次又一次出现

      应该有一些预防方法。我还在寻找。
      我目前使用的一个简单的解决方案是,我创建了一个bash脚本,它可以定期检查(每分钟一次) MySQL进程列表,以及是否存在任何线程,即等待元数据锁定和时间超过30秒 它要么发送一封提醒电子邮件,要么执行上述所有步骤以克服这些情况

      我知道这不是一个完整的解决方案,但每当数据库遇到同样的情况时,脚本总是向我发送警报。

      尽管如此,我仍在寻找最佳解决方案,无论何时,我都会在这里发布。

      查看此链接:您好,谢谢您的回复。是的,你给出的链接很好地解决了这个问题。事实上,我知道如何克服,但我想它的一些预防方法相同。有关更多详细信息,请参见下面我的回答我为此做了什么,我知道这不是一个完整的解决方案,但至少我知道这些事情发生的时间,作为回复,我收到了警报邮件或应用了任何克服方法