【问题标题】:Why can't I drop MySQL Database?为什么我不能删除 MySQL 数据库?
【发布时间】:2012-12-19 20:42:12
【问题描述】:

问题

我在 Mac OS 10.8.2 上运行 MySQL 5.5.23,无法删除特定数据库,但我可以删除其他数据库。

当我尝试删除特定表时,我收到此错误:

#1548 - Cannot load from mysql.proc. The table is probably corrupted

尝试修复

  • 我已经重启了系统
  • 我已尝试通过 CLI 重新启动 MySQL
    • $ sudo /usr/local/mysql/support-files/mysql.server stop
    • 但收到此错误ERROR! MySQL server PID file could not be found!
  • 我已经修复了 mysql.proc 表。
    • REPAIR TABLE mysql.proc
    • REPAIR TABLE mysql.proc USE_FRM
  • 我已经修复了所有的 mysql.* 表。
    • REPAIR TABLE mysql.*
  • 从命令行运行 mysqlcheck
    • mysqlcheck --repair --all-databases
    • mysqlcheck --repair specific-db
      • 我收到了这个错误:mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) when trying to connect

当前状态

我仍然不能删除原来的特定数据库,但可以删除其他的。

更新[1] 2013-01-05 上午 11:15 [纽约]

日志和反馈(@Thomas in cmets) 为了查找所有日志,我运行了 (cli):

$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'

我收到了这样的反馈:

130105 11:35:21 [Warning] Can't create test file /usr/local/mysql-5.5.23-osx10.6-x86_64/data/wills-mbp.lower-test
130105 11:35:21 [Warning] Can't create test file /usr/local/mysql-5.5.23-osx10.6-x86_64/data/wills-mbp.lower-test
130105 11:35:21 [Note] Plugin 'FEDERATED' is disabled. /usr/local/mysql/bin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
130105 11:35:21 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

我正在调查mysql_upgrade

更新[2] 2013-01-05 下午 4:04 [纽约]

我跑了这个:

sudo /usr/local/mysql/support-files/mysql.server stop

并收到此错误:

ERROR! MySQL server PID file could not be found!

更新[2.1] 2013-01-05 5:37 pm [纽约]

我运行ps auxww | grep mysql 并找到mysqld 进程并将其杀死(sudo kill [process id])。然后我能够成功重新启动mysql。但是,我仍然无法删除上面提到的特定数据库。

已解决

在尝试手动修复损坏和许多建议以及此处列出的其他答案之后,重新安装 mySQL 是解决我的问题的唯一方法。

Mac(运行 10.8.2)上,我还必须手动删除一些内容以进行全新安装:

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm /etc/my.cnf

查阅的文章

【问题讨论】:

  • 您有权这样做吗?
  • 服务器正在运行。我可以删除其他表。我有root权限。
  • 当您尝试删除它时会发生什么?任何特定的错误信息?日志中可能有任何内容?
  • 数据库是否存在?
  • 尽管可能没有帮助,但我不得不说我对您在 SO 上的第一篇文章的质量感到惊讶。干得好。

标签: mysql database macos pid


【解决方案1】:

如果你在 windows 中使用 xampp

你也可以使用 phpmyadmin 删除你的数据库

去主页 -> 数据库 -> 点击你的 [数据库名称] -> 删除

您也可以手动删除数据库

转到xampp -> mysql -> 数据-> [数据库名称]

立即删除您的 [数据库名称]。

