zoukankan      html  css  js  c++  java
  • binlog2sql安装及用法简介

    我的版本说明

    MySQL:8.0.20
    Python:3.69
    

    这里一定要注意!!!pymysql必须是这个版本 pip install PyMySQL==0.9.3
    GitHub地址:https://github.com/danfengcao/binlog2sql

    1. binlog2sql功能简介

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

    2. binlog2sql安装

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

    3. binlog2sql使用

    MySQL server必须设置以下参数:

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

    user需要的最小权限集合:

    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 
    

    4. 参数选项简介

    -B, --flashback 生成回滚语句
    --start-file 需要解析的binlog文件
    --start-position 解析binlog的起始位置
    --stop-position解析binlog的结束位置
    --start-datetime 从哪个时间点的binlog开始解析,格式必须为datetime
    --stop-datetime 到哪个时间点的binlog停止解析,格式必须为datetime
    -d, --databases 只解析目标db的sql,多个库用空格隔开,如-d db1 db2,可选,默认为空。
    -t, --tables 只解析目标table的sql,多张表用空格隔开,如-t tbl1 tbl2,可选,默认为空。
    --only-dml 只解析dml,忽略ddl。可选。默认False。
    --sql-type 只解析指定类型,支持INSERT, UPDATE, DELETE。多个类型用空格隔开,如--sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。
    

    4.1 解析模式

    --stop-never 持续解析binlog。可选。默认False,同步至执行命令时最新的binlog位置。
    -K, --no-primary-key 对INSERT语句去除主键。可选。默认False
    -B, --flashback 生成回滚SQL,可解析大文件,不受内存限制。可选。默认False。与stop-never或no-primary-key不能同时添加。
    --back-interval -B模式下,每打印一千行回滚SQL,加一句SLEEP多少秒,如不想加SLEEP,请设为0。可选。默认1.0。
    

    5. 具体使用举例

    db:zxw table:t3

    row格式binlog插入id=1记录

    利用binlog2sql生成刚才操作的解析

    python3 binlog2sql.py -hxx -P3307 -uadmin -p'xx' -d'zxw' -t't3' --start-file='binlog.000002'

    生成的文本显示:

    USE b'zxw';
    create  table  t3(id int);
    INSERT INTO `zxw`.`t3`(`id`) VALUES (1); #start 463 end 624 time 2020-12-24 07:39:27
    INSERT INTO `zxw`.`t3`(`id`) VALUES (2); #start 734 end 895 time 2020-12-24 07:39:29
    INSERT INTO `zxw`.`t3`(`id`) VALUES (3); #start 1005 end 1166 time 2020-12-24 07:39:33
    

    生成回滚语句,加上-B参数:

    python3 binlog2sql.py -hxx -P3307 -uadmin -p'xx' -d'zxw' -t't3' -B --start-file='binlog.000002'

    生成的文本显示:

    DELETE FROM `zxw`.`t3` WHERE `id`=3 LIMIT 1; #start 1005 end 1166 time 2020-12-24 07:39:33
    DELETE FROM `zxw`.`t3` WHERE `id`=2 LIMIT 1; #start 734 end 895 time 2020-12-24 07:39:29
    DELETE FROM `zxw`.`t3` WHERE `id`=1 LIMIT 1; #start 463 end 624 time 2020-12-24 07:39:27
    

    应用生成的回滚SQL

    mysql -hxx -P3307 -uadmin -p'xx' zxw < rollback.sql

    查看此时表中数据

    mysql> select  *  from t3;
    Empty set (0.00 sec)
    

    补充:根据position点生成指定的范围binlog的语句:

    python3  binlog2sql.py  -h172.28.131.234 -P3307  -uadmin -p'admin' -d'zxw'  -t't3'   --start-file='binlog.000002'  --start-position=463  --stop-position=895
    

    6. TIPS

    (1)闪回的目标:快速筛选出真正需要回滚的数据;
    (2)先根据库、表、时间做一次过滤,再根据位置做更准确的过滤;
    (3)由于数据一直在写入,要确保回滚sql中不包含其他数据。可根据是否是同一事务、误操作行数、字段值的特征等等来帮助判断;
    (4)执行回滚sql时如有报错,需要查实具体原因,一般是因为对应的数据已发生变化。由于是严格的行模式,只要有唯一键(包括主键)存在,就只会报某条数据不存在的错,不必担心会更新不该操作的数据。业务如果有特殊逻辑,数据回滚可能会带来影响;
    (5)如果只回滚某张表,并且该表有关联表,关联表并不会被回滚,需与业务方沟通清楚。
    
  • 相关阅读:
    SQL:分析函数、排名函数、聚合函数配合窗口函数 OVER 的用法
    SQL:MySQL 中各子句的执行逻辑过程
    SQL:CASE 表达式应用总结
    SQL:BLOB 和 TEXT
    SQL:char 和 varchar、binary 和 varbinary、二进制字符串、严格模式、汉字编码方式
    大数据:数据质量
    大数据:存储和成本管理
    大数据:计算管理
    jQuery.validate.js笔记
    Vistual Studio 条件编辑应用
  • 原文地址:https://www.cnblogs.com/any-way/p/14184300.html
Copyright © 2011-2022 走看看