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

技术MySQL中如何使用undrop来恢复drop的表小编给大家分享一下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/,所以它引起了我的注意。出于好奇,我自己尝试了一下。

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

安装简单。

吉斯克隆https://github.com/twindb/undrop-for-innodb.git

制造

这里需要注意的是,您的环境可能没有flex软件包,所以您可以在make之前安装它。

yum安装flex

然后让我们试着编译一个文件sys_parser.c,并首先配置basedir。

basedir=/usr/local/mysql_5.7

gcc `$ 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

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000002.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000003.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000004.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000005.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000011.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000012.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000013.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000014.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000015.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000016.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000017.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 0000000000000032.page

-rw-r--r--. 1 root root 32768 Nov 1 02:57 0000000000000033.page

-rw-r--r--. 1 root root 16384 Nov 1 02:57 18446744069414584320.page

要解析里面的内容,我们可以使用另外一个命令c_parser,根据关键字sakila/actor来过滤。

./c_parser -4Df pages-ibdata1/FIL_PAGE_INDEX/0000000000000001.page -t dictionary/SYS_TABLES.sql | grep 'sakila/actor'

其中参数4DF,代表文件格式(4代表文件格式是 REDUNDANT),D(D 表示只恢复被删除的记录),f生成文件

然后依次使用c_parser来解析页得到其他几个数据字典的信息,比如(SYS_INDEXES,SYS_COLUMNS,SYS_FIELDS)

以上是“MySQL中如何使用undrop来恢复drop的表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65912.html

(0)

相关推荐

  • Shuffle原理及对应的Consolidation优化机制是怎样的

    技术Shuffle原理及对应的Consolidation优化机制是怎样的这篇文章给大家介绍Shuffle原理及对应的Consolidation优化机制是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所

    攻略 2021年12月3日
  • 属兔与什么属相最配,属兔的男人和什么属相最配

    技术属兔与什么属相最配,属兔的男人和什么属相最配属兔婚配表属兔与什么属相最配: 宜配:羊、狗、猪,功业成就,安居乐业,专利兴家。
    忌配:龙、鼠、鸡,家庭难有幸福,逆境之象,事业不成,灾祸之致,历尽痛苦。 解释:
    卯兔

    生活 2021年10月31日
  • 老土的英文,跪求一篇英文的新年寄语!!!

    技术老土的英文,跪求一篇英文的新年寄语!!!The New Year is around us now, and I hope that youre working your way towards your goals

    生活 2021年10月26日
  • android项目一般用到哪些开源库(android开源库分类及使用方法)

    技术实用的Android开源库有哪些这篇文章主要为大家展示了“实用的Android开源库有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“实用的Android开源库有哪些”

    攻略 2021年12月24日
  • 上引号,这段话在人字上加引号的作用

    技术上引号,这段话在人字上加引号的作用这段话在“人“字上加引号的作用是表示特殊的称谓,指具有特殊含义的词语上引号。引号的作用如下:1、表示引用的部分。文章中的人物对话或者是直接引用别人的话(或文章)用引号,为的是把他们和

    生活 2021年10月20日
  • nodejs和js一样吗

    技术nodejs和js一样吗这篇文章主要讲解了“nodejs和js一样吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs和js一样吗”吧!

    攻略 2021年10月29日