【讨论】:

    【解决方案2】:

    我有同样的问题,我所做的只是从mysql数据目录中删除数据库目录。

    【讨论】:

      【解决方案3】:

      我遇到了一个问题,即对我的数据库(名为:caloriecalculator)的查询耗时过长,而且根本不会下降。我按照以下步骤解决了我的问题:

      1. 查看所有 MySQL 进程:mysqladmin processlist -u root -p

      1. 杀死所有与卡路里计算器相关的进程,因为它阻止了我要执行的下一个查询。 mysqladmin -u root -p kill 4

      2. 现在运行:drop database caloriecalculator;

      【讨论】:

        【解决方案4】:

        我在 Linux 服务器上遇到过这种情况,原因是数据库目录损坏。

        更新:要做的一件事是进入MySQL数据库目录并执行ls -la,以验证邪恶数据库在权限、所有权等方面与其他数据库相同.例如这里的“原始”数据库不能被删除(它是由一个以 root 身份运行的愚蠢工具创建的):

        drwx------  2 mysql mysql      4096 Aug 27  2015 _db_graph
        drwx------  2 mysql mysql      4096 Jul 13 11:58 _db_xatex
        drwxrw-rw-  2 root  root      12288 May 18 14:27 _db_xatex_original
        drwx------  2 mysql mysql     12288 Jun  9 08:23 _db_xatex_contab
        drwx------  2 mysql mysql     12288 May 18 17:58 _db_xatex_copy
        drwx------  2 mysql mysql      4096 Nov 24  2016 _db_xatex_test
        

        运行chown mysql:mysql _db_xatex_original; chmod 700 _db_xatex_original 可以解决问题(但请检查内部目录以验证那里的权限和所有权是否合用)。


        最后,我采用了以下丑陋的 hack(在尝试停止、重新启动和修复 REPAIR 可能针对的任何东西之后):

        • 创建了一个数据库“替罪羊”
        • 已停止 MySQL 服务器
        • 将 MySQL Server 创建的目录 /var/lib/mysql/scapegoat 复制到 /tmp
        • 重启 MySQL 服务器,丢弃数据库“替罪羊”,停止服务器
        • 现在我有一个干净、空的数据库目录的副本,MySQL 不再知道该目录。
        • 将“evildb”目录移至 /tmp(这样如果出现问题,我可以将其放回原处)
        • 将“替罪羊”目录移至 /var/lib/mysql 并重命名为“evildb”
        • 启动 MySQL 服务器
        • 不确定我此时是否进行了更多维修
        • “evildb”数据库变得可删除!

        我的解释是,当被要求删除数据库时,MySQL 服务器首先对数据库目录中的文件进行一些检查。如果这些检查失败,则丢弃也失败。这些检查必须与REPAIR 执行的检查略有不同。可能在受影响的目录中有一些意想不到的东西。

        我认为这是在 SuSE 11.2 Linux 发行版上的 MySQL 5.1 或 5.2 上。希望对您有所帮助。

        更新

        回想起来,我不记得收到有关“proc”的错误。所以我不太确定问题出在目录。它可能与proc 表相关联, 不是表损坏。您是否尝试过目视检查proc 数据库表,以便在那里找到属于邪恶数据库的东西?

        USE mysql;
        SELECT * FROM proc;
        

        这或其中的任何错误都可以帮助解决问题。谁知道,您可能会有一些带有错误db 列的行。在紧要关头,您可以导出 proc 表并在清理后重新加载它(通过 SQL 或通过磁盘文件)。

        测试

        我对上述更新进行了部分验证。通过有意将垃圾插入proc 表中,以适应新创建的数据库evil,我部分重现了您的症状(不可删除的数据库,MySQL 连接尝试崩溃)。错误号不是 1548;但也许它会是,如果我在那个表中插入 right 垃圾......无论如何,有用的一点是通过 removing 所有对 evil db 的引用,后者再次变得可丢弃:

        mysql> drop database evil;
        ERROR 2013 (HY000): Lost connection to MySQL server during query
        mysql> use mysql;
        No connection. Trying to reconnect...
        Connection id:    1
        Current database: *** NONE ***
        
        Database changed
        mysql> DELETE FROM proc WHERE db = 'evil';
        Query OK, 2 rows affected (0.00 sec)
        
        mysql> drop database evil;
        Query OK, 0 rows affected (0.00 sec)
        

        【讨论】:

        • 调查这个假设。谢谢。
        • 奇怪的是我的mysql.proc 表中没有任何行。任何想法为什么会这样。我承认我不知道mysql.proc 表中的数据或其数量应该是什么样的。
        • 我的(在我的笔记本电脑上)也完全是空的。在服务器上,我看到其中定义了几个函数。可能如果您没有任何CREATEd FUNCTION,则该表保持为空。但是,它不太可能是导致问题的表。尝试目录破解,看看它是否有帮助。
        • 我试图停止 MySQL 但收到此错误:错误!找不到 MySQL 服务器 PID 文件!
        • 我必须做的一件事就是将所有权更改为 mysql。 sudo chown -R mysql:mysql evildb
        【解决方案5】:

        我会尝试:

        • 备份/保存任何包含重要数据的数据库。
        • 删除 mySQL
        • 重新安装 mySQL
        • 恢复所有备份的数据库。

        【讨论】:

        • 在尝试手动修复损坏和许多建议以及此处列出的其他答案之后,重新安装 mySQL 是解决我的问题的唯一方法。在 Mac(运行 10.8.2)上,我还必须手动删除以进行全新安装: sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My* sudo rm -rf /Library/Receipts/mysql* sudo rm -rf /Library/Receipts/MySQL* sudo rm /etc/my.cnf
        猜你喜欢
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多