引擎:innodb

场景:没有做备份,没有开启binlog

原理:在InnoDB引擎,delete删除操作,不是真正的删除物理文件上的行,而是增加一个删除的标记。

注意:引擎必须是innodb,可以在mysql的配置文件my.cnf中添加

[mysqld]

default-storage-engine=InnoDB

重启数据库,查看

wKiom1TB5ZSSKym1AAJbh7mJrbc862.jpg


1)安装Percona Data Recovery Tool for InnoDB工具 

tar -zvxf percona-data-recovery-tool-for-innodb-0.5.tar.gz

# cd percona-data-recovery-tool-for-innodb-0.5/mysql-source 

# ./configure

# cd ..

# make

2)构造数据

create database b;

use b;

create table www (a varchar(10),b varchar (20),c varchar(10));

insert into b values('aaa','bbb','ccc');

insert into www values ('ddd','eee','fff');

然后用insert into www select * from www;多构造几条数据

wKioL1TB5qfwH08VAAB7tr3NjcU460.jpg

3)删除数据

delete from www;

wKioL1TB5sjR6H5JAAAtqPGm4aM826.jpg


4)提取数据

cd percona-data-recovery-tool-for-innodb-0.5

./page_parser -5 -f /var/lib/mysql/b/www.ibd


wKioL1TB5uSzu-VpAANjbwzTEgg826.jpg

会看到当前目录生成一个文件目录pages-1421802572

./create_defs.pl --host localhost --port 3306 --user root --password root --db b --table www > include/table_defs.h

参数解释:

-- host 主机地址

-- port 端口

-- user 用户名

-- password 密码

-- db 数据库名

-- table 表名

再次执行编译命令

make

wKiom1TB5tOxvYsZAANjbwzTEgg074.jpg

./constraints_parser -D -5 -f pages-1421802572/FIL_PAGE_INDEX/0-17/ >/tmp/www.txt

more /tmp/www.txt

wKiom1TB5yGT4tIQAADgYVlcQ1g819.jpg

被删除的数据已经被提取到文本里了

5)导入数据

LOAD DATA INFILE '/tmp/www.txt' REPLACE INTO TABLE `www` FIELDS TERMINATED BY '\t';


wKiom1TB5iXhdl7lAACow-GsHfQ475.jpg


wKiom1TB5jDywWCNAAB81f4C0fM190.jpg


看到了吧,共有65536条数据,但只恢复了4812条,而且是在数据库没有任何操作的情况下恢复的,所以各位在删除数据的时候一定要小心哦