【1.1】mysql frm文件丢失(ibd文件丢失)
【1】故障模拟准备环境
这里以innodb为例
【1.1】配置参数
开启独立表空间 innodb_file_per_table;
【1.2】构建测试数据
create database test;
create table a(id int,num int);
insert into a values(1,11),(2,12);
【2】故障模拟
【2.1】在业务正在运行的情况下,手动删除 test库 下的 a.frm
【2.2】删除完之后,会发生什么?
在没有执行drop table的时候,还是可以查询表,查看表结构的,执行后,就查不到了。
如上图所示可知(在业务还在跑的情况下):
无论是对于数据表的增删查改,还是数据结构的增删查改。统统失效,连 information_schema.columns 都查不到(是因为执行了drop table,虽然报错了,但是把数据字典系统表里的相关信息还是删除了)。
【3】如何彻底删除这个表
【3.1】保留这个表数据(要是真不想要了,这步也可以不用做)
cp a.ibd a_bak.ibd
【3.2】随便找个其他表的frm文件重命名成故障表的frm文件
cp test1.frm a.frm
【3.3】加上权限,如下图可以发现是root创建的
chown -R mysql:mysql /data/mysql
【3.4】查看表与表结构,然后删除表
我们可以发现已经有了,但很明显,表结构不是我们a表的结构,而是test1表结构。弄好了之后,发现我们可以删除表了!
【3.5】如果用了其他表的表结构替换会发生什么?
对B表进行了同样的操作;B表与A表代码一样。
用test1表的frm 覆盖并重命名成 b表的frm之后,查询b表居然显示的是 test1表的数据!!
b.frm 加上之后,删除表后 ,这个名称就可以重建了。
【4】恢复使用
故障前提,操作完【1】【2】
【4.1】直接在test1库恢复a表
(0)去test1库构建相同名称表
use test1;
create table a(id int,num int);
如何获取表结构?只能desc,information_schem,binlog里看看有没有,最靠谱的当然是去备份里找。
直接在test1库恢复a表。
(1)备份frm,把我们原始的 失去frm 对应idb的文件拷贝过来
(2)释放表空间
alter table a discard tablespace;
如下图所示,释放表空间,只是把idb数据清空了,frm表结构文件还在。
(3)把我们要恢复的ibd文件,重命名成a.ibd
一定要记得,权限问题;
(4)重新导入表空间
alter table a import tablespace;
至此搞定;
【4.2】在原库恢复
故障前提,操作完【1】【2】
(1)备份
cp -r a.ibd a_bak.ibd
(2)随便找个表frm 复制重命名成 a.frm,删除表
复制前,删除表
cp -r test1.frm a.frm
chown -R mysql:mysql /data/mysql
复制后,删除表
(3)重建表结构相同的a表
create table a(id int,num int);
-- 如何获取表结构? 备份、主从、binlog......
(4)销毁表空间
alter table a discard tablespace;
(5)复制备份文件成a.ibd,导入表空间
alter table a import tablespace;
成功!
思考1:可否直接替换ibd?
我建完一个同表结构新的空表之后,可不可以直接用我们需要恢复的ibd文件,替换这个ibd文件呢?
我们初始化,重新新建一个空白的a表;
(1)重建表:create table a(id int,num int);
(2)覆盖文件
(3)查看是否有数据,并没有,直接覆盖失败
结论:不可以;
思考2:没建表的情况下,可以直接用新建的frm和要恢复的ibd使用表空间导入嘛?
不可以,会报错表不存在。而后,即使你新建表也会报错。
如果需要新建,这个时候需要drop table a; 之后,才能够再次新建。
【1.1】mysql frm文件丢失(ibd文件丢失)的更多相关文章
- MySQL 通过.frm文件和.ibd文件实现InnoDB引擎的数据恢复
起因是这样的,公司的领导表示说服务器崩了,修理好之后,只剩下数据库目录下的物理文件(即.frm文件与.ibd文件).然后,整了一份压缩包给我,叫我瞅一下能不能把数据恢复出来.我当场愣了一下,这都啥文件 ...
- MySQL 利用frm文件和ibd文件恢复表结构和表数据
文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...
- 详解MySQL表空间以及ibdata1文件过大问题
ibdata1文件过大 原因分析 ibdata1是一个用来构建innodb系统表空间的文件,关于系统表空间详细介绍参考MySQL官网文档 上面是一个数据库的ibdata1文件,达到了780多G,而且还 ...
- 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...
- MySQL frm+ibd文件还原data的办法【数据恢复】
MySQL frm+ibd文件还原data的办法[数据恢复] 此方法只适合innodb_file_per_table = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1 ...
- mysql通过frm+ibd文件还原data
此方法只适合innodb_file_per_table = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1.准备工作 1)准备一台纯洁的mysql环境[从启动到现在没有 ...
- MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据
数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...
- MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...
- mysql 之 frm+ibd文件还原data
此方法只适合innodb_file_per_table = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1.准备工作 1)准备一台纯洁的mysql环境[从启动到现在 ...
随机推荐
- 校验正确获取对象或者数组的属性方法(babel-plugin-idx/_.get)
背景: 开发中经常遇到取值属性的时候,需要校验数值的有效性. 例如: 获取props对象里面的friends属性 props.user && props.user.friends &a ...
- 富文本编辑器复制粘贴word
tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...
- [Cogs] 最大数maxnumber
http://cogs.pro:8080/cogs/problem/problem.php?pid=1844 Luogu 的数据真zhizhang Cogs AC #include <iostr ...
- 【luoguP1196】 [NOI2002]银河英雄传说--边带权并查集 ,
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...
- Python基础之基本数据类型的总结
基本数据类型的总结 1. 按照存储空间的占用分(从低到高) 数字 字符串 集合:无序,即无序存索引相关信息 元组:有序,需要存索引相关信息,不可变 列表:有序,需要存索引相关信息,可变,需要处理数据的 ...
- Codeforces Round #371 (Div. 2)
之前做过E题,是一个DP. A题,水题,两线段求交集. B题,set一下判断即可. C题,水题.但是我写麻烦了,直接转化成二进制再做,比用字符串relize()以后再map要好写得多. D题,交互题, ...
- solr系列之solr-5.5.5 window单机版jdk-1.7 tomcat8安装
一.Solr5.5.5.Tomcat8-x64.jdk-1.7-64单机部署 1.准备安装包,下载solr和tomcat的安装,直接解压即可(上篇一提供solr的下载路径) 2.在Solr5之前都还存 ...
- 怎样用linux命令知道系统是ubuntu还是redhat或者其它的系统?
1.第一种方法:# lsb_release -aLSB Version: :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4. ...
- SRS之SrsHls::on_audio详解
1. SrsHls::on_audio 将音频数据封装到 ts 文件中. /* * mux the audio packet to ts. * @param shared_audio, directl ...
- php屏蔽电话号码中间四位
php屏蔽电话号码中间四位 一.总结 一句话总结: 直接就是substr_replace函数:$str = substr_replace("13966778888",'****', ...