19

问题

我在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 am [纽约]

日志和反馈(根据@Thomas 在评论中) 要查找所有日志,我运行(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 pm [纽约]

我跑了这个:

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

查阅的文章

4

5 回答 5

6

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

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

mysql进程

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

  2. 现在运行:drop database 卡路里计算器;

在此处输入图像描述

于 2018-01-27T21:49:52.853 回答
3

我会尝试:

  • 备份/保存任何具有重要数据的数据库。
  • 删除 mySQL
  • 重新安装 mySQL
  • 恢复任何备份的数据库。
于 2013-01-05T16:22:59.087 回答
2

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

更新:要做的一件事是进入 MySQL 数据库目录并执行ls -la, 以验证 evil DB 在权限、所有权等方面与其他数据库相同。例如,这里的“原始”数据库不能被删除(它是由一个以 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将解决问题(但检查目录内部以验证是否存在权限和所有权)。


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

  • 创建了一个数据库“替罪羊”
  • 停止 MySQL 服务器
  • 将 MySQL 服务器创建的目录 /var/lib/mysql/scapegoat 复制到 /tmp
  • 重新启动 MySQL 服务器,删除数据库“替罪羊”,停止服务器
  • 现在我有一个干净的、空的 DB 目录的副本,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;但也许它会是,如果我在那个表中插入了正确的垃圾......无论如何,有用的一点是通过删除对数据库的所有引用evil,后者再次变得可丢弃:

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)
于 2013-01-05T16:39:14.240 回答
1

如果你在 windows 中使用 xampp

您还可以使用 phpmyadmin 删除数据库

在此处输入图像描述

转到主页 -> 数据库 -> 单击您的 [数据库名称] -> 拖放

或者

您也可以手动删除数据库

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

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

于 2018-07-10T16:37:35.607 回答
1

我遇到了同样的问题,我所做的就是从 mysql 数据目录中删除数据库目录。

于 2019-01-10T11:57:38.057 回答