在这种情况下,我该如何处理损坏的 InnoDB 格式的数据库?

在这种情况下,我该如何处理损坏的 InnoDB 格式的数据库?

伙计们,

我遇到了一个大问题。有一台服务器装有 CRM 数据库。我可能损坏了它,不知道该怎么办。

ls /var/lib/mysql/sugarcrm/
accounts_audit.frm      address_book.ibd     contacts_audit.frm           emails_email_addr_rel.ibd   mkt_marketiery_accounts_c.frm     pm_processmanagerstagetask.frm     quotes.frm              uni_webinars.frm
accounts_audit.ibd      bugs_audit.frm

等等。当我尝试观看或进行更改时,我收到

mysql> select * from vcals limit 1;
ERROR 1146 (42S02): Table 'sugarcrm.vcals' doesn't exist

mysqld.log:

130515 11:34:02130515 11:34:02 [错误] 无法从 InnoDB 的内部数据字典中找到表 sugarcrm/vcals,尽管该表的 .frm 文件存在。也许您已删除并重新创建 InnoDB 数据文件,但忘记删除 InnoDB 表的相应 .frm 文件,或者您已将 .frm 文件移动到另一个数据库?请参阅http://dev.mysql.com/doc/refman/5.0/en/innodb-troubleshooting.html 如何解决该问题。

问题是我没有 .ibd 文件,只有 .frm。此外,我也没有 DB 的完整备份 .sql 文件。现在我导入了 5 月 9 日的 .sql,这已经是很久以前的事了。:( 我知道 .frm 不包含数据,只包含结构。

问题是:我能以某种方式修复吗?或者这个数据库副本无法修复?一般来说,如果我有 .ibd 文件,可以使用什么方法修复数据库?就我而言,我认为 5 月 9 日的备份是最好的选择。我没有出口,不是吗?

谢谢。

答案1

首先,如果文件不存在,请检查系统日志中是否存在文件系统/磁盘错误,因为这是一个非常奇怪的情况。

之后检查文件系统(停止 mysql、umount 和 fsck -f)查看是否存在错误并且 fsck 是否能够修复它们。

如果这些步骤不能解决您的问题,您可以检查二进制日志文件,也许它早于 5 月 9 日,然后您可以在此之后恢复二进制日志。

相关内容