Wiederherstellen von MySql-Tabellen aus .ibd-Dateien: eine ständige Herausforderung
P粉848442185
P粉848442185 2023-12-30 12:03:47
0
1
546

Der MySQL-Server funktionierte plötzlich nicht mehr, der Dienst war zeitweise ausgefallen, ich konnte keine Sicherung durchführen, weil der Dienst nicht lief, also konnte ich am besten den gesamten DATA-Ordner kopieren.

Außerdem hatte ich ein älteres Backup, also stellte die Verwendung dieses zusammen mit der ibd-Datei alle Tabellen außer der letzten wieder her, in der stand:

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

Ich weiß nicht, was ich tun soll.

P粉848442185
P粉848442185

Antworte allen(1)
P粉311563823

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

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

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

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

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

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

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

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

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!