情况:我有一个包含104个表的MySQL数据库,在Windows 7上的XAMPP上本地运行。所有表都有InnoDB引擎。 XAMPP MySQL作为Windows服务运行。作为前端,我有PHP(CodeIgniter)。
问题:昨晚我像往常一样停止了项目工作并正常关闭了Windows。今天早上我在浏览器中收到错误table MY_TALBE does not exists
。控制台上的show tables
显示表名,但desc MY_TABLE
和select * 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
,或至少如何删除并再次创建它(不丢弃数据库并再次重新启动它)?
答案 0 :(得分:2)
在dba.stackexchnage.com上询问 the same question之后,我发现我的解决方案如下:
损坏的表格无法修复或无法恢复。唯一的方法是健康备份数据库,并使用损坏的表来清理数据库的健康表,然后从数据库文件中清除MySQL的基础结构,即从磁盘中删除文件,然后重新启动,即恢复所有数据库和表并重新创建损坏的表。链接的文章还提到可以恢复损坏表的一些数据。
还有一些像 Percona 这样的工具可用于恢复损坏的InnoDB表,但它不适用于Windows。
有关详细信息,请参阅上述链接。