安装:
环境要求:
1, binlog格式必须为行,且binlog_row_image=
2,仅支持5.6与5.7
3,只能回滚DML(增、删、改)
-
<李>下载地址:https://github.com/Meituan-Dianping/MyFlash 李>
安装:
解压MyFlash-master。zip
mv MyFlash-master/usr/local/MyFlash/
gcc - w <代码> pkg-config——cflags填词glib/binlogParseGlib - 2.0 代码>来源。c - o二进制/闪回
闪回:
更新、情景描述,程序1误将xtr库下面的t2表12、11更改后0了,这是一个错误的操作,而后面的程序2将13、14更改0了,这是一个正确的操作,需要闪回程序1的误操作。
模似上述场景:
原表:
mysql>select * from xtr.t2;
+——+
| | id
+——+
| 12 |
| 11 |
| 4 |
| 3 |
| 13 |
| 14 |
+——+
6行组(0.00秒)
更新操作:
更新xtr。t2组id=0, id=12;
更新xtr。t2组id=0, id=11;
更新xtr。t2组id=0, id=13;
更新xtr。t2组id=0, id=14;
DBA接到开发的报警后:
1,刷新日志;
需要闪回的动作所在的二进制文件,这个文件必须是稳定的,需要刷新日志;
2,记录当前的binlog文件
3,解析binlog
mysqlbinlog vv bin.000038少|
838
# 180326 21:41:59服务器id 882 CRC32 0 end_log_pos x304d887b Table_map: <代码> xtr> 代码。<代码> t2> 代码映射到数字268 #这个位置开始进入xtr.t2库
882
# 180326 21:41:59服务器id 928 CRC32 0 end_log_pos x8fac8e57 Update_rows:表id 268旗帜:STMT_END_F
BINLOG '
twa5WhMLAAAALAAAAHIDAAAAAAwBAAAAAAEAA3h0cgACdDIAAQMAAXuITTA=
twa5Wh8LAAAALgAAAKADAAAAAAwBAAAAAAEAAgAB///+ CwAAAP4AAAAAV46sjw==
/。
更新<代码> xtr> 代码。<代码> t2> 代码#更改的第一条语句
,
@1=11/ INT元=0 nullable=1 is_null=0 /
设置
@1=0/ INT元=0 nullable=1 is_null=0 /
928
# 180326 21:41:59服务器id 959 CRC32 0 end_log_pos xca19e065 Xid=230
提交/。
959
# 180326 21:42:04服务器id 1024 CRC32 0 end_log_pos xe7e195c8 GTID last_committed=3 sequence_number=4
@@SESSION设置。GTID_NEXT=' 148 e1f5e befd - 11 - e7 ac58 - 08002738 - f0ad: 207/。
1024
# 180326 21:42:04服务器id 11 end_log_pos 1095 CRC32 x0c3e3fdc查询thread_id=3 exec_time=0 error_code=0
设置时间戳=1522075324/。,
/开始!
1095
# 180326 21:42:04服务器id 1139 CRC32 0 end_log_pos xd6cdd96b Table_map: <代码> xtr> 代码。<代码> t2> 代码映射到268号
1139
# 180326 21:42:04服务器id 1185 CRC32 0 end_log_pos xbd63762d Update_rows:表id 268旗帜:STMT_END_F
BINLOG '
vAa5WhMLAAAALAAAAHMEAAAAAAwBAAAAAAEAA3h0cgACdDIAAQMAAWvZzdY=
vAa5Wh8LAAAALgAAAKEEAAAAAAwBAAAAAAEAAgAB///+ DAAAAP4AAAAALXZjvQ==
/。
更新<代码> xtr> 代码。<代码> t2> 代码#更改的第二条语句
,
@1=12/ INT元=0 nullable=1 is_null=0 /
设置
@1=0/ INT元=0 nullable=1 is_null=0 /
1185
# 180326 21:42:04服务器id 1216 CRC32 0 end_log_pos xb62d1a59 Xid=231
提交/。
1216 #两个事务结束的位置点位置
4。/闪回——sqlTypes='更新'——binlogFileNames=/数据/mysql/bin。000038年,起始位置=838 -停止位置=1216 - outBinlogFileNameBase=更新
反解析更新操作,生成以更新开头的文件
生成的文件名:binlog_output_base.flashback
5, mysqlbinlog binlog_output_base。闪回,skip-gtids | mysql -uroot - p ' 123 s/tmp/mysql_3306.sock
导入数据库
6,查询数据库
mysql>select * from xtr.t2;
+——+
| | id
+——+
| 12 |
| 11 |
| 4 |
| 3 |
| 0 |
| 0 |
+——+
6行组(0.00秒)
闪回完成
插入场景闪回
原表:
mysql>select * from xtr.t2;
+——+
| | id
+——+
| 12 |
| 11 |
| 4 |
| 3 |
| 0 |
| 0 |
+——+
6行组(0.00秒)
插入数据
mysql>插入额外的。t2值(99),
查询好了,1行影响(0.00秒)
mysql>插入额外的。t2值(88),
查询好了,1行影响(0.00秒)
mysql>插入额外的。t2值(77),
查询好了,1行影响(0.00秒)
mysql>select * from xtr.t2;
+——+
| | id