MySQL中如何使用undrop来恢复drop的表

边肖想和大家分享一下如何使用undrop来恢复MySQL中的drop表 。相信大部分人还是不太了解 。因此,我想分享这篇文章供你参考 。希望你看完这篇文章后收获多多 。让我们一起来看看 。在MySQL中,可以用一种编程语言(比如Python)来分析binlog中DML的反向操作,达到闪回的效果 。如果数据不多,可以手动做 。这也是现在大家遇到的很多DML闪回的一个基本原理 。如果是DDL,比如DROP,那就是一种叹息 。GitHub上有一个非常好的项目,undrop,它是基于InnoDB的,这意味着如果你的环境中有drop操作,仍然有可能恢复 。当然,这个过程需要谨慎 。建议您在测试环境中做出决定之前先练习测试演示 。当然,我们希望这个工具永远不会被使用 。现在关注这个项目的人好像不多 。最近看了阿里的内核月报,解读了一下 。http://mysql.taobao.org/monthly/2017/11/01/,所以它引起了我的注意 。出于好奇,我自己尝试了一下 。安装简单 。吉斯克隆https://github.com/twindb/undrop-for-innodb.git这里需要注意的是,您的环境可能没有flex软件包,所以您可以在make之前安装它 。yum安装flex然后让我们试着编译一个文件sys_parser.c,并首先配置basedir 。basedir=/usr/local/mysql_5.7gcc `$ basedir/bin/MySQL _ config-cf lags `$ basedir/bin/MySQL _ config-libs `-o sys _ parser sys _ parser . c这个工具的一个基本原理就是解析ibdata,从中我们可以解析出我们需要的页面信息,也就是对应的数据字典 。mysql显示类似“%SYS%”的表;| Tables _ in _ information _ schema(% SYS %)|| INNODB_SYS_DATAFILES || INNODB_SYS_VIRTUAL || INNODB _ SYS _ INDEX || INNODB_SYS_TABLES || INNODB_SYS_FIELDS || INNODB_SYS_TABLESPACES || INNODB_SYS_FOREIGN_COLS || INNODB_SYS_COLUMNS || INNODB_SYS_FOREIGN || INNODB_SYS_TABLESTATS |10行一组(0.00秒)其中,有四个数据字典需要特别注意 。系统列|系统字段|系统索引|系统表这个工具功能相当丰富 。目录下有一个sakila文件夹,是一些例子的脚本 。我们可以创建一些看似与业务相关的表,但实际上我们可以做一个减法,只需要创建一个我们需要关注的表,然后导入数据 。-rw-r r - 。1 jean Ron jean Ron 3231472 2011年12月16日sakila-data.sql-rw-r r - 。2011年12月16日-rw-r r - 。1 jean Ron jean Ron 23099 2011年12月16日sakila-schema.sql否则这组表结构相当复杂,而且有外键关联,处理起来会多花一些时间 。在整个初始化工作中,我们以表actor为例,手动提取actor的建表语句,然后运行sakila-data.sql脚本 。mysql校验和表执行元;|表|校验和|| sakila.actor | 1702520518 | -+ +
1 row in set (0.00 sec)查询一下表actor的数据量 。
mysql select count(*)from actor; + -+ | count(*) | + -+ | 200 | + -+ 1 row in set (0.00 sec)要解析ibdata,可以使用stream_parser来做 。我们指定ibdata的路径 。
# ./stream_parser -f /U01/mysql_5.7_test/n1/ibdata1
Opening file: /U01/mysql_5.7_test/n1/ibdata1 File information: ID of device containing file: 64512 inode number: 152382 protection: 100640 (regular file) number of hard links: 1 user ID of owner: 501 group ID of owner: 501 device ID (if special file): 0 blocksize for filesystem I/O: 4096 number of blocks allocated: 155648 time of last access: 1509475823 Wed Nov 1 02:50:23 2017 time of last modification: 1509476206 Wed Nov 1 02:56:46 2017 time of last status change: 1509476206 Wed Nov 1 02:56:46 2017 total size, in bytes: 79691776 (76.000 MiB) Size to process: 79691776 (76.000 MiB) All workers finished in 1 sec整个操作很快,会在当前目录下生成一个pages-ibdata1的文件夹,下面包含两个文件夹 。
drwxr-xr-x. 2 root root 4096 Nov 1 02:57 FIL_PAGE_INDEX
drwxr-xr-x. 2 root root 4096 Nov 1 02:57 FIL_PAGE_TYPE_BLOB比如INDEX目录下,存在大量的页,比如下面的输出 。
-rw-r r . 1 root root 32768 Nov 1 02:57 0000000000000001.page

推荐阅读