无意间看到了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
发现hhhhhhhh一行是在的,于是做个 analyze,查看是否会被清除。
再查hexdump
此时已被清理掉了。所以,一旦发送误删操作且没有备份,第一时间应该赶紧把开发云主机域名ibd文件备份。
视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式。视图包含一系列带有名称的数据列和数据行,但视图中的数据并不真实存在于数据库中,视图返回的是结果集。视图是存储在数据库中的查询的SQL语句,创建视图主要出于两种原因:A、实现安全。视…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。