MyFlash MySQL闪回工具

  

安装:
环境要求:
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>   

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>   

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

MyFlash MySQL闪回工具