我在Mac OS 10.8.2上运行MySQL 5.5.23并且无法删除特定数据库,但我可以删除其他数据库。
当我尝试删除特定的表时,我收到此错误:
#1548 - Cannot load from mysql.proc. The table is probably corrupted
$ sudo /usr/local/mysql/support-files/mysql.server stop
但收到此错误ERROR! MySQL server PID file could not be found!
REPAIR TABLE mysql.proc
REPAIR TABLE mysql.proc USE_FRM
REPAIR TABLE mysql.*
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
我仍然无法删除原始的特定数据库,但可以删除其他数据库。
日志和反馈(根据评论中的@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
。
我跑了这个:
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
我会尝试:
我在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 Server首先对数据库目录中的文件执行一些检查。如果这些检查失败,则丢弃也会失败。这些检查必须与REPAIR
执行的检查略有不同。也许在受影响的目录中有一些意外的事情。
我认为这是在SuSE 11.2 Linux发行版上的MySQL 5.1或5.2上。希望能帮助到你。
回想起来,我不记得有关“proc”的错误。所以我不太确定问题出在目录中。它可能与proc
表连接,而不是表损坏。您是否尝试过目视检查proc
数据库表,以便找到属于邪恶数据库的内容?
USE mysql;
SELECT * FROM proc;
那或其中的任何错误可以帮助解决问题。你可能知道,有一些错误的db
专栏。在紧要关头,您可以导出proc
表并在清理后重新加载它(通过SQL或通过磁盘文件)。
我对上述更新进行了部分验证。通过故意将qbxswpoi表中的垃圾插入到新创建的数据库proc
中,我部分地再现了您的症状(无法获取的数据库,尝试时MySQL连接崩溃)。错误号码不是1548;但也许会是这样,如果我在该表中插入了正确的垃圾......无论如何,有用的是通过删除对evil
db的所有引用,后者再次变得可以丢弃:
evil
如果您在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 - > [数据库名称]
立即删除您的[数据库名称]。
我有同样的问题,我所做的就是从mysql数据目录中删除数据库目录。