MySQL Flashback 闪回功能详解
来源:互联网 发布:剑灵捏脸人族萝莉数据 编辑:程序博客网 时间:2024/06/03 22:53
1. 简介
mysqlbinlog flashback(闪回)用于快速恢复由于误操作丢失的数据。在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos)。比如忘了带where条件的update、delete操作,传统的恢复方式是利用全备+二进制日志前滚进行恢复,相比于传统的全备+增备,flashback显然更为快速、简单。
目前MySQL的flashback功能是利用binlog完成的,第一个实现该功能的是阿里云的彭立勋, 他在MySQL 5.5版本上就已实现,并将其提交给MariaDB。
2. 闪回原理
原理:flashback工具(-B 参数)可对rows格式的binlog可以进行逆向操作,delete反向生成insert、update生成反向的update、insert反向生成delete。
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 --helpmysqlbinlog: /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*lrwxrwxrwx 1 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# mkdir build# cd build# ../configure --prefix=/opt/glibc-2.14 ## 检查是否有问题。# make ## (4核可加-j4 ,8核可加-j8)# make install# strings libc.so | grep GLIBC ## 这是我们需要的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 -Vmysqlbinlog Ver 3.4-InnoSQL for Linux at x86_64[root@centos64-slave1 ~]# mysqlbinlog --help |grep flashback -B, --flashback Flashback data to start_postition or start_datetime. -E, --fb-event=name only flashback this type offlashback 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 闪回功能详解
- oracle闪回功能详解(oracle独有的flashback功能)
- 【Flashback】Flashback Drop闪回删除功能实践
- 【Flashback】Flashback Database闪回数据库功能实践
- 【Flashback】启用Flashback Database闪回数据库功能
- 开启oracle的flashback闪回功能
- Oracle Flashback 闪回查询功能
- 开启oracle的flashback闪回功能
- 开启oracle的flashback闪回功能
- [Flashback]开启数据库闪回数据库功能
- Flashback Database 闪回数据库功能测试
- 用Oracle闪回功能(flashback)恢复删除的数据
- 用Oracle闪回功能(flashback)恢复删除的数据
- oracle利用flashback 闪回功能恢复delete数据
- [Flashback]Flashback Database闪回数据库实验
- mysql flashback
- 【Flashback】Flashback EXP功能实践
- 闪回技术(flashback)
- nodejs爬虫如何设置动态ip以及userAgent
- no space left on device
- Android开发问题总结(一)
- getdata软件破解版+教程
- Android Studio项目上传到码云
- MySQL Flashback 闪回功能详解
- 幂等研究
- 学习Python第二弹——测试代码
- 计算TF-IDF
- 诸城方言高端词汇教学
- 轻松初探 Python 篇(四)—list tuple range 知识汇总
- linux 后台运行node服务指令
- Unity3D移动平台动态读取外部文件全解析
- 正向代理与反向代理【总结】