.frm文件:保存了每个表的元数据,包括表结构的定义等;

.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。

1、安装相同版本的mysql;

找回表结构

2、找回表结构(若有表结构,直接导入表即可)

  • 建立同名的表(InnoDB),不知道列数的话随意一个字段即可(如果字段个数不一致会报错,去日志文件中查看有列数重复这些步骤)
  • 关闭mysql服务
  • 用需要恢复的.frm文件覆盖新生成的.frm文件。
  • 修改my.ini配置innodb_force_recovery = 6进入恢复模式(只读)。
  • 启动mysql服务。
  • desc tble_name或者show create table tbl_name获取创建表结构语句。(直接查看表设计字段会导致数据库异常)
  • 复制建表sql,删除表(不能直接删.frm和.ibd会导致新建时报已存在,如果直接删除文件,需要将frm文件拷贝回来,再drop表),执行sql创建表结构。(这个步骤要把innodb_force_recovery = 6注解掉或者回复为0,不然提示只读)。

这里会出现启动后没有表结构,这是需要查看mysql的日志文件

找到日志文件位置:

show variables like '%error%'

这里的.是相对于mysql的,windows可以根据快捷方式找到mysql位置然后再找.err错误文件

找到报错信息为

2018-12-18T08:52:30.314230Z 2 [Warning] InnoDB: Table bookkeeping/concategory contains 1 user defined columns in InnoDB, but 3 columns in MySQL.

意思是新建的有1列,但是复制过来的frm文件中含有3列。这时候知道列数,重做上述步骤。

恢复数据

删除新建的表空间

单个执行删除表空间语句

ALTER TABLE <table_name> DISCARD TABLESPACE;

批量删除空间,执行以下语句。

