有idata1文件的话好像更好恢复,以下步骤亲自尝试,屡试不爽。数据无价,请做好备份。
-
首先恢复表结构
- 首先建立所有需要恢复数据的表,相同的表名(内部字段随意)。
- 停止mysql服务,将所有的frm文件替换掉当前数据目录文件中的frm,请注意备份当前数据库文件,避免失败后数据库无法正常使用。
- 文件授权,下同:
chown -R mysql:mysql *.frm / chown -R mysql:mysql *.ibd
- 启动mysql服务 进入mysql
-
开始恢复表数据
- 将全部的表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 TABLEfoo
(. . .) 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 ()
- 删除数据库外键配置
此上 就完成了数据恢复 欢迎补充,仅表示:亲测有效,接受吐槽。