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. 【分享汇总】25个主题分享,360°领略OpenHarmony最新技术版图

    2021年10月,开放原子开源基金会旗下开源项目 OpenAtom OpenHarmony (以下简称"OpenHarmony") 应邀参加华为2021 HDC 开发者大会,并组织 ...

  2. Codeforces Round #771 (Div. 2), problem: (B) Odd Swap Sort

    Problem - B - Codeforces 就是给你个序列, 给他整成升序的, 每次操作可以使相邻两个数交换位置, 交换条件是二数之和为奇数 结果只需输出是否可以整成升序的 思路: 需要奇数偶数 ...

  3. 数仓建设 | ODS、DWD、DWM等理论实战(好文收藏)

    本文目录: 一.数据流向 二.应用示例 三.何为数仓DW 四.为何要分层 五.数据分层 六.数据集市 七.问题总结 导读 数仓在建设过程中,对数据的组织管理上,不仅要根据业务进行纵向的主题域划分,还需 ...

  4. 还在用em strong吗?快来试试 text-emphasis

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  5. Photoshop图片处理在线网页使用无需下载绿色

    今天给大家推荐一个ps在线版网页 实测使用效果不错,绿色简介,无需下载,不卡顿一般的电脑配置都可以带起来 因为是在线的所以是精简版的,但是一般ps软件有的工具,功能他都有,比较适合及时性使用 废话不多 ...

  6. Linux(ubuntu)二进制安装mysql8.0

    mysql官方网站下载地址:https://dev.mysql.com/downloads/mysql/ 1.创建mysql运行用户和组 groupadd -g 1001 mysql useradd ...

  7. 技术管理进阶——一线Leader与大Leader的差异是什么?

    原创不易,求分享.求一键三连 ​ 前几年,因为下属的一些骚操作,Leader对我产生了误会,这导致了一些"不信任",这种不信任在短时间会让人丧失安全感,很多人会因此患得患失. 这种 ...

  8. os.system 裁掉片头 ffmpeg

    顺序执行多个指令os.system执行终端命令os.system('start ffmpeg -i x222.mp4 "%s.mp3" && del x222.mp ...

  9. openstack之Designate组件,入门级安装(快速)

    @ 目录 前言 架构 前提准备 创建 DNS 服务 API 端点 安装和配置组件 验证操作 前言 Designate 是一个开源 DNS 即服务实施,是用于运行云的 OpenStack 服务生态系统的 ...

  10. 服务器BIOS和BMC等知识详解

    一个执着于技术的公众号 引言:以BIOS为核心的固件产业,是信创产业链的重要组成部分,可被誉为信创产业的"山海关".在计算机体系中,BIOS 有着比操作系统更为底层和基础性的作用, ...