mysqlbinlog_flashback
简介
项目地址:https://github.com/58daojia-dba/mysqlbinlog_flashback
安装包下载:https://www.modb.pro/download/536707
阿里的工具
需要有python才能解析
是在线读取row格式的mysqld的binlog,然后生成反向的sql语句的工具。一般用于数据恢复的目的。
所谓反向的sql语句就是如果是insert,则反向的sql为delete。如果delete,反向的sql是insert,如果是update, 反向的sql还是update,但是update的值是原来的值。
使用限制
1.支持mysql版本为MySQL 5.5 and 5.6.因为底层使用的是python-mysql-replication包。
2.数据库必须是row格式的。原因看这个链接
3.反向生成的表必须有主键。
4.日志必须在主库存在
5.反向生成的mysql数据类型列出在下面。没有列出的类型没有经过严格的测试,也许有问题
6.支持的类型
允许解析的字段类型,不在里面的会报错
ALLOW_TYPE={ "varchar":True, "char":True, "datetime":True, "date":True, "time":True, "timestamp":True, "bigint":True, "mediumint":True, "smallint":True, "tinyint":True, "int":True, "smallint":True, "decimal":True, "float":True, "double":True, "longtext":True, "tinytext":True, "text":True, "mediumtext":True }
对mysql字符集的支持什么
utf8测试通过。gbk方式没有测试,应该问题不大。
导入mysql时一定指定,mysql ... --default-character-set=utf8mb4
##参数说明 python mysqlbinlog_back.py --help 看在线的帮助
安装
依赖的包PyMySQL和环境 python2.6
python --version有的话安装pip
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
python get-pip.py
pip install PyMySQL

pymysql版本装的高了会报错 “ImportError: cannot import name charset_to_encoding”
pip uninstall pymysql卸载后重新装下低版本的
pip install pymysql~=0.9.3

python mysqlbinlog_back.py --help命令可以正常显示说明安装成功 
例子
最简单的例子为 python mysqlbinlog_back.py --host="127.0.0.1" --username="root" --port=43306 --password="" --schema=test --table="test5"
下面是程序输出结果 ls -l log/*
-rw-r--r-- 1 root root 2592 Nov 9 15:44 log/save_data_dml_test_20161109_154434.sql
-rw-r--r-- 1 root root 1315 Nov 9 15:44 log/flashback_test_20161109_154434.sql <--- 反向sq文件
-rw-r--r-- 1 root root 441 Nov 9 15:44 log/save_data_create_table_test_20161109_154434.sql它会在线连接参数指定mysql,读取binlog,仅仅抽取对schema为test 表名test5的binlog,生成反向sq文件保存在log目录下,其中flash_开头的文件是反向的sql语句。
用mysql命令导入数据是一定指定字符集为utf8mb4,比如
mysql ... --default-character-set=utf8mb4 test < flashback_test_20161109_154434.sql##详细描述
mysqlbinlog_back.py在线连接参数指定mysql,读取binlog,如果缺省,它通过show binary logs命令找到最近的binlog文件,从文件开头开始解析,一直解析到当前时间退出。
如果指定开始binary log文件名和位置(BINLOG_START_FILE_NAME,BINLOG_START_FILE_POSITION),会从指定binary log文件名和位置开始解析,一直BINLOG_END_TIME结束,中间会自动扫描跨多个binlog.
生成文件目录可以通过OUTPUT_FILE_PATH来指定。目录下有2个类: 一类是反向解析的文件,格式为flashback_schema名_当前时间.sql . 另一类用于审查数据的sql,审查数据的sql用于记录操作类型,sql的老、新值。其中, save_data_create_table_开头的文件用于生成建表语句,save_data_dml用于插入到新的表中。
测试:
delete数据

生成回滚文件
python mysqlbinlog_back.py --host="192.168.0.135" --username="root" --password="123456" --schema=test --table="t" --binlog_start_time="2022-05-08 19:26:00"会在.log目录下生成回滚文件flashback_*****.sql


回滚delete
mysql -uroot -p123456 --default-character-set=utf8mb4 test < flashback_test_20220508_193024.sql







