由percona-data-recovery-tool恢复ibd数据的工具的一些测试


无意间看到了percona-data-recovery-tool 这个工具,这个工具是用来恢复innodb数据文件中的数据,貌似都建议row_format必须是REDUNDANT或者COMPACT。而在mysql5.7.8以上默认为Dynamic,但其实在此处我在Dynamic下测试是没有问题的。

当我们误删除某个表数据时,实际上数还存留在数据文件中,因此可通过特殊手段从数据文件中抽取相应的数据。

数据被误删除后,需要尽快将保护现场,停止数据库,把 idb 文件拷贝出来,防止 ibd 文件写入数据被覆盖。

安装方法:

https://launchpadlibrarian.net/78359944/percona-data-recovery-tool-for-innodb-0.5.tar.gz

yum install glibc-static

yum -y install perl-DBD-MySQL.x86_64

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

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

cd mysql-source/

./configure

cd ..

make

解析 ibd 文件:此处会将ibd文件以16k为单位分割成n个文件

./page_parser -5 -f /home/mysql/datal/cwdtest/card.ibd

参数解释:

-5:代表 row format 为 Compact

-f:代表要解析的文件,innodb的ibd文件

生成表定义

./create_defs.pl -host 127.0.0.1 -port 3306 -user root -password mysql123 -db cwdtest -table card >include/table_defs.h

make

开始恢复 pages 中删除的数据:

./constraints_parser -5 -D -f ./pages-1543395138/FIL_PAGE_INDEX/0-602/22-00000025.page >/tmp/22-00000025.page.txt

参数:

-5 -f 的参数和 page_parser 相同;

-D:该参数的含义为代表恢复删除的数据页;

然后生成的文件就用load data 方式插入,其实该方法介绍的文章很多,这里只给出关键步骤。而对于在误删数据后是否数据还真的存于ibd中,我这里做个小小实验。

表中有三行数据,删除其中hhhhhhh一行。

用hexdump来查看ibd文件:

对该表数据文件做个hexdump:

hexdump -C -v /data/mysql/cwdtest/test2.ibd >/tmp/udb.txt

page type , page level 从第四个页开始,从hexdump中可找到相应的位置0x0000c000开始,16k*3=49152=0x0000c000


发现hhhhhhhh一行是在的,于是做个 analyze,查看是否会被清除。

再查hexdump

此时已被清理掉了。所以,一旦发送误删操作且没有备份,第一时间应该赶紧把开发云主机域名ibd文件备份。

相关推荐: MySQL数据库高级(三)——视图

视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式。视图包含一系列带有名称的数据列和数据行,但视图中的数据并不真实存在于数据库中,视图返回的是结果集。视图是存储在数据库中的查询的SQL语句,创建视图主要出于两种原因:A、实现安全。视…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/05 09:45
下一篇 06/05 09:45

相关推荐