zoukankan      html  css  js  c++  java
  • mysql5.6整表数据删除binlong恢复

    binlog处理

    binlog恢复有2种,

    1,用mysql自带的mysqlbinlog 工具

    2,用阿里人开发的binlog2sql和mysqlbinlog_flashback这里用binlog2sql

     

     

     

    1,用mysql自带的mysqlbinlog 工具


    ---------------------------- 开始----------------------------

    shell脚本如下,前提条件必须是MySQL开启binlog,使用ROW模式:

    #!/bin/sh

    binlogname=master-bin.000066

    stdate="2017-12-27 19:00:00"

    endate="2017-12-27 21:00:00"

    txtname=arc_rule_engine.txt

    sqlname=arc_rule_engine_ins.sql

    delete_tabname='`arc_t`.`arc_rule_engine`'

    mysqlbinlog --no-defaults --base64-output=decode-rows -v -v --start-datetime="${stdate}" --stop-datetime="${endate}" $binlogname| sed -n "/### DELETE FROM ${delete_tabname}/,/COMMIT/p" > $txtname

    cat $txtname | sed -n '/###/p' | sed 's/### //g;s//*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/SELECT/g;' |sed -r 's/(@14.*),/1;/g' | sed 's/@[1-9]=//g' | sed 's/@1[0-9]=//g' > $sqlname

    参数描述:

    binlogname=指定binlog文件路径

    stdate=指定恢复起始时间

    endate=指定恢复截止时间

    txtname=指定文本文件

    sqlname=指定恢复后输出到SQL文件

    delete_tabname=指定待恢复库名表名

    -----------结束--------------------------


    2,通过binlog2sql数据恢复

    1),安装

    shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
    shell> pip install -r requirements.txt
    注意:如果没有git和pip命令请按照
    ubuntu:
    apt-get install git
    apt-get install python-pip
    centos:

           yum install epel* -y

           yum install pyhton-pip

           yum install pymysql

    2,)数据恢复

        python binlog2sql/binlog2sql.py -h192.168.106.76 -P3306 -uroot -p'Hello1234' -darc_t -tarc_rule_engine --start-file='master-bin.000066' --start-datetime

       python binlog2sql/binlog2sql.py -h192.168.106.76 -P3306 -uroot -p'Hello1234' -darc_t -tarc_rule_engine --start-file='master-bin.000066' --start-datetime='2017-12-27 19:00:00' --stop-datetime='2017-12-27 21:00:00'

    --数据查看

    python binlog2sql/binlog2sql.py -h192.168.106.76 -P3306 -uroot -p'Hello1234' -darc_t -tarc_rule_engine --start-file='master-bin.000066' --sql-type DELETE

    --数据恢复

    python binlog2sql/binlog2sql.py  --flashback -h192.168.106.76 -P3306 -uroot -p'Hello1234' -darc_t  -tarc_rule_engine  --start-file='master-bin.000066' --sql-type DELETE > flashback.sql

     到处sql直接执行就可以了

    3),参数解析: 

    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。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。

    4) ,参考:https://mp.weixin.qq.com/s/1Y6xLIwK9_Lx5eCiBBm9jQ

        https://github.com/danfengcao/binlog2sql
     
  • 相关阅读:
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
    第九周学习进度条
    个人冲刺
    第八周进度条
    Git疑难解决
    Git常用命令
    git配置SSH公钥
    Laravel框架中如何使用 Presenter 模式?
  • 原文地址:https://www.cnblogs.com/codedevelop/p/8136202.html
Copyright © 2011-2022 走看看