zoukankan      html  css  js  c++  java
  • binlog2sql的使用

    第1章 使用该工具的前提

    1. binlog_format为ROW,且binlog_row_image为full或noblog,默认为full。
    2. 必须开启MySQL Server,理由有如下两点:
       1> 它是基于BINLOG_DUMP协议来获取binlog内容
       2> 需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句
    该工具所需权限如下:
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO  .....
    因为是伪装成slave来获取主的二进制事件,故无需对binlog有可读权限。
    3. 不能回滚DDL语句(truncate,drop等操作)
    

    第2章 安装部署流程

    1.1 上传软件并解压

    1. 上传
    2. unzip binlog2sql-fg.zip 
    

    1.2 安装binsql2

    cd binlog2sql/
    cd binlog2sql/
    #说明:里面有2个binlog2sql,所以进2层
    cd binlog2sql_dependencies/
    [root@db02 binlog2sql_dependencies]# tar xf setuptools-0.6c11.tar.gz 
    [root@db02 binlog2sql_dependencies]# cd setuptools-0.6c11/
    [root@db02 setuptools-0.6c11]# python setup.py install
    [root@db02 setuptools-0.6c11]# cd ..
    [root@db02 binlog2sql_dependencies]# tar xf pip-9.0.1.tar.gz 
    [root@db02 binlog2sql_dependencies]# cd pip-9.0.1/
    [root@db02 pip-9.0.1]# python setup.py install
    [root@db02 pip-9.0.1]# cd ..
    [root@db02 binlog2sql_dependencies]# pip install *.whl mysql-replication-0.9.tar.gz 
    [root@db02 binlog2sql_dependencies]# cd ..
    [root@db02 binlog2sql]# ls
    binlog2sql  binlog2sql_dependencies
    [root@db02 binlog2sql]# cd binlog2sql
    [root@db02 binlog2sql]# ls
    binlog2sql.py  binlog2sql_util.py  binlog2sql_util.pyc  __init__.py
    #设置别名
    [root@db02 binlog2sql]# pwd
    /root/binlog2sql/binlog2sql/binlog2sql
    [root@db02 binlog2sql]# alias binlog2sql='python /root/binlog2sql/binlog2sql/binlog2sql/binlog2sql.py'
    #检查
    [root@db02 binlog2sql]# binlog2sql --help
    #把别名加入环境变量,并使其及时生效
    [root@db02 ~]# vim /etc/profile
    --加入以下内容
     alias binlog2sql='python /root/binlog2sql/binlog2sql/binlog2sql/binlog2sql.py'
     [root@db02 ~]# source /etc/profile
    

    1.3 MySQL的配置要开启以下选项

    [mysqld]
    server_id=1
    #二进制日志路劲
    log_bin=/data/binlog/mysql-bin
    max_binlog_size=1G
    #默认为行模式,可以写
    binlog_format=row
    #默认模式,可以不用写
    binlog_row_image=full
    

    1.3 binlog2sql参数说明

    [root@db02 binlog2sql]# binlog2sql --help
    选项
    mysql连接配置
    -h host; -P port; -u user; -p password
    解析模式
    --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。
    解析范围控制
    --start-file 起始解析文件,只需文件名,无需全路径 。必须。
    --start-position/--start-pos 起始解析位置。可选。默认为start-file的起始位置。
    --stop-file/--end-file 终止解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。
    --stop-position/--end-pos 终止解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。
    --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 只解析目标table的sql,多张表用空格隔开,如-t tbl1 tbl2。可选。默认为空。
    --only-dml 只解析dml,忽略ddl。可选。默认TRUE。
    --sql-type 只解析指定类型,支持INSERT, UPDATE, DELETE。多个类型用空格隔开,如--sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。
    

    第3章 binlog2sql的使用

    1.1 模拟数据

    create database yfc charset utf8mb4;
    use yfc
    create table t1(id int,name varchar(10));
    insert into t1 values(1,'aa'),(2,'bb'),(3,'cc'),(4,'dd');
    commit;
    delete from t1 where id<3;
    commit;
    select * from t1;
    +------+------+
    | id   | name |
    +------+------+
    |    3 | cc   |
    |    4 | dd   |
    +------+------+
    

    1.2 恢复流程

    第一个里程:查看binlog文件

    show master statusG
    mysql> show master statusG
    *************************** 1. row ***************************
                 File: mysql-bin.000017
             Position: 1803
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: be150990-174c-11ea-9182-000c29191628:1-44
    1 row in set (0.00 sec)
    

    第二个里程:根据操作时间定位误操作SQL的binlog位置

    [root@db02 ~]# cd binlog2sql/binlog2sql/binlog2sql
    [root@db02 binlog2sql]# ls
    binlog2sql.py  binlog2sql_util.py  binlog2sql_util.pyc  __init__.py
    [root@db02 binlog2sql]# binlog2sql -h192.168.126.201 -P3306 -uflush -p123 -dyfc -tt1 --start-file='mysql-bin.000017' --start-datetime='2019-12-12 15:49:10' --stop-datetime='2019-12-12 15:51:10'
    USE yfc;
    drop database yfc;
    USE yfc;
    create database yfc charset utf8mb4;
    USE yfc;
    create table t1(id int,name varchar(10));
    INSERT INTO `yfc`.`t1`(`id`, `name`) VALUES (1, 'aa'); #start 5805 end 5990 time 2019-12-12 15:49:47
    INSERT INTO `yfc`.`t1`(`id`, `name`) VALUES (2, 'bb'); #start 5805 end 5990 time 2019-12-12 15:49:47
    INSERT INTO `yfc`.`t1`(`id`, `name`) VALUES (3, 'cc'); #start 5805 end 5990 time 2019-12-12 15:49:47
    INSERT INTO `yfc`.`t1`(`id`, `name`) VALUES (4, 'dd'); #start 5805 end 5990 time 2019-12-12 15:49:47
    DELETE FROM `yfc`.`t1` WHERE `id`=1 AND `name`='aa' LIMIT 1; #start 6086 end 6255 time 2019-12-12 15:49:47
    DELETE FROM `yfc`.`t1` WHERE `id`=2 AND `name`='bb' LIMIT 1; #start 6086 end 6255 time 2019-12-12 15:49:47
    

    第三个里程:从结果找至误操作的位置为6086-6255之间,生成回滚sql

    [root@db02 binlog2sql]# binlog2sql -h192.168.126.201 -P3306 -uflush -p123 -dyfc -tt1 --start-file='mysql-bin.000017' --start-position=6086 --stop-position=6255 -B >/tmp/2.sql
    [root@db02 binlog2sql]# cat /tmp/2.sql 
    INSERT INTO `yfc`.`t1`(`id`, `name`) VALUES (2, 'bb'); #start 6086 end 6255 time 2019-12-12 15:49:47
    INSERT INTO `yfc`.`t1`(`id`, `name`) VALUES (1, 'aa'); #start 6086 end 6255 time 2019-12-12 15:49:47
    

    第四个里程:编辑回滚SQL文件

    [root@db02 binlog2sql]# vim /tmp/2.sql
    #加入commit,因为这是已经提交的数据,如果是没有提交的数据,可以不用编辑
    

    第五个里程:闪回恢复数据

    mysql> use yfc
    mysql>source /tmp/2.sql
    

    第六个里程:查看数据是否恢复了

    mysql> select * from t1;
    +------+------+
    | id   | name |
    +------+------+
    |    3 | cc   |
    |    4 | dd   |
    |    2 | bb   |
    |    1 | aa   |
    +------+------+
    4 rows in set (0.00 sec)
    
    学习的进阶之路
  • 相关阅读:
    C++中的函数
    C++基本语句
    面向对象程序设计
    数据结构中的算法
    数据结构开篇
    条件编译
    文件包含
    简单的宏替换
    系统启动过程
    parted 命令学习
  • 原文地址:https://www.cnblogs.com/yufenchi/p/12961765.html
Copyright © 2011-2022 走看看