此方法只适合innodb_file_per_table          = 1

当误删除ibdata 该怎么办? 如下步骤即可恢复:


1、准备工作


1)准备一台纯洁的mysql环境【从启动到现在没有使用过INNODB的表结构的mysql环境】(当然也可以不用纯洁的,但是一定要保证表id 小于后续要恢复的表id);

2)备份frm、ibd文件;

2、通过frm恢复表结构


1)在测试库里新建任意一表,表结构随意,表名必须为:要恢复数据的表名【即为frm前缀名】

例如:CREATE TABLE five_monitor (id int(11) NOT NULL ) ENGINE=InnoDB ;

2)关闭mysql

3)用需要恢复的frm文件直接替换测试库刚新建的frm文件;

4)在配置文件里添加innodb_force_recovery = 6,然后启动;

5)show create table  five_monitor;即能看到你需要的表结构信息了;

6)然后去掉innodb_force_recovery = 6 设置,重启mysql为下一步做准备;

3、通过ibd恢复表数据


1)查看表的space id(
http://haildb.sourcearchive.com/ ... 0fil_8h_source.html
  00118有说明)

a: hexdump -C five_monitor.ibd |head -n 3 |tail -n 1|awk '{print $6$7}‘

b: 通过以上结果到mysql里面去转成10进制:select conv('67c0',16,10);

说明space id为:26560

2)新建innodb表补充ibdata里面的table id

如果想看到ibd里面的数据,我们必须让space id 与刚启动的mysql ibdata里面的记录的表id一致;

新建一个表innodb,ibdata里面的表id就会+1,而刚才已经新建过表了,所以id已经+1了

故我们还需要新建26560-1(刚才新建的)-1(要恢复的表)=26558个表

for i in `seq 0
26557`; do mysql --user=××× ×××××  -e "CREATE TABLE iinser$i (id
bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=innodb ";
done

3)导入要恢复的表

a:在另外一个测试库里按照第2步导出的表结构新建表;

b:alter table   five_monitor discard tablespace;

c:cp 要恢复的ibd 到刚建的表的目录里,并修改mysql权限

d:alter table   five_monitor import tablespace;

4)在配置文件里添加innodb_force_recovery = 6,然后启动;

这样你就能看到你想要的数据了。当然一定要通过dump 或者select * from into outfile把data导出;

mysql通过frm+ibd文件还原data的更多相关文章

  1. mysql 之 frm+ibd文件还原data

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

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

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

  3. mysql ibd 文件还原数据

    -- 这里要还原的表名为 test_table -- 1建库,并选中库,库名随意 -- 2查看InnoDB 引擎独立表空间是否开启 SHOW VARIABLES LIKE '%per_table%' ...

  4. mysql innodb 从 ibd 文件恢复表数据

    最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...

  5. Mysql 通过frm&ibd 恢复数据

    mysql存储在磁盘中,各种天灾人祸都会导致数据丢失.大公司的时候我们常常需要做好数据冷热备,对于小公司来说要做好所有数据备份需要支出大量的成本,很多公司也是不现实的.万一还没有做好备份,数据被误删除 ...

  6. MYSQL 为表指定文件位置 data directory

    背景知识: 如果表不指定文件位置,它会保存到 data/database_name/table_file;其中data在你指定的安装目录下,为了提高IO我们尽可能的 用到多个硬盘的IO能力,这个就需要 ...

  7. Mysql ibd文件恢复指南

    背景 mysql在使用的过程中,难免遇到数据库表误操作,基于此,作者亲力亲为,对mysql数据表ibd文件的恢复做以下详细的说明,对开发或者初级dba提供一定的指导作用,博客中如若存在相关问题,请指明 ...

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

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

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

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

随机推荐

  1. Asp.net MVC 4 Attributes特性

    Attributes特性 ActionFilterAttribute Represents the base class for filter attributes. 代表筛选器属性的基类. Acti ...

  2. C# ACM poj1006

    中国剩余定理 public static void acm1006(int a, int b, int c, int d) { * ; * ; * ; * * ; ) * z; ) * y; ) * ...

  3. HTML5 Canvas 绘制时钟

    网上会看到很多绘制的时钟,看代码也是云里雾里,自学了下Canvas,觉得不难,就自己做了一个. 先看一下截图: 比较简陋,但是该有的都有了,样式只加了个阴影. html代码就不贴了,就一个canvas ...

  4. 再也不要看到Eclipse万恶的arg0,arg1提示

    不知道大家跟我是否一下,遇到arg的提示. @Override public void onDateChanged(DatePicker arg0, int arg1, int arg2, int a ...

  5. Cabarc Overview (Microsoft TechNet)

    Original Link:  Cabarc Overview Applies To: Windows Server 2003, Windows Server 2003 R2, Windows Ser ...

  6. [转]优化PHP程序的方法

    1. If a method c++an be static, declare it static. Speed improvement is by a factor of 4. 如果一个方法可静态化 ...

  7. C# 实现对窗体(Form)换肤

    http://www.csharpwin.com/csharpresource/2992.shtml 一直想写一个比较完整的.容易扩展的窗体换肤的方案,由于时间问题,都没去实现这个想法.现在有朋友提出 ...

  8. 算法之插入排序(inertionSort)

    插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,适用于少量数据的排序,时间复杂度为O(n^2). 插入排序属于稳定排序. 插入排序不需要构造新的数据 ...

  9. Memcached服务器安装、配置、使用详解

    管理memcached服务 启动Memcached 一般情况下,简单地可以使用类似如下形式,启动Memcached服务: /usr/local/bin/memcached -d -m 64 -I 20 ...

  10. 过滤部分错误信息,不输出到stderr

    cmd 2>/tmp/stderr.log cat /tmp/stderr.log | grep -v “要过滤信息的关键字” >&2 rm /tmp/stderr.log