mysql .frm文件丢失_【1.1】mysql frm文件丢失(ibd文件丢失)

当MySQL的.frm文件丢失,即便业务仍在运行,可能导致数据表无法正常访问。可以通过备份ibd文件,替换frm文件并调整权限来临时解决。彻底删除表需要谨慎操作。恢复表结构和数据,可以依赖原始的.frm和.ibd文件,或者通过binlog、备份等途径。务必确保innodb_file_per_table设置为1,以便每个表有独立的表空间。
摘要由CSDN通过智能技术生成

【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);

0f9dd55fa23221af5dd4a23e6f1f5d97.png

【2】故障模拟

【2.1】在业务正在运行的情况下,手动删除 test库 下的 a.frm

3b580df844073771abc1045703205d6c.png

【2.2】删除完之后,会发生什么?

d81eac4b1e643e90454815f0e40ea2cf.png

在没有执行drop table的时候,还是可以查询表,查看表结构的,执行后,就查不到了。

4950b5e7abfa8c42cae44c2112f805cd.png

如上图所示可知(在业务还在跑的情况下):

无论是对于数据表的增删查改,还是数据结构的增删查改。统统失效,连 information_schema.columns 都查不到(是因为执行了drop table,虽然报错了,但是把数据字典系统表里的相关信息还是删除了)。

【3】如何彻底删除这个表

e163c79428b2bfdd89f19465dbcdc3e8.png

【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】查看表与表结构,然后删除表

92d9cf2fda47b7c980ca41c42e1fa0ec.png

我们可以发现已经有了,但很明显,表结构不是我们a表的结构,而是test1表结构。弄好了之后,发现我们可以删除表了!

【3.5】如果用了其他表的表结构替换会发生什么?

对B表进行了同样的操作;B表与A表代码一样。

用test1表的frm 覆盖并重命名成  b表的frm之后,查询b表居然显示的是 test1表的数据!!

1c2e801f3b26a807c5577bf92e61cee1.png

fa915e34b4aed9f3f85807e37eaf703d.png

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的文件拷贝过来

f7179b5178061caebf0a7ce7e20df7f5.png

(2)释放表空间

alter table a discard tablespace;

如下图所示,释放表空间,只是把idb数据清空了,frm表结构文件还在。

2a5f487f59d3309359176d3ba22941c9.png

bed641d4e5dd18baa05b80cd71759571.png

(3)把我们要恢复的ibd文件,重命名成a.ibd

一定要记得,权限问题;

cad2ecc4c92b4ad2abe50d8b2d2f797d.png

(4)重新导入表空间

alter table a import tablespace;

840075fe46e6a92e227729bc77c7a8c2.png

至此搞定;

【4.2】在原库恢复

故障前提,操作完【1】【2】

(1)备份

cp -r a.ibd a_bak.ibd

(2)随便找个表frm 复制重命名成 a.frm,删除表

复制前,删除表

e6ccf07815c66e539f075785f45f0094.png

cp -r test1.frm a.frm

chown -R mysql:mysql /data/mysql

复制后,删除表

728e0800d1feb5fd32f559bfd353aef6.png

(3)重建表结构相同的a表

create table a(id int,num int);

-- 如何获取表结构? 备份、主从、binlog......

(4)销毁表空间

alter table a discard tablespace;

(5)复制备份文件成a.ibd,导入表空间

2c5f2019d65edaba1d1de8708896e012.png

alter table a import tablespace;

fe328d53f1067759010b6c516366aea3.png

成功!

思考1:可否直接替换ibd?

我建完一个同表结构新的空表之后,可不可以直接用我们需要恢复的ibd文件,替换这个ibd文件呢?

我们初始化,重新新建一个空白的a表;

(1)重建表:create table a(id int,num int);

(2)覆盖文件

4aeb7d15e39baf381f0737904be7836b.png

(3)查看是否有数据,并没有,直接覆盖失败

c353801aaf68affdcd595df90d65a5b6.png

结论:不可以;

思考2:没建表的情况下,可以直接用新建的frm和要恢复的ibd使用表空间导入嘛?

不可以,会报错表不存在。而后,即使你新建表也会报错。

e85f18bd7f47cf9d2c0d7b486b6a43d5.png

如果需要新建,这个时候需要drop table a; 之后,才能够再次新建。

详解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环境[从启动到现在 ...

【转&参考】MySQL利用frm和ibd文件进行数据恢复

MySQL利用frm和idb文件进行数据恢复 源MySQL现状: 版本:5.6.* 存储引擎:innodb存储引擎 要恢复数据库:skill 重点要恢复表:slot_value 已有的文件: 备份了所 ...

MySQL表结构为InnoDB类型从ibd文件恢复数据

客户的机器系统异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找资料,试验各种方法,确认下面步骤可行: ...

随机推荐

yii2增加验证码详细步骤

作者:白狼 出处:http://www.manks.top/article/yii2_captcha本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...

anroid 查看签名信息的方法

1.把app改成压缩文件 2.解压以后找到META-INF\CERT.RSA 3.在CMD命令行里面输入:  keytool -printcert -file  E:\META-INF\CERT.RS ...

JavaSE复习_6 枚举类

△单例类是指只有一个实例,而枚举类实际上就是有有限个实例的类,在类里已经把实例定义好了. △枚举类的三种创建形式: 1) enum Week { MON,TUE,WED;//枚举类有默认构造函数创建的 ...

linux 2.6up的设备和设备驱动模型

在linux2.6 的设备和设备驱动模型构架中,所有的外部设备和驱动程序都挂在总线上 ,总线分为(usb   -- USB设备,PCI  -- PCI 设备 platform --   直接和处理器进 ...

同步机制Lock初学(转)

前段时间review同事的代码,发现可以简化成如下的模型: Thread 1 Thread 2 lock.lock(); condition.await(); lock.unlock() lock.l ...

sgu 169 Numbers

题意:n和n+1同时被数位乘积整除的k位数个数. 假如a是237,b是238.由于个位以前的数一样.那么对于2,如果a%2==0,b%2就!=0,如果a%3==0,b%3就!=0.因此个位以前的数只能 ...

Windows的cmd窗口显示utf8字符

用XeLaTeX的时候,查字体需要用fc-list命令,XeLaTeX用的都是utf编码,所以fc-list输出的字体信息也是utf编码.因此需要把cmd窗口也改成utf8编码才能看到这些字体信息.U ...

swagger2 注解整体说明

@Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置&q ...

解释Spring中IOC, DI, AOP

oc就是控制翻转或是依赖注入.通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象.aop就是面向切面的编程.比如说 ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值