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 模式只支持 DML,DDL 不会输出;而且 flashback 模式下,一次性处理的 binlog 不宜过大,不能超过内存大小(有待优化)。
DDL 语句,在整个测试过程中都是无法被回滚的
解析出标准的SQL:
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'123456' -d test --start-file='mysql-bin.000019'
根据标准的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
将自己所需的标准SQL或者回滚SQL,导入成SQL文件,导入数据库即可。