起因是这样的,公司的领导表示说服务器崩了,修理好之后,只剩下数据库目录下的物理文件(即.frm文件与.ibd文件)。然后,整了一份压缩包给我,叫我瞅一下能不能把数据恢复出来。我当场愣了一下,这都啥文件啊,以前天天整开发,也没见到这种玩意啊。虽然对这文件不是很熟悉,但是领导交给我了,我也不能推脱,好歹要努力一下看看。

环境准备:

1.本文使用的是Windows 笔记本*1 ( 系统可以是Windows、也可以是CentOS、Debian等等MySQL Utilities能兼容的都行)

2.MySQL 5.7+

一、什么是.frm文件

那么首先我要做的事情就是这.frm结尾的文件到底是什么东西?

我通过百度找到了MySQL官网,我点进去一看,第一段就是下面这句话。凭借着我不怎么样的英文,往下看了三行,发现了标红框的两句话。

得到的结论就是:

1..frm文件描述了表的格式,也就是说里面能获取到表的定义

2..frm文件与表格的名字相同

二、什么是.ibd文件

经过上面的猜测,很容易就可以联想到表结构都有了,那么这个.ibd文件可能就是存放数据、索引信息之类的了。

经过一番的百度,查阅到以下资料:

.ibd文件是使用InnoDB引擎的表产生的索引和数据文件。

(如果引擎使用的是MyISAM的话,会产生索引和数据分开存放的两个文件,.MYI(索引文件)和.MYD(数据文件))

三、获取frm文件的表结构信息

接下来,知道了有这么些文件,那么怎么把数据读取出来呢?

MySQL 提供了一款支持多个平台的工具软件,叫做MySQL Utilities。

这个工具包括克隆、复制、比较、差异、导出、导入、解析frm文件等功能。同时,这款软件支持多种系统使用,使用方法都是一致的。

(附下载地址:http://dev.mysql.com/downloads/utilities/)

通过命令:

 mysqlfrm [.frm文件地址] --diagnostic

就可以查看frm文件包含的完整表结构了。

于是我手写了一个批处理脚本,把frm文件的表格结构都读取出来放在一个文本文件里,这样就获取到了所有的表结构。

CHCP 65001>nul
@echo off
for %%i in ([frm文件所在目录]\*.frm) do (
  mysqlfrm %%i --diagnostic >> test.txt
)
pause

接着就是创建对应的数据库,把表结构的语句输入,执行一下SQL就可以了。

四、表结构有了,就可以开始恢复.ibd数据了

先把数据库里自带的数据文件脱离(脱离之后,表对应的.ibd文件会被删除)。

alter table aaa discard tablespace; 

然后把原先的.ibd文件复制到数据库存放的数据目录。

不知道在哪的同学,可以执行以下语句查看数据目录位置:

这个目录里面是按照数据库分目录的:

找到我们自己的数据库,把.ibd文件复制进去。

到了这一步,就可以准备关联数据了。

执行以下命令关联数据:

alter table aaa import tablespace; 

五、成功之后,就可以验证数据了。

在上述的过程中,我是批量操作的。

1.批量获取表结构

2.批量创建表

3.批量脱离表数据。

4.批量管理表数据。

最后,成功恢复数据。

感谢收看。

MySQL 通过.frm文件和.ibd文件实现InnoDB引擎的数据恢复的更多相关文章

  1. MySQL 利用frm文件和ibd文件恢复表结构和表数据

    文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...

  2. 重新学习MySQL数据库7:详解MyIsam与InnoDB引擎的锁实现

    重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现 说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同. 三类常见引擎: MyIsam :不支持事务,不 ...

  3. 为什么 MySQL 回滚事务也会导致 ibd 文件增大?

    一个简单的测试: start transaction; insert into tb1 values(3, repeat('a', 65000),'x',1); --commit; rollback; ...

  4. mysql InnoDB引擎 共享表空间和独立表空间(转载)

    PS:innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等.对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间. 1.什么是共享表空间和独占表空 ...

  5. MySQL frm+ibd文件还原data的办法【数据恢复】

    MySQL frm+ibd文件还原data的办法[数据恢复] 此方法只适合innodb_file_per_table          = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1 ...

  6. 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

    参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...

  7. mysql通过frm+ibd文件还原data

    此方法只适合innodb_file_per_table          = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1.准备工作 1)准备一台纯洁的mysql环境[从启动到现在没有 ...

  8. MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据

    数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...

  9. MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据

    记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...

随机推荐

  1. show engine innodb status 输出结果解读

    show engine innodb status 输出结果解读 基于MySQL 5.7.32 最近想整理一下show engine innodb status的解读,但是发现中文互联网上相关的信息要 ...

  2. 1082 Read Number in Chinese

    Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese ...

  3. 09- Linux下压缩和解压命令

    压缩和解压命令 gzip命令: 作用: tar命令 作用:对文件或文件夹进行打包和解包的操作. 格式:tar [选项] 文件名 [文件名或路径] 练习题:

  4. 常用head标签

    最小推荐 <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content= ...

  5. Windows远程时无法复制文件--杀进程rdpclip.exe,然后再启动

    1.远程登陆到主机上 2.任务管理器杀进程rdpclip.exe 3.[开始],搜索rdpclip.exe,点击运行 此时重新复制文件,可以跨主机复制啦 原以为是公司网络限制,现在看来还是没那么先进嘛

  6. php 操作 redis 常用命令

    原文地址: https://www.cnblogs.com/zhanghanwen16/p/9510481.html 1.redis连接与认证 //连接参数:ip.端口.连接超时时间,连接成功返回tr ...

  7. (翻译)OpenDocument and Open XML security (OpenOffice.org and MS Office 2007)

    标题:Open Document 和 Open XML安全性(OpenOffice.org and MS Office 2007) 摘要,OpenDocument 和 Open XML 都是 Offi ...

  8. Portswigger web security academy:Clickjacking (UI redressing)

    Portswigger web security academy:Clickjacking (UI redressing) 目录 Portswigger web security academy:Cl ...

  9. 手撸了一个starter,同事直夸我666~

    Spring Boot starter原理 Spring Boot 将常见的开发功能,分成了一个个的starter,这样我们开发功能的时候只需要引入对应的starter,而不需要去引入一堆依赖了!st ...

  10. PHP Excel文件导入数据到数据库

    1.php部分(本例thinkphp5.1): 下载PHPExcel了扩展http://phpexcel.codeplex.com/ <?phpnamespace app\admin\contr ...