anyongjin / mysql_ibd

import data from ibd files for mysql
MIT License
30 stars 5 forks source link

ERROR 1808 (HY000) Schema mismatch .cfg file is missing mark #12

Closed kumv-net closed 10 months ago

kumv-net commented 10 months ago

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.) 这个很难解决 ,可以在有历史备份文件的情况下尝试手动恢复。 如果还有整个数据库服务器文件的Data目录,跟ibdata1文件之类有关。哪怕是几个月前的快照也好!只要数据结构差距不大。[mysqld]下新增一句innodb_force_recovery=4 或者 6,【mysql8没有ib_logfile0,ib_logfile1,对应的是#innodb_redo目录可以不删】然后尝试启动mysqld;(强制恢复数据,跳过有问题的数据内容)。 基本上有源数据库的目录文件都能恢复出来,但是有的表就比较奇葩

ROW_FORMAT的锅,不过默认基本都是启用的..... 直接通过 innodb_force_recovery=6还是不能恢复 ,现象例如打开 .cfg file is missing的表mysql直接报错停止运行,可以尝试生成新的cfg文件 FLUSH TABLES ... FOR EXPORT 运行时, InnoDB 在表的架构目录中生成元数据 .cfg 文件。(我不知道我是不是这么取巧恢复的,使用旧备份数据库EXPORT 生成cfg 文件,然后关闭,删除表旧的ibd文件,把新版本有较新数据需要恢复的ibd文件扔过来。innodb_force_recovery=4 或者 6 启动让mysql自行读取恢复) 好像id int自增的库容易出现 mysql 需要cfg来恢复自增值之类的

https://dev.mysql.com/doc/refman/8.0/en/innodb-table-import.html#innodb-table-import-prerequsites https://blog.csdn.net/ai_feng123/article/details/83032343

其他: 报foreign key 错误的可以先导入数据时强制忽略,比较表关联关系有先后顺序

only_tbls: list = config.get('only_tbls')
    cursor.execute(f"SET FOREIGN_KEY_CHECKS=0;")
kumv-net commented 10 months ago

字段不一致的配置 innodb_force_recovery=4 或者 6 前执行差异的sql, 修改,追加字段即可,字段不一致恢复出来的数据导出sql 内容混乱。

anyongjin commented 10 months ago

感谢反馈,欢迎提交pull request哈