为什么我不能丢弃MySQL数据库?

时间:2013-01-05 16:07:24

标签: mysql database macos pid

问题

我在 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

咨询的文章

5 个答案:

答案 0 :(得分:2)

我会尝试:

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

答案 1 :(得分:2)

我在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可以解决问题(但请检查里面目录以验证权限和所有权是否为copacetic。)


最后,我采用了以下丑陋的黑客攻击(在尝试停止,重新启动并修复REPAIR所针对的任何内容之后):

  • 创建了一个数据库“scapegoat”
  • 停止了MySQL服务器
  • 将MySQL服务器创建的目录/ var / lib / mysql / scapegoat复制到/ tmp
  • 重新启动MySQL Server,删除了数据库“scapegoat”,停止了服务器
  • 现在我有一份干净,空的DB目录的副本,MySQL不再了解它。
  • 将“evildb”目录移动到/ tmp(这样如果出现问题我可以把它放回去)
  • 将“scapegoat”目录移至/ var / lib / mysql,将其重命名为“evildb”
  • 启动MySQL服务器
  • 目前还不确定我是否再进行了维修
  • 并且“evildb”数据库变得可以删除!

我的解释是,当被要求删除数据库时,MySQL Server首先对数据库目录中的文件执行一些检查。如果这些检查失败,则丢弃也会失败。这些检查必须与REPAIR执行的检查略有不同。也许在受影响的目录中有一些意外的事情。

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

更新

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

USE mysql;
SELECT * FROM proc;

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

TEST

我对上述更新进行了部分验证。通过故意将垃圾插入到proc表中,然后使用新创建的数据库evil,我部分重现您的症状(无法获取数据库,MySQL连接崩溃)尝试)。错误号码不是1548;但也许会是,如果我在该表中插入正确的垃圾......无论如何,有用的是通过删除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)

答案 2 :(得分:2)

我遇到了一个问题,我的数据库(名为:caloriecalculator)的查询耗时太长而且根本不会丢失。我按照以下步骤操作,修复了我的问题:

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

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

    2. 现在运行:drop database caloriecalculator;

    3. enter image description here

答案 3 :(得分:2)

如果在Windows中使用xampp

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

enter image description here

回家->数据库->单击您的[数据库名称]->删除

OR

您还可以手动删除数据库

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

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

答案 4 :(得分:0)

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