在Mysql数据库中删除损坏的表

8

我在一个名为“e_learning_resource_prelive”的mysql数据库中损坏了“sessions”表(或其他原因)。通常情况下这不是问题,因为我可以回到数据库的备份。然而,这个损坏的表似乎阻止我删除数据库:

> mysqladmin -u root drop e_learning_resource_prelive
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'e_learning_resource_prelive' database [y/N] y
mysqladmin: DROP DATABASE e_learning_resource_prelive failed;
error: 'Unknown table 'sessions''

当我进入数据库时,会在show_tables中显示sessions表(它是唯一存在的,mysqladmin drop命令已经删除了其他表),但我无法删除它:

mysql> show tables;
+---------------------------------------+
| Tables_in_e_learning_resource_prelive |
+---------------------------------------+
| sessions                              | 
+---------------------------------------+
1 row in set (0.00 sec)

mysql> drop table sessions;
ERROR 1051 (42S02): Unknown table 'sessions'

有人能告诉我如何删除这个表或整个数据库吗? 我需要删除数据库,然后从备份转储中重新构建它。

3个回答

7

已经弄清楚了,现在似乎很明显。所有的数据库都只有一个文件夹,可以像其他文件夹一样删除。

sudo rm -r /var/lib/mysql/e_learning_resource_prelive

感谢任何查看此内容的人 :) max


我为我的Drupal网站做了这件事...我尝试了所有其他方法,但都没有起作用。只需删除文件即可。我希望早点知道这个方法... - Patoshi パトシ

1

session 是一个保留关键字(http://developer.mimer.com/validator/sql-reserved-words.tml),我认为这就是你的数据库损坏的原因。

我曾经遇到过同样的问题,使用了一个保留关键字(references),并且重命名、删除或截断表格时都会出现 SQL 错误。

要解决这个问题,在 alter table 查询中使用反引号字符即可。

ALTER TABLE `session` RENAME TO newname

这样查询就不会失败,你的数据还在(感谢上帝!)。我希望有人会觉得这很有用!


-1

使用GUI界面。 sessions名称中可能有一些不太可打印的字符。

或者底层文件系统上的文件被删除了? 如果是这样,请尝试在那里创建一个名为sessions的空文件。


谢谢Wally,但数据库在Linux服务器上,所以我无法运行任何图形界面工具来查看它,我想。 - Max Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接