Xampp 中的 InnoDB 损坏

Posted

技术标签:

【中文标题】Xampp 中的 InnoDB 损坏【英文标题】:InnoDB Corruption in Xampp 【发布时间】:2015-08-16 23:45:57 【问题描述】:

我有两周前的备份,这将是最后的手段,但数据库文件本身似乎很好,而且似乎只是 ibdata1 文件有问题。如前所述,我正在使用 Xampp,并且 mysql 在我启动它后立即崩溃。这是错误日志:http://textuploader.com/7vfd

我没有做任何不寻常的事情;它似乎刚刚启动并停止工作。

我查看了 InnoDB 恢复,但我尝试的解决方案要求 MySQL 能够正常工作,这不是由于损坏。有没有办法用坏的ibdata1 文件挽救可能完好无损的 IBD 文件?

编辑:我知道使用 innodb_force_recovery = # 并且我已经尝试过了...除了我在错误的 my.ini 中尝试过它。我必须使用bin 文件夹中的那个。它现在似乎已修复。

【问题讨论】:

你尝试过 innodb_force_recovery=6 吗? @akuzminsky 我曾尝试将其放在my-default.ini 中的mysql 文件夹中的[mysqld] 正下方xampp 文件夹中,但它似乎没有任何效果。那是正确的地方吗? 是windows吗?那么它必须是 my.ini 【参考方案1】:

在我的例子中,mysql.ini 没有 innodb_force_recovery 选项。 于是我把它添加到文件中,启动就可以正常启动了

我的案例的ini文件的位置是

C:\xampp\mysql\bin\my.ini

innodb_force_recovery = 1

就我而言,Windows 检查磁盘后数据已损坏。在适当的时候,数据库被破坏了。

希望这也可以帮助那里的人。

【讨论】:

【参考方案2】:

ibdata1 文件包含有关您的 Mysql 数据库的表空间信息和其他元数据。

您可以尝试使用innodb_force_recovery = 1 一直到innodb_force_recovery = 6 看看是否可以解决问题。尝试在您的 my.cnf(Windows 为 my.ini)文件中更改此设置,然后再次尝试重新启动您的 mysql 服务器。

如果您能够使用恢复标志启动 Mysql,您的数据库将处于只读模式。您应该对数据进行 mysqldump,停止 mysql,重新安装,再次创建数据库,然后重新导入数据。

这里是有关 innodb 恢复dev.mysql 的更多信息的链接。

如果你使用 linux...

另一个更复杂的选择是使用 percona 恢复工具包。这将重新调整您的表空间。虽然,从经验来看,如果您是新手,导航有点挑战,并且需要一些时间来实施。

但是,工具包的创建者 akuzminsky(这太酷了!)提到他对工具包进行了重大改进。

工具包下载链接Percona.com

链接来自chriSQL的演练。

链接到akuzinsky 的网站TwinDB。

除非这些数据是关键任务,否则我只会恢复到 2 周前的备份。您最终可能会花费大量的时间和精力来恢复这些数据。

【讨论】:

fwiw,我不支持 percona 数据恢复工具包。 launchpad.net/undrop-for-innodb中发布的具有新功能和错误修复的下一个版本 TwinDB 是我离开 Percona 后创办的一家公司。为了继续开发数据恢复工具包,我创建了 undrop-for-innodb。顺便说一句,恢复损坏的数据库并不难,该工具包现在非常友好:) 在意识到我在错误的文件中之后,一切都变得更顺利了......在我运行恢复之后,我是删除该行并且一切都恢复正常还是我必须担心完整性文件仍然存在,这是导出它的快速修复方法吗? Chris 的教程基于 2008 年左右的 0.3 版。七年前!从那时起,工具包变得更加智能。我添加了大量的新功能。它们对用户来说不是很明显,但使恢复算法更可靠。我在两个小时内完成了大多数损坏数据恢复案例。损坏是最简单的情况,因为字典是有效的,所有文件都可以访问。 非常酷...有机会我会检查一下...希望我不会也有:-)...很高兴见到你,感谢你用你的工具包救了我!

以上是关于Xampp 中的 InnoDB 损坏的主要内容,如果未能解决你的问题,请参考以下文章

如何修复损坏的 xampp 'mysql.user' 表?

pc崩溃后Xampp mysql innodb恢复失败

MySQL InnoDB 表损坏——如何修复?

XAMPP 中的 MySQL 无法启动

MySQL 在 Windows 中的 XAMPP 上不断崩溃

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