mysql 5.7 的mysqlbinlog flashback功能

------------------------------------------------------------------------------------------------------------------------

支持 flashback 功能的 mysqlbinlog 二进制文件下载地址这里 libstdc++ 文件的下载戳这里

----------------------------------------------------------------------------------------------------------------------------

此二进制文件需要 GLIBCXX_3.4.15 以上版本支持,Centos 7.0下默认是不支持的,运行的时候会报如下错误:

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./mysqlbinlog57) 

解决此问题,需要libstdc++.so.6.0.15上的版本才行,这个东西也比较找,我这里面提供了一个libstdc++.so.6.0.17 64位的,libstdc++.so.6.0.20 64位的不能正常使用,不知道为什么,

通过把 libstdc++.so.6.0.17_64 复制到/usr/lib64下,删除原来的/usr/lib64/libstdc++.so.6.0.13  ,然后做一个软连接

[root@db-master ~]#ln -s  libstdc++.so.6.0.17_64    libstdc++.so.6

[root@db-master ~]# strings  libstdc++.so.6.0.17_64 |grep LIBC 有如下输入:

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBC_2.2.5

GLIBC_2.3

GLIBC_2.3.2



FLASHBACK FOR MYSQL实现原理


flashback的概念最早出现于Oracle数据库,用于快速恢复用户的误操作。

flashback for MySQL用于恢复由DML语句引起的误操作,目前不支持DDL语句。例如下面的语句:

DELETE FROM XXX;
UPDATE XXX SET YYY=ZZZ;

若没有flashback功能,那么当发生误操作时,用户只能通过全备+二进制日志前滚的方式进行恢复。通常来说,这样所需的恢复时间会非常长。为了缩短误操作恢复的时间,通常可以在slave上搭建LVM,通过定期快照的方式来缩短误操作的恢复时间。但是LVM快照的缺点是会对slave的性能产生一定的影响。

官方mysqlbinlog命令为解析MySQL的二进制日志。当二进制日志的格式为ROW格式时,可以输出每个操作的每条记录的前项与后项。那么通过逆操作即可进行回滚操作,例如:


原始操作:INSERT INTO ...
flashback操作:DELETE ...

原始操作:DELETE FROM ...
flashback操作:INSERT INTO ...

原始操作:UPDATE XXX SET OLD_VALUES ...
flashback操作:UPDATE XXX SET NEW_VALUES ...


目前flashback功能集成于官方mysqlbinlog命令,通过参数的方式进行flashback功能的开启。

相关参数–skip_database

解析BinLog时过滤掉该数据库。

–skip_table

解析BinLog时过滤掉该表,一般与skip_datebase配套使用。

–split-size-interval

将BinLog文件按照指定的大小拆分为多个段,解析结果为打印每个段的起始offset位置。

注意,当进行flashback时,flashback的内容先保存在内存中。若你的binlog大小为10G,那么需要额外的10G内存先暂时保存这部分信息。在某些情况下,如云环境、或服务器内存较小,会导致无法输出flashback的日志。这时可以通过此参数来设置内存保存文件的大小,例如将此值设置为100M,那么每100M就会刷新到一个文件。

–datetime_to_pos

基于输入的时间信息,解析出该时间对应的第一个BinLog event偏移位置,格式参照start-datetime,

flashback时要先找到起始的偏移量,DBA可以先通过此参数定位到具体位置,然后再进行flashback操作。

–table

仅解析该表,一般与database配套使用。

–fb_event

仅解析该类型的Log event,一般与database、table选项配套使用。可选的值有:

  • DELETE
  • INSERT
  • UPDATE

关于DDL的flashback功能

flashback功能仅支持DML语句的快速恢复,但是如果误操作为DDL的话,那么就无能为力了,比如:

TRUNCATE TABLE  xxx;
DROP TABLE xxxx;
DROP DATABASE xxx;
请先 登录 后评论
  • 0 关注
  • 0 收藏,1533 浏览
  • 石天 提出于 2016-11-30 21:48

相似问题