引擎: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条,而且是在数据库没有任何操作的情况下恢复的,所以各位在删除数据的时候一定要小心哦