mysql fashback 5.6 5.7

来源:互联网 发布:张大奕五家淘宝店 编辑:程序博客网 时间:2024/06/06 08:49

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/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语句




0 0