引擎:innodb

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

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

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

[mysqld]

default-storage-engine=InnoDB

重启数据库,查看

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

tar -zvxf 

# 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;多构造几条数据

3)删除数据

delete from www;

4)提取数据

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

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

会看到当前目录生成一个文件目录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

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

more /tmp/

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

5)导入数据

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

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