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

有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.)
  • 该问题可见 mysql版本不同 表创建问题 重新创建一下表结构

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.
  • 查看table name.ibd 文件是否存在,文件权限是否正确

Cannot delete or update a parent row: a foreign key constraint fails ()
  • 删除数据库外键配置

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

你可能感兴趣的:(记一次使用ibd和frm数据库恢复操作)