从 .ibd 文件 MySql 恢复表时出现问题

问题描述 投票:0回答:2

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.)

我不知道该怎么办。

mysql database-schema database-administration
2个回答
1
投票

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

.ibd
文件。

错误消息表明发生了以下两件事之一:

  • 自备份以来表结构发生了变化,因此

    .ibd
    文件不再与数据字典中存储的元数据匹配。当表空间文件的内容与元数据不匹配时,InnoDB 与您处于同一条船上:“我不知道该怎么办。”

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

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

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

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

一般来说,复制

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

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


0
投票

检查您是否未受到以下影响: https://bugs.mysql.com/bug.php?id=113440

© www.soinside.com 2019 - 2024. All rights reserved.