使用Percona Data Recovery Tool for InnoDB恢复数据

简介:

昨晚收到一则求助,一个用户的本地数据库的重要数据由于误操作被删除,需要进行紧急恢复,用户的数据库日常并没有进行过任何备份,binlog也没有开启,所以从备份和binlog入手已经成为不可能,咨询了丁奇,发了一篇percona的文章给我,顿时感觉有希望,于是到percona的官网上下载了恢复工具
一.安装:
.tar -xvf percona-data-recovery-tool-for-innodb-0.5.tar.gz
.cd percona-data-recovery-tool-for-innodb-0/mysql-source/
../configure
.cd percona-data-recovery-tool-for-innodb-0
.make

二.解析ibd文件:
此过程会将表的idb文件解析为很多的page,innodb的page分为两大部分,一部分一级索引部分(primary key),另一部分为二级索引部分(secondary key),所以解析出来的idb包括了主键数据和索引数据两大部分(如果该表有多个二级索引,则会生成多个文件)
./page_parser -5 -f t_bibasic_storage.ibd
参数解释:
-5:代表 row format为Compact
-f:代表要解析的文件
结果如下:
pages-1377707810/FIL_PAGE_INDEX
0-161 0-325 0-463 0-464 0-465
可以看到t_bibasic_storage.ibd解析出来5个文件(161为主键索引的index_id,325,463,464,465为二级索引的index_id,该id可以通过开启innodb_table_monitor知晓)

三.生成表定义:
由于该工具在解析数据pages的时候,需要获得该table的表结构定义,所以需要执行如下命令:
./create_defs.pl –host xxxx –port 3306 –user root –password xxx –db didb –table t_bibasic_storage >include/table_defs.h
上面的命令会将t_bibasic_storage表的表结构定义传入到table_defs.h中,在生成了表结构定义后,重新make该恢复工具:
.make

四.开始恢复pages中删除的数据:
在重新编译工具后,执行如下命令:
./constraints_parser -5 -D -f pages-1377707810/FIL_PAGE_INDEX/0-161 >/tmp/t_bibasic_salessend.sql
参数:
-5 -f的参数和page_parser相同;
-D:该参数的含义为代表恢复删除的数据页;

恢复完成后生成如下语句和文件:
LOAD DATA INFILE ‘/tmp/t_bibasic_proinfo.dmp’ REPLACE INTO TABLE `t_bibasic_proinfo` FIELDS TERMINATED BY ‘\t’ OPTIONALLY ENCLOSED BY ‘”‘ LINES STARTING BY ‘t_bibasic_proinfo\t’ (id, procode, skuoid, skucode, skuname, catatt, dutydepoid, dutydepname, seasonatt, brandatt, prostatus, choosedate, syear, smonth, sday, created, unioncomcode);

/tmp/t_bibasic_salessend.sql 该文件就是我们需要load data的文本文件;

总结:
1)。该恢复工具只支持innodb存储引擎,文件的格式需要为:Compact
2)。数据被误删除后,需要尽快将保护现场,停止数据库,把idb文件拷贝出来,防止ibd文件写入数据被覆盖(笔者恢复的一个表中,由于数据删除后,表中仍有大量写入,导致大部分数据没有恢复出来);
3)。千叮嘱万嘱咐,数据库的备份重于泰山;

目录
相关文章
|
SQL 关系型数据库 MySQL
MySQL 定时备份的几种方式,这下稳了!
在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump,首先我们简单了解一下mysqldump命令用法:
MySQL 定时备份的几种方式,这下稳了!
|
关系型数据库 MySQL 数据库
MySQL的delete误操作的快速恢复方法
如果我们在数据库中不小心执行了类似“delete from t1”这样的不带where条件的语句,那么整张表的数据就全被删除了,如何在最短的时间恢复被删除的数据就显得十分关键。下面来演示如何通过binlog来快速恢复表数据。
11961 0
MySQL的delete误操作的快速恢复方法
|
SQL 关系型数据库 MySQL
如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒设置可能不是最佳的”?
如何解决mysql警告:“ InnoDB:page_cleaner:1000毫秒的预期循环用了XXX毫秒设置可能不是最佳的”?
935 0
|
10月前
|
SQL 关系型数据库 MySQL
InnoDB数据恢复的工具——TwinDB介绍
TwinDB是一款专门用于InnoDB数据恢复的工具,它还有一个名字叫undrop for InnoDB。
619 0
|
存储 SQL 关系型数据库
MySQL 利用 frm 文件和 ibd 文件恢复表结构和表数据
MySQL 利用 frm 文件和 ibd 文件恢复表结构和表数据
1602 0
|
SQL 监控 druid
Spring Boot 整合 Druid 指南
Spring Boot 整合 Druid 指南
21468 2
|
关系型数据库 MySQL 网络安全
MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法
MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法
609 0
|
关系型数据库 MySQL 数据库
MySQL Innodb表共享空间损坏无法启动
启动mysql后随即就又关闭了,mysql服务启动失败!!
MySQL Innodb表共享空间损坏无法启动
|
Apache
使用POI读写Word doc文件
使用POI读写word doc文件 目录 1     读word doc文件 1.1     通过WordExtractor读文件 1.2     通过HWPFDocument读文件 2     写word doc文件          Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的。
2217 0
|
存储 SQL 关系型数据库
记一次MySQL崩溃修复案例,再也不用删库跑路了
研究MySQL源代码,调试并压测MySQL源代码时,MySQL崩溃了!问题是它竟然崩溃了!而且还损坏了InnoDB文件!!还好是在调试环境下发生的,赶紧看看如何解决这个问题,经过一系列的查阅资料、验证、对比、MySQL源码调试跟踪、修复损坏的InnoDB文件、总结等流程,整理成此文,如果以后真的发生在线上的生产坏境,也不用担心是不是要跑路的问题了,可以分分钟搞定MySQL的崩溃问题了!!
782 0