专栏首页MYSQL轻松学开源数据闪回工具—binlog2sql介绍

开源数据闪回工具—binlog2sql介绍

一、binlog2sql介绍

binlog2sql是国内MySQL大佬danfengcao使用python开发,许多MySQL爱好者参与改进的一款MySQL binlog解析软件。根据不同选项,可以得到原始SQL、回滚SQL、去除主键的SQL等。

github地址为:https://github.com/danfengcao/binlog2sql

该工具主要用于:

  • 数据快速回滚(闪回);
  • 从binlog生成标准SQL;

适用MySQL版本:MySQL5.6 、MySQL5.7

二、安装binlog2sql

# 安装git
shell> yum install -y git

# 安装pip工具
shell> yum install -y epel-release
shell> yum install -y python-pip

# 安装binlog2sql
shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
shell> pip install -r requirements.txt

三、使用前提

基于最小侵入原则,我们一般在管理节点执行操作,只需把binlog2sql安装在管理节点机器即可。

要使用binlog2sql,MySQL服务器需要设置以下参数:

[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full

四、使用方式

需要创建一个用户并授权

用户:binlog2sql

管理节点IP:192.168.1.1

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'binlog2sql'@'192.168.1.1' identified by 'xxxxx';

例如:

python binlog2sql.py -h ip -ubinlog2sql -pxxxx -P3306 -d db -t t1 t2 --sql-type='delete' --start-file='mysql-bin.000104' --start-datetime='2020-07-16 16:46:57' --stop-datetime='2020-07-16 17:00:29' -B > rollback.sql

五、参数说明:

[root@localhost binlog2sql]# python binlog2sql.py --help
usage: binlog2sql.py [-h HOST] [-u USER] [-p [PASSWORD [PASSWORD ...]]]
                     [-P PORT] [--start-file START_FILE]
                     [--start-position START_POS] [--stop-file END_FILE]
                     [--stop-position END_POS] [--start-datetime START_TIME]
                     [--stop-datetime STOP_TIME] [--stop-never] [--help]
                     [-d [DATABASES [DATABASES ...]]]
                     [-t [TABLES [TABLES ...]]] [--only-dml]
                     [--sql-type [SQL_TYPE [SQL_TYPE ...]]] [-K] [-B]
                     [--back-interval BACK_INTERVAL]
MySQL链接配置参数
-h host; –p password; –u user ; -P port

解析模式参数:
--stop-never : 持续解析binlog,同步至执行命令时最新的binlog位置,默认false。
-K , --no-primary-key :对insert语句去除主键,默认false。
-B , --flashback : 生成回滚SQL,可解析大文件,不受内存限制,默认false。与stop-never或no-primary-key不能同时添加。
--back-interval :在-B模式下,每打印1000条回滚SQL,SLEEP多少秒,默认为1。

范围控制参数:
--start-file :起始解析文件,只需文件名,无需全路径。必需参数。
--stop-file / --end-file : 终止解析文件,默认为start-file同一个文件,若解析模式为stop-never,则该参数失效。
--start-position / --start-pos : 起始解析位置,默认start-file文件起始位置。
--stop-position / --stop-pos : 终止解析位置,默认stop-file终点位置。
--start-datetime :起始解析时间,格式为’%Y-%m-%d %H:%M:%S’。
--stop-datetime :终止解析时间,格式为’%Y-%m-%d %H:%M:%S’

对象过滤参数:
-d , --databases : 只解析目标DB的sql,多个数据库用空格隔开,如:-d db1 db2。
-t  , --tables : 只解析目标表的sql,多张表用空格隔开,如:-t table1 table2。
--only-dml :只解析DML,忽略DDL。
--sql-type : 只解析指定类型,支持INSERT,UPDATE,DELETE。多个类型用空格隔开,如--sql-type INSERT UPDATE,默认全解析。

六、案例

经常有研发上线没经过测试,或者测试不规范,造成线上多余数据被误删除或更改,如下是一个典型案例:

如果没有备份,只能通过解析binlog恢复,另外如果binlog还不是row模式,那估计真的要丢失了。

如果没有工具,只能通的mysqlbinlog命令,解析出来的结果中含有大量无关的信息,只有当时操作的记录,还需要反向拼接,对排查的增加了难度。

市面上也有一些其他开源工具,原理都差不多,但使用效率上binlog2sql更胜一筹,通过binlog2sql可以很容易搞定:

python binlog2sql.py 
-h ip          #指定目标ip,建议从库
-u binlog2sql  #指定数据库用户 
-p xxxx        #指定密码
-P 3306        #指定数据库端口 
-d db          #指定库名 
-t t1 t2       #需要恢复的表,多个用空格分隔
--sql-type='delete'                      #需要恢复的类型
--start-file='mysql-bin.000104'          #指定binlog文件 
--start-datetime='2020-07-16 16:46:57'   #开始时间 
--stop-datetime='2020-07-16 17:00:29'    #结束时间 
-B                                       #生成反向拼接sql
> rollback.sql                           #追加到文件

拿到sql文件后不要直接恢复,一定让研发确认下没问题后在恢复,恢复前对数据进行下备份。养成备份的好习惯,千万不要偷懒。

本文分享自微信公众号 - MYSQL轻松学(learnmysql)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 你真的熟悉MySQL权限吗?

    (以下操作都是以root身份登陆进行grant授权,以root@localhost身份登陆执行各种命令。) MySQL包含哪些权限,共29个。 权限说明举例us...

    MySQL轻松学
  • MySQL8.0​ 字典表增强的意义

    MySQL中数据字典是数据库重要的组成部分之一,INFORMATION_SCHEMA首次引入于MySQL 5.0,作为一种从正在运行的MySQL服务器检索元数据...

    MySQL轻松学
  • MySQL修改字符集utf8mb4

    MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4。简单说 utf8mb4 是 utf8 的超集并完全兼容utf...

    MySQL轻松学
  • 特征选择

    特征选择特征选择概述Filter 过滤法方差选择法相关系数法卡方检验互信息法Wrapper 包装法稳定性选择(Stability Selection)递归特征消...

    用户3577892
  • tf.train.Coordinator

    任何线程都可以调用coord.request_stop()来请求所有线程停止。为了配合请求,每个线程必须定期检查coord .should_stop()。一旦调...

    于小勇
  • 十款卓越工具助力大数据与分析技术

    数据已经成为现代化企业中最为重要的宝贵资源。一切决策、策略或者方法都需要依托于对数据的分析方可实现。随着“大数据分析”逐步替代其上代版本,即“商务智能”,企业正...

    小莹莹
  • 干货 | 10款超好用的开源大数据分析工具

    考虑到现有技术解决方案的复杂性与多样化,企业往往很难找到适合自己的大数据收集与分析工具。然而,混乱的时局之下已经有多种方案脱颖而出,证明其能够帮助大家切实完成大...

    灯塔大数据
  • 游戏开发 —— 协议设计

    语义:解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。

    芋道源码
  • 【盘点】十款助力大数据与分析技术的卓越工具

    导读:数据已经成为现代化企业中最为重要的宝贵资源。考虑到现有技术解决方案的复杂性与多样化,企业往往很难找到适合自己的大数据收集与分析工具。然而,混乱的时局之下已...

    钱塘数据
  • 单点登录(三)| JIRA 安装及 JIRA 集成 CAS 实践

    Jira是atlassian公司出品的一款事务管理软件。无论是需求还是BUG或者是任务,都是事务的一种,所以JIRA可以胜任非常多的角色:需求管理、缺陷跟踪、任...

    杰哥的IT之旅

扫码关注云+社区

领取腾讯云代金券