您的位置:首页 > 数据库 > MySQL

mysql fashback 5.6 5.7

2017-04-26 17:30 141 查看


Flashback在mysql5.6的应用


工具简介

针对row格式的binlog可以解析为回滚操作语句,如delete反向生成insert,update生成反向的update,insert反向生成delete;在线上误操作的时候我们可以快速的将数据恢复到修改前的状态。


安装

1、下载地址
http://download.csdn.net/download/sinat_29461437/10126004
创建新服务binlogflashback, 并修改权限

mv /opt/mysqlbinlog20160408 /use/bin/binlogflashback

chmod 755 /use/bin/binlogflashback


参数说明

 -B, --flashback Flashback data to start_postition or start_datetime.

COM_BINLOG_DUMP or COM_BINLOG_DUMP_GTID commands by

setting the option to either BINLOG-DUMP-NON-GTIDS or BINLOG-DUMP-GTIDS, respectively.

If --read-from-remote-master=BINLOG-DUMP-GTIDS is combined

--start-datetime ##从哪个时间点的binlog开始解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。

--stop-datetime ##到哪个时间点的binlog停止解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。

--start-position ##事务开始的position点

--stop-position ##事务结束的position点

使用范例

1、数据准备

在数据库中创建如下表

Create Table: CREATE TABLE `tb1` (

`id` int(11) DEFAULT NULL,

`name` varchar(20) DEFAULT NULL

) ENGINE=InnoDB;

执行增、删、改动作

insert into tb1 values(1,'aaa'),(2,'aaa');

delete from tb1 where id=2;

update tb1 set name='bbb' where id=1;

 


2、反转

2.1、解析binlog

根据时间点解析binlog

binlogflashback -v --start-datetime='2017-4-24 14:14:00' --stop-datetime='2017-4-24 14:16:08' /data/mysqldata/mysql-bin.000001 > /tmp/tmp.sql

确定目标语句是否存在该范围内,并记录对应的pos点(at 346)

vim /tmp/tmp.sql

 


 


 


2.2、反转

binlogflashback -v -B --start-position=574 --stop-position=1109 /data/mysqldata/mysql-bin.000001 > /tmp/tmp.sql

 


第三步

确定好反转sql直接执行,也可以提取需要的sql单独执行。

mysql -uqihang.li -p123 < /tmp/tmp.sql  

执行前

 


执行后

 


-- ---------------------------------------------------------------华丽的分界线--------------------------flashback 5.7------------------------------------

flashback 5.7 的文件我稍后会放个链接:
http://download.csdn.net/download/sinat_29461437/10126016
使用方法和上述一直 期间遇到一些问题,分享下

binlogbackup -v /data/mysqldata/mysql-bin.000001

 [root@ser2-56 ~]#binlogbackup -v /data/mysqldata/mysql-bin.000001

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

GLIBCXX_3.4.15是关于C系统基础运行库GLIBC

我们着手解决GLIBCXX的问题,C++库,首先查看错误信息提示中的lib文件的信息。

ll /usr/bin64/libstadc++.so.6

 [root@ser2-56 ~]# ll /usr/lib64/libstdc++.so.6

lrwxrwxrwx 1 root root 19 11月 3 10:49 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13

发现/usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6
-> /usr/lib64/libstdc++.so.6.0.13也就是系统以前有一个6.0.13版本,确实比较旧了,那么我们有新版本么?

 

我们现在本机找下

find / -name libstdc++.so.6*

发现我们有一个/usr/lib64/libstdc++.so.6.0.20的高版本文件(没有可以自行下载,
http://download.csdn.net/detail/sinat_29461437/9826688


 [root@ser2-56 ~]# find / -name libstdc++.so.6*

/usr/lib64/libstdc++.so.6

/usr/lib64/libstdc++.so.6.0.13

/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/impala/lib/libstdc++.so.6

/opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/impala/lib/libstdc++.so.6.0.20

cp /opt/cloudera/parcels/CDH-5.9.0-1.cdh5.9.0.p0.23/lib/impala/lib/libstdc++.so.6.0.20 /usr/lib64/

ll /usr/lib64/libstdc++.so.6

rm -rf /usr/lib64/libstdc++.so.6

ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6

 

打印 libstdc++.so.6的输出信息中限定(grep) GLIBC库的信息

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

 

[root@ser2-56 ~]# strings /usr/lib64
aa60
/libstdc++.so.6 | grep GLIBC

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

GLIBCXX_3.4.18

GLIBCXX_3.4.19

GLIBCXX_3.4.20

GLIBC_2.3

GLIBC_2.2.5

GLIBC_2.3.2

GLIBCXX_FORCE_NEW

GLIBCXX_DEBUG_MESSAGE_LENGTH

发现GLIBC的版本已经提高到3.4.20,这已经可以满足我们要求了

binlogbackup -v /data/mysqldata/mysql-bin.000001

 就可以使用了


限制

binlog_format=row

只支持insert、update、delete

不支持drop 、truncate、alter等ddl语句
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息