标签:str form tail std alt and 数据库 load nlog
针对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语句
标签:str form tail std alt and 数据库 load nlog
原文地址:https://www.cnblogs.com/likappe/p/9504316.html