暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql闪回工具(1)——mysqlbinlog_flashback

原创 李嘉诚 2022-05-09
2086

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



最后修改时间:2022-05-09 14:19:54
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论