运维工作中难免会发生一些误操作,当数据库表被误操作删除需要紧急恢复,或者没有备份时,Percona Data Recovery Tool for InnoDB这个工具也已提供一些便捷的恢复。
当然这个工具也有相当的限制:
1、只对innodb表有效
2、一旦发生误操作,需要尽快停止对事故表的写入,将idb文件拷贝出来
3、数据不一定总是能恢复,比如被重新写入的情况等
 
原理简述:
InnoDB的数据都是索引的方式组织的,而且所有的数据都是存储在16KB的数据块中。恢复的过程分几步,分解所有数据文件为单个16KB大小的页面,根据每个页面的标记的数据起点开始尝试匹配,如果与给定表定义的size合适,认为匹配成功,则输出记录。
 
操作步骤:
 
一、安装编译:
tar xvf percona-data-recovery-tool-for-innodb-0.5.tar.gz
...
 
[root@zabbix percona]# cd percona-data-recovery-tool-for-innodb-0.5
 
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# cd mysql-source/
 
[root@zabbix mysql-source]# ./configure
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
...
 
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# make
...
 
二、实验数据:
mysql> create table luna (id int,name varchar(10),sex varchar(2),logtime date);
Query OK, 0 rows affected (0.10 sec)
 
mysql> insert into luna values(1,'kuja','m','1986-01-19');
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into luna values(2,'ben','m','1986-01-19');
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into luna values(3,'lulu','m','1986-01-19');
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from luna;
+------+------+------+------------+
| id   | name | sex  | logtime    |
+------+------+------+------------+
|    1 | kuja | m    | 1986-01-19 |
|    2 | ben  | m    | 1986-01-19 |
|    3 | lulu | m    | 1986-01-19 |
+------+------+------+------------+
3 rows in set (0.00 sec)
 
mysql> delete from luna;
Query OK, 3 rows affected (0.00 sec)
 
三、备份出要恢复表的idb文件并解析:
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# cp /usr/local/mysql/data/test/luna.ibd /app/qipai_data/kuja/percona/percona-data-recovery-tool-for-innodb-0.5
 
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# ./page_parser -5 -f luna.ibd
Opening file: luna.ibd:
64768           ID of device containing file
12419559                inode number
33184           protection
1               number of hard links
0               user ID of owner
0               group ID of owner
0               device ID (if special file)
98304           total size, in bytes
4096            blocksize for filesystem I/O
200             number of blocks allocated
1397468556      time of last access
1397468556      time of last modification
1397468590      time of last status change
98304   Size to process in bytes
104857600       Disk cache size in bytes
 
生成目录:
drwxr-xr-x  3 root root     4096 Apr 14 17:43 pages-1397468622
 
四、生成表定义:
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# ./create_defs.pl --user=kuja --password=kuja --host=192.168.13.21  --db=test --table=luna >include/table_defs.h
 
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# make
gcc -DHAVE_OFFSET64_T -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -Wall -O3 -g -I include -I mysql-source/include -I mysql-source/innobase/include -c tables_dict.c -o lib/tables_dict.o
gcc -DHAVE_OFFSET64_T -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -Wall -O3 -g -I include -I mysql-source/include -I mysql-source/innobase/include -c print_data.c -o lib/print_data.o
gcc -DHAVE_OFFSET64_T -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -Wall -O3 -g -I include -I mysql-source/include -I mysql-source/innobase/include -c check_data.c -o lib/check_data.o
gcc -DHAVE_OFFSET64_T -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -Wall -O3 -g -I include -I mysql-source/include -I mysql-source/innobase/include -o constraints_parser constraints_parser.c lib/tables_dict.o lib/print_data.o lib/check_data.o lib/libut.a lib/libmystrings.a
gcc -DHAVE_OFFSET64_T -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -D_LARGEFILE_SOURCE=1 -Wall -O3 -g -I include -I mysql-source/include -I mysql-source/innobase/include -static -lrt -o page_parser page_parser.c lib/tables_dict.o lib/libut.a
 
五、将数据导入sql文件
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# ./constraints_parser -5 -D -f pages-1397468622/FIL_PAGE_INDEX/0-13394/0-00000003.page > /tmp/111.sql
LOAD DATA INFILE '/app/qipai_data/kuja/percona/percona-data-recovery-tool-for-innodb-0.5/dumps/default/luna' REPLACE INTO TABLE `luna` FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' LINES STARTING BY 'luna\t' (id, name, sex, logtime);
 
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# more /tmp/111.sql
luna    1       "kuja"  "m"     "1986-01-19"
luna    2       "ben"   "m"     "1986-01-19"
luna    3       "lulu"  "m"     "1986-01-19"
 
至此得到数据恢复文本。
 
六、附加参数释义:
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# ./constraints_parser -h
Error: Usage: ./constraints_parser -4|-5 [-dDV] -f <InnoDB page or dir> [-T N:M] [-b <extrenal pages directory>]
 Where
   -f <InnoDB page(s)> -- InnoDB page or directory with pages
   -h  -- Print this help
   -d  -- Process only those pages which potentially could have deleted records (default = NO)
   -D  -- Recover deleted rows only (default = NO)
   -U  -- Recover UNdeleted rows only (default = NO)
   -V  -- Verbode mode (lots of debug information)
   -4  -- innodb_datafile is in REDUNDANT format
   -5  -- innodb_datafile is in COMPACT format
   -T  -- retrieves only pages with index id = NM (N - high word, M - low word of id)
   -b <dir> -- Directory where external pages can be found. Usually it is pages-XXX/FIL_PAGE_TYPE_BLOB/
 
