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