我正在研究一个查询具有两个表的数据库的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脚本,但我认为我会遇到同样的错误。
您如何建议我去处理这个问题?
答案 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,如果有的话)并导入转储。