SELECT CONCAT('ALTER TABLE ', table_name, ' DISCARD TABLESPACE;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name';

获得每个表的删除表空间语句,直接全部选中复制(Navicat)

在前后加上外键约束检查关闭和开启执行

2.将待恢复的<table_name>.ibd文件copy到目标数据库文件夹下(这时候在navicat中看不到表名,不要慌!!!),并修改文件权限(chown u:g file),批量修改权限chown mysql:mysql /usr/mysql/data/db_name/*

导入表空间

单个执行导入表空间语句

ALTER TABLE <table_name> IMPORT TABLESPACE;

批量导入表空间

SELECT CONCAT('ALTER TABLE ', table_name, ' IMPORT TABLESPACE;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name';

这里和删除一样,不赘述,复制所选语句,加上关闭开启检查,执行

可能出现问题

1.mysql 1808错误:这是由于mysql 5.6的文件恢复到mysql 5.7版本导致的错误,需要在建表语句后面添加ROW_FORMAT=COMPACT

2.mysql 1812错误:copy的ibd文件没有赋权,用chown u:g file

3.mysql 1451错误: Cannot delete or update a parent row: a foreign

在前后加上

SET foreign_key_checks = 0; -- 先设置外键约束检查关闭
SET foreign_key_checks = 1; -- 开启外键约束检查,以保持表结构完整性

总结

1.建立表结构(有备份直接用,跳过第一步的找回表结构)

2.删除新建的表空间

3.拷贝.ibd数据文件覆盖新建的文件

4.导入表空间

以下内容和技术无关(身体是革命的本钱,不可用命换钱):

今日烹饪经验

土豆烧肉烧时,肉要顺着纹理切(不然容易碎),烧时可以多放生抽(提鲜),但是老抽千万不能超过半铲子(不然会变成碳),图就不放了,影响大家胃口。

通过.frm和.ibd恢复mysql数据的更多相关文章

  1. 利用.frm、.ibd恢复数据

    我们知道启用innodb_file_per_table选项后,单个表(InnoDB引擎)的数据和索引放入单独的文件中(.ibd),建表语句保存在.frm文件中本文假设192.168.85.132,33 ...

  2. frm和ibd恢复sql文件的操作

    情况:有mysql中data文件(仅仅一个数据库) 操作:frm和ibd恢复sql文件的操作 1.创建相同名字的库xxx 2.把ibdata1替换成原来的 3.把数据库xxx内内容全部替换为原来的 完 ...

  3. Centos7下Mysql通过.frm和.ibd恢复数据

    通过.frm和.ibd文件恢复表结构和数据 这里以hue数据库中的desktop_document2表为例 分成两步骤,先去表结构,再取数据,最好在一个用完就可以删除的数据库中进行 取表结构篇: 1. ...

  4. .frm和.ibd恢复数据

    昨日晚上开发告诉我不小心truncate两个表的数据,要求还原.结果在阿里云上找到了备份内容,结果是物理备份文件.frm..ibd.心中一万个草泥马啊..没办法,开始还原吧. 1.查看测试机Mysql ...

  5. 通过.ibd和.frm恢复mysql数据

    背景:因为机器损坏,数据库的索引文件什么的都损坏了.只留下了一个mysql的data目录… 此方法恢复数据的前提:建表用的innodb索引   备注:如果mysql的目录还都在,可以先尝试,将mysq ...

  6. mysql InnoDB通过.frm和.ibd恢复表和数据

    ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据.撤销记录.修改buffer和双写buffer.如果file-per-table选项打开的话,该文件则不一 ...

  7. Mysql ibd恢复(delete 数据)

    转载:https://www.linuxidc.com/Linux/2017-05/143870.htm 首先呢,请各位注意Percona Data Recovery Tool for InnoDB工 ...

  8. MySQL--通过.frm和.ibd对mysql数据恢复

    转载:http://bbs.csdn.net/topics/392114182 例如说 现在要恢复user表1.先建立和之前user表一样的表结构.就是执行create table user .... ...

  9. linux 通过scp 复制备份恢复mysql数据表

    最近客户有个需求,小弟对于运维的东西也是半瓶醋,所以就果断的摸索了下.折磨了一个晚上终于算是搞定了.因为是两个不同的服务器,本来想用ftp,无奈小弟不是很熟悉,所以就用了scp,但是scp有个问题就是 ...

随机推荐

  1. CSS的初了解(更新中···)

    在前面,我们学习了html的结构.基本骨架.起名方式和选择器,接下来,我们就要学习CSS了. 首先,我们要知道CSS是什么. CSS 全称叫层叠样式表,作用是给html添加样式style,添加属性. ...

  2. Centos7.5安装VirtualBox-5.2

    1.查看自己的内核版本 [root@localhost /]# rpm -qa |grep kernel kernel-tools-libs-3.10.0-862.6.3.el7.x86_64 ker ...

  3. SCU 4437 Carries(二分乱搞)题解

    题意:问任意两对ai,aj相加的总进位数为多少.比如5,6,95分为(5,6)(5,95)(6,95),进位数 = 1 + 2 + 2 = 5 思路:显然暴力是会超时的.我们可以知道总进位数等于每一位 ...

  4. 前端面试总结 (转 0C°)

    前端面试总结 1.一些开放性题目 1.自我介绍:除了基本个人信息以外,面试官更想听的是你与众不同的地方和你的优势. 2.项目介绍 3.如何看待前端开发? 4.平时是如何学习前端开发的? 5.未来三到五 ...

  5. commons-beanutils使用介绍

    commons-beanutils是Apache开源组织提供的用于操作JAVA BEAN的工具包.使用commons-beanutils,我们可以很方便的对bean对象的属性进行操作.今天为大家介绍一 ...

  6. 【BZOJ】3142: [Hnoi2013]数列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3142 12年也有一个组合数学...(这几年的画风啊.... 考虑直接去做:DP? DP+容 ...

  7. centos7 安装nexus3

    一.安装前先安装好java JDK 和maven nexus 下载 链接:https://pan.baidu.com/s/1qQBNj2soc8Un4AoRejvEyw 密码: sb12 1.下载好后 ...

  8. Java三种代理模式:静态代理、动态代理和cglib代理

    一.代理模式介绍 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模式就是 ...

  9. VC.判断双字节字符集前导字节集(IsDBCSLeadByte)

    ZC:这是 WIndows API 函数 1.“BOOL IsDBCSLeadByte( char );” 判断 某字节是否在 双字节字符集的前导字节集中 ZC:可以判断  如 汉字.日文.韩文等 Z ...

  10. 学Hadoop还是Spark好?

    JS 相信看这篇文章的你们,都和我一样对Hadoop和Apache Spark的选择有一定的疑惑,今天查了不少资料,我们就来谈谈这两种 平台的比较与选择吧,看看对于工作和发展,到底哪个更好. 一.Ha ...