记一次使用ibd和frm数据库恢复操作

2020-06-20  本文已影响0人  Amazing大龙大龙

有idata1文件的话好像更好恢复,以下步骤亲自尝试,屡试不爽。数据无价,请做好备份。

  1. 首先恢复表结构

    • 首先建立所有需要恢复数据的表,相同的表名(内部字段随意)。
    • 停止mysql服务,将所有的frm文件替换掉当前数据目录文件中的frm,请注意备份当前数据库文件,避免失败后数据库无法正常使用。
    • 文件授权,下同:
    chown -R mysql:mysql *.frm / chown -R mysql:mysql *.ibd
    
    • 启动mysql服务 进入mysql
  2. 开始恢复表数据

    • 将全部的表discard tablespace 使用以下sql 此操作会删除 idb文件,请注意备份
    alter table table_name discard tablespace;
    
    • 检查看看还有没有剩余的ibd文件,看下是否全部被自动删除。
    • 然后将旧的数据库 ibd文件 拷贝到当前数据目录文件中
    • 文件授权
    • 将全部的表 import tablespcae 使用sql
    alter table table_name import tablespace;
    

以上几个步骤会出错的几个点 排查:

Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)

When trying to create a table with the same definition on 5.7, you’ll need to change it to:
CREATE TABLE foo (. . .) ENGINE=InnoDB ROW_FORMAT=compact


Tablespace is missing for table database name.table name.

Cannot delete or update a parent row: a foreign key constraint fails ()

此上 就完成了数据恢复 欢迎补充,仅表示:亲测有效,接受吐槽。

上一篇 下一篇

猜你喜欢

热点阅读