在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

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

107次阅读
没有评论

共计 3877 个字符,预计需要花费 10 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 MySQL 中如何使用 undrop 来恢复 drop 的表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

MySQL 中可以使用编程语言(比如 Python)来解析 binlog 中 DML 的逆操作来达到闪回的效果,如果数据不多,手工解析也可以。这也是现在大家碰到的很多 DML Flashback 的一个基本原理。而如果是 DDL,比如 DROP, 那就得叹声气了。

GitHub 上有一个很不错的项目是 undrop, 基于 InnoDB, 也就意味着如果你所在的环境有了 drop 操作还是存在恢复的可能了,当然这个过程需要谨慎,建议大家在测试环境先练习测试论证后再做决定,当然我们希望这个工具永远不要排上用场。

这个项目貌似现在关注的人还不太多,最近看阿里的内核月报中也做了解读。http://mysql.taobao.org/monthly/2017/11/01/,所以引起了我的注意,带着好奇心,自己也测试一把。

安装部署很简单。

gitclone https://github.com/twindb/undrop-for-innodb.git

make

这里需要注意的是,你的环境很可能没有 flex 包,可以在 make 之前安装一下。

yum install flex

然后我们来尝试编译一个文件 sys_parser.c,先配置 basedir

basedir=/usr/local/mysql_5.7

gcc `$basedir/bin/mysql_config –cflags` `$basedir/bin/mysql_config –libs` -o sys_parser sys_parser.c

这个工具的一个基本原理就是解析 ibdata, 从里面解析出我们需要的页的信息,即对应的数据字典。

mysql show tables like %SYS%

+————————————–+

| Tables_in_information_schema (%SYS%) |

+————————————–+

| INNODB_SYS_DATAFILES |

| INNODB_SYS_VIRTUAL |

| INNODB_SYS_INDEXES |

| INNODB_SYS_TABLES |

| INNODB_SYS_FIELDS |

| INNODB_SYS_TABLESPACES |

| INNODB_SYS_FOREIGN_COLS |

| INNODB_SYS_COLUMNS |

| INNODB_SYS_FOREIGN |

| INNODB_SYS_TABLESTATS |

+————————————–+

10 rows in set (0.00 sec)

其中这 4 个数据字典是需要重点关注的。

SYS_COLUMNS| SYS_FIELDS | SYS_INDEXES | SYS_TABLES

这个工具功能蛮丰富,在目录下有个 sakila 的文件夹,是一些示例的脚本,我们可以创建一些看起来和业务相关的表,不过实际上我们可以做个减法,只创建一个我们需要重点关注的表,然后导入数据即可。

-rw-r–r–. 1 jeanron jeanron 3231472 Dec 16 2011 sakila-data.sql

-rw-r–r–. 1 jeanron jeanron 50019 Dec 16 2011 sakila.mwb

-rw-r–r–. 1 jeanron jeanron 23099 Dec 16 2011 sakila-schema.sql

否则,这一套表结构还算是比较复杂的,存在外键关联,处理起来需要花些额外的时间。

整个初始化的工作,我们以表 actor 为例,手工摘取出 actor 的建表语句,然后运行 sakila-data.sql 脚本即可。

mysql checksum table actor;

+————–+————+

| Table | Checksum |

+————–+————+

| 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 的表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计3877字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲日本韩国 | 欧洲成人全免费视频网站 | 亚洲一码二码三码精华液 | 无码人妻精品一区二区在线视频 | 亚洲一区二区精品 | 在线视频久久 | 国产精品人人爽人人做我的可爱 | 无码人妻少妇久久中文字幕蜜桃 | 老鸭窝亚洲 | 青娱乐极品视觉盛宴国产视频 | 一区二区三区在线视频观看 | 九九影视网 | 久久精品国产精品亚洲精品 | 久操视频免费在线观看 | 视频福利一区 | 中国一级毛片视频免费看 | 狠狠干夜夜爱 | 国产一区二区免费 | 欧美日本精品一区二区三区 | 青青网在线视频 | 成人免费福利片在线观看 | 精品黑人一区二区三区 | 欧美在线小视频 | 成人午夜性a一级毛片美女 成人午夜性影院视频 | 88久久精品无码一区二区毛片 | 女人和拘做受全程看视频 | 四虎影视精品永久免费 | 日本级毛片免费观看 | 欧美性老太太 | 久久久久人妻精品一区二区三区 | 国产青青在线 | 国产成人精品a视频一区 | 欧美日韩国产深夜福利视频 | 欧美黑人巨大xxxxx | 日韩在线视频网址 | 99热久久最新地址获6取 | 国产精选一区 | 日韩欧群交p片内射中文 | 伊人精品久久久久中文字幕 | 成人免费久久精品国产片久久影院 | 一个人免费视频观看在线www |