mysql有没有flashback_MySQL flashback 功能

MySQL的binlog以event的形式,记录了MySQL中所有的变更情况,利用binlog我们就能够重现所记录的所有操作。

MySQL引入binlog主要有两个用途/目的:一是为了主从复制;二是用于备份恢复后需要重新应用部分binlog,从而达到全备+增备的效果。

MySQL的binlog有三种格式:

statement,基于SQL语句的模式,一般来说生成的binlog尺寸较小,但是某些不确定性SQL语句或函数在复制过程可能导致数据不一致甚至出错;

row,基于数据行的模式,记录的是数据行的完整变化。相对更安全,推荐使用(但通常生成的binlog会比其他两种模式大很多);

mixed,混合模式,可以根据情况自动选用statement抑或row模式;这个模式下也可能造成主从数据不一致。它属于MySQL 5.1版本时期的过渡方案,已不推荐使用了。

注意:使用mysqlbinlog flashback 工具必须设置:binlog_format = row

3. flashback安装

下载flashback工具 mysqlbinlog : https://pan.baidu.com/s/1c1Ub1x2,并将mysqlbinlog文件移至mysql安装路径的bin目录下(可备份原来的mysqlbinlog为mysqlbinlog_bak),执行mysqlbinlog --help命令,可能会报错(系统版本为 CentOS 6.4_x64):

[root@centos64-slave1 bin]# mysqlbinlog --help

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

需要安装新版本的libstdc++.so.6,下载链接:https://pan.baidu.com/s/1gfIarCn

[root@centos64-slave1 ~]# cp libstdc++.so.6.0.20 /usr/lib64/[root@centos64-slave1 ~]# cd /usr/lib64/[root@centos64-slave1 lib64]# mv libstdc++.so.6 libstdc++.so.6_bak

[root@centos64-slave1 lib64]# ln -s libstdc++.so.6.0.20 libstdc++.so.6[root@centos64-slave1 lib64]# ll libstdc*lrwxrwxrwx1 root root 19 4月 6 09:30 libstdc++.so.6 -> libstdc++.so.6.0.20

-rwxr-xr-x. 1 root root 987096 7月 19 2013 libstdc++.so.6.0.13

-rw-r--r-- 1 root root 1011824 4月 6 09:28 libstdc++.so.6.0.20lrwxrwxrwx.1 root root 19 1月 14 12:25 libstdc++.so.6_bak -> libstdc++.so.6.0.13

安装完后执行mysqlbinlog --help,若报错:mysqlbinlog: /lib64/libc.so.6: version `GLIBC_2.14‘ not found (required by /usr/lib64/libstdc++.so.6),需要更新/lib64库文件。下载链接:https://pan.baidu.com/s/1kViGrIZ

# tar zxvf glibc-2.14.tar.gz

# cd glibc-2.14#mkdirbuild

# cd build

# ../configure --prefix=/opt/glibc-2.14## 检查是否有问题。

#make ## (4核可加-j4 ,8核可加-j8)

#make install# strings libc.so| grepGLIBC ## 这是我们需要的lib了,然后去更新系统的库

#cp libc.so /lib64/libc-2.14.so

#mv /lib64/libc.so.6 /lib64/libc.so.6_bak

# LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so /lib64/libc.so.6# strings/lib64/libc.so.6 | grep GLIBC

安装完成后执行:

[root@centos64-slave1 ~]# mysqlbinlog -V

mysqlbinlog Ver3.4-InnoSQL forLinux at x86_64

[root@centos64-slave1 ~]# mysqlbinlog --help |grepflashback-B, --flashback Flashback data to start_postition or start_datetime.-E, --fb-event=name only flashback this type of

flashback FALSE

发现mysqlbinlog版本已变为3.4-InnoSQL(之前的版本为3.4),且多了一个-B 参数,此参数即用于实现flashback功能。到此,mysqlbinlog已安装完成!

4. 使用简介

先创建一张表user,向user表中插入一条数据,查看binlog日志内容,可以找到刚才插入的记录:

# mysqlbinlog -vv mysql-bin.000004

### INSERT INTO `test`.`user`

### SET

### @1=30 /*SHORTINT meta=0 nullable=1 is_null=0*/### @2=‘Stephen Curry‘ /*VARSTRING(80) meta=80 nullable=1 is_null=0*/

然后使用flashback工具(-B参数)查看binlog内容,可以找到刚才插入记录的逆向操作:

# mysqlbinlog -vv mysql-bin.000004 -B

### DELETE FROM `test`.`user`

### WHERE

### @1=30 /*SHORTINT meta=0 nullable=1 is_null=0*/### @2=‘Stephen Curry‘ /*VARSTRING(80) meta=80 nullable=1 is_null=0*/

同理,delete操作将会被转换为insert,update被转换为反向的update;若在一个事务中既有insert、update、delete语句,通过使用-B参数后,不仅三种DML语句完成了逆向转换,并且语句顺序也会发生颠倒。

在binlog中找到误操作的pos变化区间后,使用mysqlbinlog -B 恢复:

# mysqlbinlog -B --start-position=296 --stop-position=429 mysql-bin.000004 | mysql -uroot -p

5. Flashback工具使用注意点

binlog日志格式必须是ROW格式:binlog_format = row ;

一个事务中的DML语句不仅会逆向转换,并且语句顺序也会发生颠倒;

只支持 insert、update、delete , 不支持drop 、truncate、alter等DDL语句。

MySQL flashback 功能

标签:tle   string   style   require   where   reload   required   提交   时间

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/waynechou/p/mysql_flashback_intro.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值