蓝易云

Mysql 通过 frm 和 ibd 文件恢复使用 InnoDB 引擎的数据

383次阅读
2条评论

共计 1035 个字符,预计需要花费 3 分钟才能阅读完成。

说明

mysql Myisam 引擎直接复制数据库目录即可。

mysql InnoDB 引擎需要通过 .frm 和.ibd 文件恢复。

一、恢复表结构

1、创建和原来一样的数据库

CREATE DATABASE [IF NOT EXISTS] test-base

2、创建需要恢复的表 (表名需要和恢复的一致)

分两种情况:
1)知道表结构:CREATE TABLE test-table ()
2)不知道表结构:CREATE TABLE test-table (id int) 随便先创建一个

3、停止 mysql

4、覆盖 frm 文件

用原来的 test-table.frm 覆盖新创建的

5、配置my.ini文件

mysqld下 配置 innodb_force_recovery = 6

6、重启 mysql

7、确定表字段个数 (如果知道表字段个数,desc test-table 将正常输出)

1)、查看表结构 desc test-table看见报错。
2)、查看 data 的 err 结尾文件,看见报错 [Warning] InnoDB: Table wangyi/songlyric contains 1 user defined columns in InnoDB, but 6 columns in MySQL.
3)、根据提示从第2步开始新建 create table test-table(id int,id1 int,id2 int,id3 int,id4 int,id5 int);

8、获取 test-table 的创建语句,重新创建表

1)注释 mysqld下 innodb_force_recovery = 6
2)删除表 drop table test-table
3)执行创建表语句新建表
可以看到和之前通过navicat查看得到的创建表的sql语句相比,末尾多了ROW_FORMAT=COMPACT;

二、恢复表数据

1、.ibd与.frm文件解除绑定

恢复表数据需要首先将原先的.ibd文件与原先的.frm文件解除绑定,具体就是在控制台执行下面命令:
alter table test-table discard tablespace;

2、停止 mysql

3、覆盖 ibd 文件

4、重启 mysql

5、.ibd与.frm文件恢复联系

alter table test-table import tablespace;

整个恢复过程其实可以总结为下面几步:
(1) 恢复表结构
(2) 复制出来创建表的 sql 语句
(3) 恢复表数据(在恢复表数据的时候,首先需要解除当前创建的表与默认生成的.ibd文件间的关系,接着将要恢复数据表的.ibd文件与当前创建的表联系起来即可)

提醒:本文发布于625天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2023-03-09发表,共计1035字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(2条评论)
World 评论达人 LV.1
2023-03-09 14:47:26 回复

b不错不错
导航栏的“开往”报错了

 Macintosh  Chrome  中国浙江省宁波市电信
    阿蛮君 博主
    2023-03-09 14:50:34 回复

    @World 谢谢,哈哈哈。开往是一个随机去下一个博客开源项目,偶尔他们那边会有点问题,刷新一下就好啦

     Windows  Edge
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock