mysql btmp 删除_通过.ibd和.frm恢复mysql数据

背景:因为手误导致数据库某字段修改错误

此方法恢复数据的前提:建表用的innodb索引

备注:如果mysql的目录还都在,可以先尝试,将mysql下的目录都拷贝到一个新mysql目录下,启动看看能不能用,不能用后再尝试下面方法

mysql会有一个data目录存储表结构和表数据。下面的目录结构大概如下:

ib_logfile0

ib_logfile1

ibdata1

ibtmp1

xx数据库1

xx数据库2

每个数据库目录下面的表内容如下:

表1.frm

表1.ibd

表2.frm

表2.ibd

.frm文件:表结构文件

.ibd文件:表数据文件

下面为恢复数据方法

备注:这里假设要备注的库名为db1,表名为table1

1、先备份要恢复数据的表文件

table1.frm和table1.ibd文件

可以直接把原数据库的data目录整个拷贝过来,如果指定了data目录可以通过查看mysql的进程看到具体配置位置

2、新搭建一个mysql

我用的5.7,搭建在mac本地

3、将mysql下的log文件删除,不要保留和要备份的库相同的内容

如果你是完全新建的一个数据库,和原来的库表完全无关,可以忽略这步骤

rm -rf /usr/local/mysql/data/ib_logfile0

rm -rf /usr/local/mysql/data/ib_logfile1

rm -rf /usr/local/mysql/data/ibdata1

rm -rf /usr/local/mysql/data/btmp1

rm -rf /usr/local/mysql/data/db1

4、新建数据库

链接上mysql命令行

create database db1;

5、通过命令行新建原来的表,

注意,一定在建表命令后加【ROW_FORMAT=COMPACT】防止冲突

例如:

如果不记得表结构了,可以先参考下面的文章找回表结构,dump出sql结构后获得创建表的语句:

6、将新建的表DISCARD掉

命令行执行:

ALTER TABLE table1 DISCARD TABLESPACE;

7、将备份的源表数据文件.ibd拷贝过来

将.ibd文件放到新数据库的data目录下,覆盖刚创建表时新生成的.ibd文件

即/usr/local/mysql/data/db1/下

8、将拷贝过来的.ibd表数据导入进来

ALTER TABLE  `table1` IMPORT TABLESPACE;

然后数据就恢复啦~~

转载:https://www.cnblogs.com/meitian/p/9886654.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值