七、实验中的碰到的问题:
生成表定义时报错
[root@zabbix percona-data-recovery-tool-for-innodb-0.5]# ./create_defs.pl  --db test --table luna >include/table_defs.h
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 3) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Proxy, Sponge.
at ./create_defs.pl line 37
 
该问题的原因是没有安装perl-DBD-MySQL
 
安装后解决:
[root@zabbix include]# yum install perl-DBD-MySQL
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: centos.ustc.edu.cn
* base: centos.ustc.edu.cn
* extras: centos.ustc.edu.cn
* updates: centos.ustc.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package perl-DBD-MySQL.x86_64 0:3.0007-2.el5 set to be updated
--> Finished Dependency Resolution
 
Dependencies Resolved
 
=====================================================================================================================================================================
Package                                     Arch                                Version                                     Repository                         Size
=====================================================================================================================================================================
Installing:
perl-DBD-MySQL                              x86_64                              3.0007-2.el5                                base                              148 k
 
Transaction Summary
=====================================================================================================================================================================
Install      1 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)        
 
Total download size: 148 k
Is this ok [y/N]: y
Downloading Packages:
perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm                                                                                                        | 148 kB     00:00    
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
 Installing     : perl-DBD-MySQL                                                                                                                                1/1
 
Installed:
 perl-DBD-MySQL.x86_64 0:3.0007-2.el5                                                                                                                              
 
Complete!

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

  1. Percona Data Recovery Tool for InnoDB工具恢复单表的案例

    今天上班有个朋友询问我,相关Percona Data Recovery Tool for InnoDB恢复数据中的一些问题,比如说delete,没法恢复数据,原先做过类似的异常处理就,再次模拟了下相关 ...

  2. Percona Data Recovery Tool 单表恢复

    前几天写过update或者delete忘加where条件的数据恢复.今天介绍一款开源的MySQL数据库InnoDB数据恢复工具:innodb-tools,它通过从原始数据文件中提取表的行记录,实现从丢 ...

  3. Android Data Recovery for Mac(安卓数据恢复软件)破解版安装

    1.软件简介    Android Data Recovery 是 macOS 系统上一款 Android 设备数据恢复软件,能够帮助我们在 mac 电脑上对 Android 设备进行数据恢复,文档. ...

  4. VMware Data Recovery备份恢复vmware虚拟机

    VMware Data Recovery 是VMware虚拟机备份工具,可创建虚拟机备份,同时不会中断虚拟机的使用或虚拟机提供的数据和服务.Data Recovery 管理现有备份,并在这些备份过时后 ...

  5. 14.18.1 The InnoDB Recovery Process InnoDB 恢复进程:

    14.18.1 The InnoDB Recovery Process InnoDB 恢复进程: InnoDB crash recovery 有几个步骤组成: 1.应用redo log,Redo lo ...

  6. DRA(Data Recovery Advisor)的使用

    关于DRA的官方描述: The simplest way to diagnose and repair database problems is to use the Data Recovery Ad ...

  7. 转:主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Undelete 360

    转自:Baidu 空间 2012-10-05 13:57 主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Und ...

  8. 小型网站MYSQL问题二:Percona Xtrabackup实现数据库备份和恢复

    1.安装软件仓库(不要问我为什么不用源码安装,好吧,其实我懒.) 1 2 3 4 5 6 7 8 wget https://www.percona.com/downloads/percona-rele ...

  9. 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

    参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...

随机推荐

  1. 其它综合-使用Putty远程连接管理Linux实践

    使用Putty远程连接管理Linux实践 1.获取putty 获取 putty有很多方法,以下是我为大家提供的下载地址: 个人网盘地址,提取码:tz83 官方下载地址 解释: 官方下载的是 zip 压 ...

  2. linux 命令mkdir、cd

    mkdir 创建文件夹 -p 递归创建文件夹 可以一次性创建多个目录 cd pwd 显示当前目录的绝对路径 rmdir  删除空目录  只能删除空目录  鸡肋,基本用rm cp  复制文件产品 -r ...

  3. [SimplePlayer] 8. 音视频同步

    音频与视频在播放当中可能会由于种种原因(如:音视频并非在同一时间开始播放,或视频由于解码任务繁重导致输出图像延迟等)导致音频与视频的播放时间出现偏差,这种就是音视频的同步问题,本文会对音视频同步进行讨 ...

  4. Sublime怎么安装Package control组件

    Sublime怎么安装Package control组件 藏色散人 藏色散人 2018-11-26 14:30:51 原创 Sorry, your browser does not support e ...

  5. 安卓微信连接fiddler等抓包工具无法抓取https

    问题描述: 在手机连接pc的fiddler后,安卓微信打不开https页面,安卓的浏览器.qq等都可以正常访问https,ios也都可以,就只有安卓微信放问https是空白页面 解决思路: 一. 证书 ...

  6. Hdoj 1425.sort 题解

    Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含 ...

  7. Matlab常用函数集锦

    ndims(A)返回A的维数size(A)返回A各个维的最大元素个数length(A)返回max(size(A))[m,n]=size(A)如果A是二维数组,返回行数和列数nnz(A)返回A中非0元素 ...

  8. Matlab中simulink的state space模块

    %列写状态空间表达式矩阵 A=[- -;]; B=[ ; ]; C=[ ; ]; D=[ ; ]; %得到传递函数表达式 [num, den]=ss2tf(A, B, C, D, ); %在命令行打印 ...

  9. python学习day11 函数Ⅲ (内置函数与lambda表达式)

    函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...

  10. mybatis 模糊查询 like的三种方式

    第一种 public void selectBykeyWord(String keyword) { String id = "%" + keyword + "%" ...