MySQL,binlog2sql回滚操作测试

Mysql 的回滚操作测试(使用工具binlog2sql):

      回滚操作:

  • 对于 delete 操作,我们从 binlog 提取出 delete 信息,反向生成 insert 回滚语句;

  • 对于 insert 操作,反向生成 delete 回滚语句;

  • 对于 update 操作,根据信息生成反向的 update 语句;

Mysql的配置要开启以下选项:

[mysqld]

server_id = 1

log_bin = /usr/local/mysql/data/mysql-bin.log

max_binlog_size = 1G

binlog_format = row

binlog_row_image = full

在闪回的时候必须启动 MySQL 服务,因为它是通过 BINLOG_DUMP 协议来获取 binlog 内容,需要读取server information_schema.COLUMNS 表,来获取表结构的元信息,才能拼接成 SQL 语句。因此需要给用户提供的最小权限如下

测试中发现,flashback 模式只支持 DMLDDL 不会输出;而且 flashback 模式下,一次性处理的 binlog 不宜过大,不能超过内存大小(有待优化)

DDL 语句,在整个测试过程中都是无法被回滚的

解析出标准的SQL

python binlog2sql.py  -h127.0.0.1 -P3306 -uroot -p'123456' -d test --start-file='mysql-bin.000019'

image.png

根据标准的SQL语句中的pos点,解析出自己所需的回滚SQL

python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uroot -p'123456' -dtest  --start-file='mysql-bin.000021' --start-position=94591569 --stop-position=94591993

 image.png

将自己所需的标准SQL或者回滚SQL,导入成SQL文件,导入数据库即可。


猜你喜欢

转载自blog.51cto.com/13214087/2309499