zoukankan      html  css  js  c++  java
  • binlog2sql

    看到使用binlog2sql恢复数据,测试玩玩~
    环境:CentOS6.5源码安装多个MySQL实例及复制搭建
    由于原先的复制采用binlog-format=mixed,先将其修改为binlog-format=row

    /******** 测试环境,步骤简化 ********/
    #Master上操作
    [root@VMUest ~]# mysqldump -uroot -p -P3306 --databases db_swzf jbts --master-data=2 --lock-all-tables > /myshare/user_db.sql
    [root@VMUest ~]# cat /myshare/user_db.sql |grep -i 'change'
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000048', MASTER_LOG_POS=120;
    #Slave上操作
    mysql> change master to
    master_host='192.168.85.129',
    master_port=3306,
    master_user='repl',
    master_password='repl',
    master_log_file='mysql-bin.000048',
    master_log_pos=120;
    View Code

    binlog2sql安装

    #检测是否安装git、pip
    [root@VMUest ~]# git --help
    [root@VMUest ~]# pip --help
    #安装git、pip
    [root@VMUest ~]# yum -y install git
    [root@VMUest ~]# yum -y install epel-release
    [root@VMUest ~]# yum -y install python-pip
    #安装
    [root@VMUest ~]# cd /tools/
    [root@VMUest tools]# git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
    [root@VMUest binlog2sql]# pip install -r requirements.txt

    binlog2sql使用

    [root@VMUest binlog2sql]# python binlog2sql.py -h192.168.85.129 -P3306 -umydba -p'mysql5635' -ddb_swzf -tarea_info --start-file='mysql-bin.000047'
    python: can not open file 'binlog2sql.py': [Errno 2] No such file or directory
    #查找文件位置
    [root@VMUest binlog2sql]# find / -type f -name "binlog2sql.py"
    /tools/binlog2sql/binlog2sql/binlog2sql.py
    [root@VMUest binlog2sql]# pwd
    /tools/binlog2sql
    [root@VMUest binlog2sql]# cd /tools/binlog2sql/binlog2sql/
    [root@VMUest binlog2sql]# python binlog2sql.py -h192.168.85.129 -P3306 -umydba -p'mysql5635' -ddb_swzf -tarea_info --start-file='mysql-bin.000047'

    测试样例

    #准备测试数据
    mysql> CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(20) NOT NULL,
    `create_time` datetime NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    mysql> insert into test (name,create_time) values ('Glon Ho','2012-10-1'),('Eason Chan', '2016-05-02'),('Jacky Cheung', '2015-05-02');
    mysql> update test set create_time = '2017-05-12' where name = 'Glon Ho';
    mysql> delete from test where name = 'Jacky Cheung';
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000048 |     1068 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    View Code

    样例解析

    #直接整个解析 mysql-bin.000048 日志
    [root@VMUest binlog2sql]# python binlog2sql.py -h192.168.85.129 -P3306 -umydba -p'mysql5635' -dtest -ttest --start-file='mysql-bin.000048'
    USE test;
    CREATE TABLE `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(20) NOT NULL,
    `create_time` datetime NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2012-10-01 00:00:00', 1, 'Glon Ho'); #start 376 end 597 time 2017-05-23 17:08:57
    INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2016-05-02 00:00:00', 2, 'Eason Chan'); #start 376 end 597 time 2017-05-23 17:08:57
    INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2015-05-02 00:00:00', 3, 'Jacky Cheung'); #start 376 end 597 time 2017-05-23 17:08:57
    UPDATE `test`.`test` SET `create_time`='2017-05-12 00:00:00', `id`=1, `name`='Glon Ho' WHERE `create_time`='2012-10-01 00:00:00' AND `id`=1 AND `name`='Glon Ho' LIMIT 1; #start 628 end 824 time 2017-05-23 17:26:57
    DELETE FROM `test`.`test` WHERE `create_time`='2015-05-02 00:00:00' AND `id`=3 AND `name`='Jacky Cheung' LIMIT 1; #start 855 end 1037 time 2017-05-23 17:27:20
    [root@VMUest binlog2sql]# 
    #按位置解析出回滚SQL
    [root@VMUest binlog2sql]# python binlog2sql.py --flashback -h192.168.85.129 -P3306 -umydba -p'mysql5635' -dtest -ttest --start-file='mysql-bin.000048' --start-position=376 --stop-position=597
    DELETE FROM `test`.`test` WHERE `create_time`='2015-05-02 00:00:00' AND `id`=3 AND `name`='Jacky Cheung' LIMIT 1; #start 376 end 597 time 2017-05-23 17:08:57
    DELETE FROM `test`.`test` WHERE `create_time`='2016-05-02 00:00:00' AND `id`=2 AND `name`='Eason Chan' LIMIT 1; #start 376 end 597 time 2017-05-23 17:08:57
    DELETE FROM `test`.`test` WHERE `create_time`='2012-10-01 00:00:00' AND `id`=1 AND `name`='Glon Ho' LIMIT 1; #start 376 end 597 time 2017-05-23 17:08:57
    #按时间解析出回滚SQL
    [root@VMUest binlog2sql]# python binlog2sql.py --flashback -h192.168.85.129 -P3306 -umydba -p'mysql5635' -dtest -ttest --start-file='mysql-bin.000048' --start-datetime="2017-05-23 17:26:57" --stop-datetime="2017-05-23 17:27:21"
    INSERT INTO `test`.`test`(`create_time`, `id`, `name`) VALUES ('2015-05-02 00:00:00', 3, 'Jacky Cheung'); #start 855 end 1037 time 2017-05-23 17:27:20
    UPDATE `test`.`test` SET `create_time`='2012-10-01 00:00:00', `id`=1, `name`='Glon Ho' WHERE `create_time`='2017-05-12 00:00:00' AND `id`=1 AND `name`='Glon Ho' LIMIT 1; #start 628 end 824 time 2017-05-23 17:26:57

    注意flashback只会解析DML,对于DDL 不会输出。可使用mysqlbinlog/show binlog events或者Percona Toolkit查看二进制日志。

  • 相关阅读:
    BZOJ4004: [JLOI2015]装备购买
    POJ3696:The Luckiest number
    BZOJ1053: [HAOI2007]反素数ant
    BZOJ1029: [JSOI2007]建筑抢修
    牛站(贪心+暴力做法)
    浅谈SPFA(没有特别的探讨,只是对某天晚上的思考做个记录)
    火车进栈问题(如何快速计算单个组合数)
    雷达设备
    畜栏预定
    防晒
  • 原文地址:https://www.cnblogs.com/ShanFish/p/6895401.html
Copyright © 2011-2022 走看看