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

问题描述 投票:14回答:5

Problem

我在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)为了找到所有日志,我跑了(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

文章咨询

mysql database macos pid
5个回答
2
投票

我会尝试:

  • 备份/保存任何具有重要数据的数据库。
  • 删除mySQL
  • 重新安装mySQL
  • 还原所有备份的数据库。

3
投票

我遇到了一个问题,我的数据库(名为:caloriecalculator)的查询花了太长时间,它根本不会掉线。我按照以下步骤操作,修复了我的问题:

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

mysql processes

  1. 杀死与caloriecalculator相关的所有进程,因为它阻止我的下一个查询被执行。 mysqladmin -u root -p kill 4
  2. 现在运行:drop database calorie calculator;

enter image description here


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所针对的任何内容之后):

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

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

我认为这是在SuSE 11.2 Linux发行版上的MySQL 5.1或5.2上。希望能帮助到你。

UPDATE

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

USE mysql;
SELECT * FROM proc;

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

测试

我对上述更新进行了部分验证。通过故意将qbxswpoi表中的垃圾插入到新创建的数据库proc中,我部分地再现了您的症状(无法获取的数据库,尝试时MySQL连接崩溃)。错误号码不是1548;但也许会是这样,如果我在该表中插入了正确的垃圾......无论如何,有用的是通过删除对evil db的所有引用,后者再次变得可以丢弃:

evil

1
投票

如果您在Windows中使用xampp

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

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)

转到主页 - >数据库 - >单击[数据库名称] - >删除

要么

您也可以手动删除数据库

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.