首页  >  问答  >  正文

从 .ibd 文件恢复 MySql 表:一个持续的挑战

MySQL 服务器突然停止工作,服务会断断续续,我无法进行备份,因为服务无法运行,所以我能做的最好的就是复制整个 DATA 文件夹。

此外,我有一个较早的备份,因此使用它与 ibd 文件一起恢复了所有表,除了最后一个表,它说:

ERROR 1808 (HY000): Schema mismatch (Clustered index 
validation failed. Because the .cfg file is missing, table 
definition of the IBD file could be different. Or the data file 
itself is already corrupted.)

我不知道该怎么办。

P粉848442185P粉848442185294 天前544

全部回复(1)我来回复

  • P粉311563823

    P粉3115638232023-12-31 00:08:37

    我认为您唯一能做的就是依赖备份中的表版本。您无法恢复复制的 .ibd 文件。

    错误消息表明发生了以下两种情况之一:

    • 自备份后表结构已更改,因此 .ibd 文件不再与数据字典中存储的元数据匹配。当表空间文件的内容与元数据不匹配时,InnoDB 与您处于同一条船上:“我不知道该怎么办。”

    • 即使表结构没有改变,.ibd 文件的物理损坏也足以使 InnoDB 无法读取。

    无论哪种方式,InnoDB 都无法读取该表空间文件。

    显然,如果您成功恢复所有其他表,这会产生问题。现在,大多数表中都有更多最新数据,除了最后一个表,该表已过时。如果这些表中存在相互引用的行,则它们可能具有孤立记录(例如,显示某个用户购买了产品的记录,但用户表中不存在该用户)。

    这是不幸的,而且很难纠正。

    一般来说,复制 .ibd 文件并不是备份 InnoDB 数据库的可靠方法。您需要使用适当的备份工具,例如 mysqldump 或 Percona XtraBackup。

    在上次备份后恢复数据的另一个解决方案是使用二进制日志文件进行时间点恢复。但要实现这一点,您需要自最近备份以来的所有二进制日志文件,并且备份需要有关进行备份时二进制日志位置的信息。请参阅 https://dev.mysql.com/doc /refman/en/point-in-time-recovery.html

    回复
    0
  • 取消回复