参考:http://wubx.net/?s=mysqlbinlog

mysql官方的mysqlbinlog没有回滚的功能,淘宝大牛对官方代码进行了修改使之能够将binlog中的DML操作变成互逆的语句,比如delete变为insert,update的set和where的互换。不过注意前提是binlog的格式必须是binlog_format=ROW

另外注意导入回滚数据较多时,需要调整超时时间和最大package的大小:

binlog_format=ROW

max_allowed_packet=1024M

#max_allow_packet大小不够时报错如下:
ERROR 1153 (08S01) at line 403133: Got a packet bigger than ‘max_allowed_packet’ bytes

重构代码

http://mysql.taobao.org/index.php/Patch_source_code#Add_flashback_feature_for_mysqlbinlog

有三个版本,测试percona5518版本可以使用5.5.18_flashback_all.diff,mysql官方版本只能使用5.5.18_flashback.diff。

http://mysql.taobao.org/images/5/53/5.5.18_flashback_all.diff

http://mysql.taobao.org/images/0/0f/5.5.18_flashback.diff

percona5.5.18版本的下载链接:

http://www.percona.com/downloads/Percona-Server-5.5/Percona-Server-5.5.18-23.0/source/Percona-Server-5.5.18-rel23.0.tar.gz

mysql5.5.18

http://cdn.mysql.com/archives/mysql-5.5/mysql-5.5.18.tar.gz

 

cd mysql-5.5.18/
wget http://mysql.taobao.org/images/0/0f/5.5.18_flashback.diff
patch -p0 < 5.5.18_flashback.diff
## 编译成功无报错即可,无特殊编译参数要求

编译完成后,开始测试:

[root@server1 /]# /percona5518/bin/mysqlbinlog --help
在说明中多了
  -B, --flashback     Flashback data to start_postition or start_datetime.

然后可以用一个binlog文件做测试

mysql> select count(1) from t1;
+----------+
| count(1) |
+----------+
|       16 |
+----------+
1 row in set (0.00 sec)

mysql> select * from t1 where id<5;
+----+------+------+
| id | a    | b    |
+----+------+------+
|  1 | aaaa | bbbb |
|  2 | aaaa | bbbb |
|  3 | aaaa | bbbb |
|  4 | aaaa | bbbb |
+----+------+------+
4 rows in set (0.00 sec)

mysql> flush logs;
Query OK, 0 rows affected (0.11 sec)

mysql> show master status \G
*************************** 1. row ***************************
            File: mysql-bin.000010
        Position: 108
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)

mysql> update t1 set a='XXXX',b='SSSS' where id<5;
Query OK, 4 rows affected (0.04 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> flush logs;
Query OK, 0 rows affected (0.09 sec)
View Code

相关文章:

  • 2021-07-30
  • 2021-11-19
  • 2022-12-23
  • 2021-08-19
  • 2022-02-09
  • 2022-02-09
猜你喜欢
  • 2022-12-23
  • 2021-09-27
  • 2021-10-31
  • 2022-12-23
  • 2021-07-28
  • 2021-11-11
  • 2022-02-25
相关资源
相似解决方案