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
 
posted on 2017-12-28 16:06  天青过烟雨  阅读(745)  评论(0编辑  收藏  举报