如何在mysql中修复或删除/创建损坏的表?

时间:2014-03-31 06:07:44

标签: mysql database recover repair

情况:我有一个包含104个表的MySQL数据库,在Windows 7上的XAMPP上本地运行。所有表都有InnoDB引擎。 XAMPP MySQL作为Windows服务运行。作为前端,我有PHP(CodeIgniter)。

问题:昨晚我像往常一样停止了项目工作并正常关闭了Windows。今天早上我在浏览器中收到错误table MY_TALBE does not exists。控制台上的show tables显示表名,但desc MY_TABLEselect * from MY_TABLE表示unknown table。我尝试create table MY_TABLE(...),但我的错误为table MY_TABLE already exists,所以我尝试drop table MY_TABLE,但它说Unknown table MY_TABLE!我尝试了 mysqlcheck.exe 进行修复和检查,但两者都失败了,但在此之后,show tables不再显示表名。我需要提一下我没有更改/移动/删除/重命名任何mysql文件。我也不能放弃数据库:

mysql> drop database MY_DB;
No connection. Trying to reconnect...
Connection id:    1
Current database: *** NONE ***

问题:是否可以恢复/修复MY_TABLE,或至少如何删除并再次创建它(不丢弃数据库并再次重新启动它)?

1 个答案:

答案 0 :(得分:2)

在dba.stackexchnage.com上询问 the same question之后,我发现我的解决方案如下:

损坏的表格无法修复或无法恢复。唯一的方法是健康备份数据库,并使用损坏的表来清理数据库的健康表,然后从数据库文件中清除MySQL的基础结构,即从磁盘中删除文件,然后重新启动,即恢复所有数据库和表并重新创建损坏的表。链接的文章还提到可以恢复损坏表的一些数据。

还有一些像 Percona 这样的工具可用于恢复损坏的InnoDB表,但它不适用于Windows。

有关详细信息,请参阅上述链接。