首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法删除mysql中的数据库

无法删除mysql中的数据库
EN

Stack Overflow用户
提问于 2013-08-27 20:06:48
回答 3查看 6.3K关注 0票数 4

当我试图删除一个数据库时,它挂起了。进程列表显示:

代码语言:javascript
复制
20045 | root | localhost | NULL | Query | 4 | Waiting for table metadata lock | drop database dbname1

整个数据库没有外键,也没有锁。以下是相同内容的详细信息:

代码语言:javascript
复制
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)。

EN

回答 3

Stack Overflow用户

发布于 2013-08-27 20:18:09

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

票数 5
EN

Stack Overflow用户

发布于 2014-03-06 03:04:33

原因有很多:

  • 当您的数据库处于use>>状态时,当您尝试删除时,可能正在执行某些事务/查询。
  • 可能打开了名为selected.In的数据库查询窗口。这种情况下,它会告诉您数据库正被查询窗口使用,因此您不能删除该数据库。
票数 0
EN

Stack Overflow用户

发布于 2014-03-06 13:47:50

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

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

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

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

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

应该有一些预防方法,对于同一.I我还在寻找它。

一个简单的解决方案,我目前使用的是,我创建了一个bash脚本,定期检查(间隔每分钟) MySQL进程列表,如果有任何线程,即等待元数据锁定和时间超过30秒,要么发送警报电子邮件或做上述所有步骤,以克服这些情况。

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

尽管如此,我还是在寻找最好的解决方案,无论什么时候我都会在这里发布。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18464936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档