ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer。如果file-per-table选项打开的话,该文件则不一定包含所有表的数据。当innodb_file_per_table选项打开的话,新创建表的数据和索引则不会存在系统表空间中,而是存放
在各自表的.ibd文件中.
显然这个文件会越来越大,innodb_autoextend_increment选项则指定了该文件每次自动增长的步进,默认是8M.
ibdata1存放数据,索引和缓存等,是MYSQL的最主要的数据。所以随着数据库越来越大,表也会越大,这个无法避免的。如果时间长了,越来越大,我们在处理日志和空间的时候就不是那么方便了,就不知从何入手了。接下来我们就要处理下这样的情况,分库存储数据。当ibdata1文件损坏或者丢失后,查询数据库表的时候,会报错表不存在
1. 恢复表结构
创建一个新数据库test,然后创建一个和需要恢复的表的引擎相同的同名表(即引擎为InnoDB的t_user表,其结构无所谓,可以只有一个字段),如下:
  create table t_user(id int(10)) engine=InnoDB;

以上,我在新建的test数据库中创建了一个引擎为InnoDB的只有一个字段id的t_user表
2.使用systemctl stop mysql关闭数据库服务,然后用需要恢复的t_user.frm覆盖这个新建的test数据库的t_user表的物理文件t_user.frm,接着对配置文件(my.ini)设置innodb_force_recovery = 6,然后使用systemctl start mysql启动服务,并在控制台进入test库中,使用
desc t_user查看该表结构,如下:表不存在

3.  此时,我们查看/var/log/下的log文件,可以看到如下:
Innodb: table test/t_user contains 1 user defined columns in Innodb,but 6 columns in Mysql.
  以上,应该是说test下t_user只定义了一列,但MySQL中有6列
4. 使用systemctl stop mysql停掉服务,然后在配置文件my.ini中将innodb_force_recovery = 6注释掉(#或;均可),再systemctl start mysql启动服务。接着,将test下t_user表删掉(drop掉),再新建一个6列字段的t_user表,如下:字段随意
 create table t_user(id int(10),id1 int(10),id2 int(10),id3 int(10),id4 int(10),id5 int(10),id6 int(10)) engine=InnoDB;
5. 继续重复②中的操作,使用desc t_user即可获取到t_user的表结构(使用mysqldump导出即可)
6. 用t_user.ibd文件恢复t_user表的数据
停掉数据库服务,将innodb_force_recovery = 6注释掉,然后启动数据库服务(若启动中出现1067错误,可以尝试删除data文件夹下ibdata1、ib_logfile0、ib_logfile1即可)并删除test下t_user表,并使用新导出的表结构创建t_user表.
由于.ibd文件含有tablespace id,因此我们将需要恢复数据的t_user.ibd的tablespace id改为新创建的t_user.ibd的tablespace id,如下:使用了hexedit #yum install hexedit
需要恢复数据的t_user.id的tablespace id:图1
新创建的t_user.ibd的tablespace id:图2

              

7. 修改后的带数据的t_user.ibd如下:     #hexedit  文件名---crtl+x保存,crtl+c退出

8. 停掉数据库服务,使用修改tablespace id的t_user.ibd文件覆盖test库下的t_user.ibd文件,并且将配置文件中innodb_force_recovery = 6去掉注释,进入mytest库内,使用select * from t_user查看数据

9. 使用mysqldump导出表结构和数据即可,注意:最好重新配置一个空的MySQL来进行恢复操作,这样不会影响到MySQL下别的数据库,本例中使用的是MySQL 5.6.26版。

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

  1. mysql数据恢复:.frm和.ibd,恢复表结构和数据

    mysql数据恢复:.frm和.ibd,恢复表结构和数据 一.恢复表结构 二.恢复表数据 相关内容原文地址: CSDN:她说巷尾的樱花开了:mysql根据.frm和.ibd文件恢复表结构和数据 博客园 ...

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

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

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

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

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

    .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索 ...

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

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

  6. .frm和.ibd恢复数据

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

  7. [MySQL]InnoDB引擎的行锁和表锁

    1.行锁和表锁 在mysql 的 InnoDB引擎支持行锁,与Oracle不同,mysql的行锁是通过索引加载的,即是行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描, 行锁则 ...

  8. SQLServer恢复表级数据

    最近几天,公司的技术维护人员频繁让我恢复数据库,因为他们总是少了where条件,导致update.delete出现了无法恢复的后果,加上那些库都是几十G.恢复起来少说也要十几分钟.为此,找了一些资料和 ...

  9. windows mysql5.7 InnoDB 通过frm与ibd对数据进行恢复

    参考:https://www.jianshu.com/p/50a2e13cd5cf 安装MySQL Utilities 下载地址:https://dev.mysql.com/downloads/uti ...

随机推荐

  1. hutool工具类常用API整理

    0.官网学习地址 https://www.hutool.cn/ 1.依赖 <dependency> <groupId>cn.hutool</groupId> < ...

  2. docker基础_Dockerfile

    Dockerfile []: https://docs.docker.com/language/python/build-images/ "docker官方文档" 以python为 ...

  3. java自学中出现的问题或者?

    自学java之路,是如此的坎坷.经过一段时间的自学,我得出一些总结! 总结如下: 1.     在学习编程之路(Java)的,最基本的还是学习之路,对编程前程深感迷茫2.    网络中有许许多多的编程 ...

  4. 基于casbin的RBAC权限实践

    五一假期疫情封在家也没事做,就想来优化一下一个前端容器小项目 之前的TODOlist里面有一项是权限这块时隔2年了还一直没有动手 迟迟没搞主要还是我太懒了,哈哈 其实我一直想要找一个轻量级的权限通用方 ...

  5. 视网膜血管分割代码(Pytorch实现)

    创建日期: 2021-12-24 17:00:00 update log(2021.12.24):B站视频删除了,回放看了一下,讲的不太行......2333,时间过得真快,转眼就是2022年了啊 2 ...

  6. deepin安装jdk配置环境

    下载一个jdk压缩包https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz 这个包,不用安装,下下来,直接解压,然 ...

  7. 手脱无名壳tslgame_rl

    1.使用Detect It Easy查壳,该壳未显示出壳信息,至于为何有壳,我们使用IDA打开,查看其的导入表,其中没有太多函数使用: 2.我们使用x32dbg打开,运行至入口点,此处没有pushad ...

  8. Java学习笔记-基础语法Ⅳ

    多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...

  9. 现有教学数据库JX_DB,作业

    现有教学数据库JX_DB,数据库有以下三个基本表: 学生表student,它由学号sno.姓名sname.性别sex.出生日期Bdate.所在系dept五个属性构成.其中,学号不能为空,值是唯一的: ...

  10. 【java并发编程】ReentrantLock 可重入读写锁

    目录 一.ReentrantLock可重入锁 二.ReentrantReadWriteLock读写锁 三.读锁之间不互斥 欢迎关注我的博客,更多精品知识合集 一.ReentrantLock可重入锁 可 ...