使用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)。千叮嘱万嘱咐,数据库的备份重于泰山;

时间: 2025-01-21 17:23:10

使用Percona Data Recovery Tool for InnoDB恢复数据的相关文章

使用IBM Data Movement Tool从SQL Server/Oracle到DB2的表数据迁移

SQL Server,Oracle 及 DB2 都是目前市场上很多应用程序所使用的关系型数据库,随着应用程序功能的日趋强大,应用程序的版本升级和重新安装都将要求保留原有数据.这样不同类型数据库之间的迁移成了现在应用程序功能中数据迁移部分的重点.目前市场上出现了一些数据库迁移工具(比如:IBM Data Movement Tool).互联网上针对这些工具的介绍大部分都是基于数据对象的整体迁移,也就是在数据结构迁移的基础上进行数据迁移.但是有些应用程序并不需要数据结构的迁移,而是仅仅需要表数据的迁移

如何从MySQL/InnoDB数据文件中的恢复数据

1. 简述恢复原理 因为文档中较为详细的描述,这里只简单说明.所有InnoDB的数据都是索引的方式组织的,而且所有的数据都是存储在16KB的数据块中.恢复的过程分几步,分解所有数据文件为单个16KB大小的页面,根据每个页面的标记的数据起点开始尝试匹配,如果与给定表定义的size合适,认为匹配成功,则输出记录. 2. 并行的恢复 数据恢复通常是争分夺秒的,PDRTI工具本身是一个基础工具,如果使用该工具做做串行恢复,时间会非常长,通过简单的shell脚本可以让constraints_parser脚

Oracle数据恢复顾问(Data Recovery Advisor)

Oracle数据恢复顾问用于当数据发生错误或故障时,进行自动收集数据故障信息,并生成恢复脚本,用于完成数据恢复.数据恢复顾问也可以主动检查故障. 在这种模式下,它可以在数据库进程发现数据损坏并发出错误之前进行潜在的检测并分析数据故障.数据故障可能非常严重. 例如,如果您当前的日志文件丢失,则无法启动你的数据库. 一些数据故障(如数据文件中的块损坏)不是灾难性的他们不会将数据库关闭或阻止您启动Oracle实例. 数据恢复顾问处理这两种情况:当您无法启动数据库时(因为某些情况)所需的数据库文件丢失,

利用MySQL中InnoDB数据文件中的恢复数据

1. 简述恢复原理 因为文档中较为详细的描述,这里只简单说明.所有InnoDB的数据都是索引的方式组织的,而且所有的数据都是存储在16KB的数据块中.恢复的过程分几步,分解所有数据文件为单个16KB大小的页面,根据每个页面的标记的数据起点开始尝试匹配,如果与给定表定义的size合适,认为匹配成功,则输出记录. 2. 并行的恢复 数据恢复通常是争分夺秒的,PDRTI工具本身是一个基础工具,如果使用该工具做做串行恢复,时间会非常长,通过简单的shell脚本可以让constraints_parser脚

Oracle Data Recovery Advisor(DRA) 数据恢复顾问

Oracle Data Recovery Advisor(DRA) 数据恢复顾问 对DBA而言,数据备份.还原是日常工作的基本功.Oracle发展到今天,自动化.智能化是一个重要的发展方向.数据库可以自动的诊断问题故障,并且解决修复错误,可能离我们并不遥远.     数据备份和还原,在Oracle DBA学习过程中,占到了很大的篇幅.从冷备份到热备份,从完全恢复到非完全恢复,这个过程中涉及了很多的技术细节和知识点.一些DBA初始接触这些概念和操作,容易被弄乱.Oracle 11g推出的Data

VMware Vsphere Data Recovery 完整性检查错误修复

今天上班的时候收到VMware Vsphere Data Recovery 的报告状态邮件,发现备份未成功,完整性检查失败的错误. 解决完整性检查失败的原因是,找出在备份过程中损坏的备份文件然后标记删除,在手动执行完整性检查,通过之后就可以成功进行下次备份了.

数据库误删 数据恢复-数据库不小心误删了data(ndf)文件,只有mdf文件盒ldf文件,怎样才能恢复数据?

问题描述 数据库不小心误删了data(ndf)文件,只有mdf文件盒ldf文件,怎样才能恢复数据? 在操作数据库SQL server2000的时候,不小心删除了数据库,最后只找到了mdf和ldf文件,其中的data文件缺失了.现在在用mdf文件附加数据库的时候,提示缺少这些文件.问有什么办法可以恢复存储在mdf中的数据吗? 解决方案 恭喜你 不花钱的话没法恢复

mysql中导入数据load data在myisam与innodb区别

innodb数据表结构如下:  代码如下 复制代码 Create Table: CREATE TABLE `tinnodb` ( `id` int(11) DEFAULT NULL, `content` mediumtext ) ENGINE=InnoDB DEFAULT CHARSET=utf8 表中的数据为4194304行,通过select into outfile导出  代码如下 复制代码 root@localhost:tiger>select * from tinnodb into ou

阿里云RDS本地恢复数据

公司目前使用的数据库是阿里云的RDS,目前RDS的版本为mysql5.6.如下: 现在要求把RDS的数据,在公司内部本地进行恢复. 如何把RDS在本地进行恢复呢?这个阿里云官网给出了相关的操作教程,连接如下:<RDS备份文件恢复到自建数据库>. 看了官网的教程,感觉很是麻烦,而且也有几个比较特殊的地方没有点出来,下面是我对RDS本地恢复的步骤. 一.安装mysql数据库 在进行RDS本地恢复数据之前,我们需要先在本地服务器上安装mysql的5.6版本,因为RDS是5.6版本,所以我们本地的my