如何解决数据损坏问题?无法在表

时间:2016-07-05 19:06:36

标签: mysql innodb mysqldump corruption

我正在研究一个查询具有两个表的数据库的Web应用程序。我想我的数据损坏问题。我的一张桌子很好,我把它丢弃并备份了。我从一些使用python脚本解析过的MongoDB数据中填充了数据库。

我正在使用HeidiSQL来处理我的数据库,除非我指定" innodb_force_recovery = 4"否则我无法查看损坏的表。 (我相信在my.ini中创建了一个只读版本的表)。即便如此,在指定该条件后,我也无法在表上执行mysqldump。

然后我想,也许是HeidiSQL的问题。它不是。即使从命令行mysqld,我也无法对损坏的数据库执行任何操作。下面我显示了我收到的错误消息。

Error message in mysqld as viewed via command line

即使XAMPP控制面板在启动时也会抛出以下错误:

  

160705 14:41:34 [错误] mysqld得到异常0x80000003;   这可能是因为你遇到了一个bug。这个二进制文件也有可能   或者它所链接的其中一个图书馆是腐败的,不正确的,   或配置错误。此错误也可能是由硬件故障引起的。

因此。此时,我可以重新运行我的python脚本,但我认为我会遇到同样的错误。

您如何建议我去处理这个问题?

1 个答案:

答案 0 :(得分:0)

表空间已损坏,您的最终目标是从头开始转储并重新创建InnoDB表空间。

当您从innodb_force_recovery=4开始逐个转储所有表时。编写一个循环遍历所有数据库和所有表的脚本。将--skip-lock-tables添加到mysqldump,有时会有帮助。

然后尝试更高的innodb_force_recovery:5和6值。尝试转储使用innodb_force_recovery=4崩溃MySQL的剩余表。

如果你仍然无法转储表格,那么请谷歌搜索" percona数据恢复工具包"或" undrop-for-innodb"。这些工具都可以在较低级别使用InnoDB表空间,并允许从InnoDB页面获取记录,以便跳过损坏的区域。

当你有所有转储时,删除所有innodb文件(ibdata1,ib_logfile *和* .ibd,如果有的话)并导入转储。