当前位置: 移动技术网 > IT编程>数据库>MSSQL > 大众点评binlog2sql——二进制日志解析、回滚语句生成

大众点评binlog2sql——二进制日志解析、回滚语句生成

2018年12月27日  | 移动技术网IT编程  | 我要评论

815910 就爱你影视,周口师范学院教务处,杨幂 快乐大本营

1、简介

功能用途:

数据快速回滚(闪回)

主从切换后新master丢数据的修复

从binlog生成标准sql,带来的衍生功能

使用前提:

###mysql server必须设置以下参数:

[mysqld]

server_id = 1

log_bin = /var/log/mysql/mysql-bin.log

max_binlog_size = 1g

binlog_format = row

binlog_row_image = full

###user需要的最小权限集合:

select, super/replication client, replication slave

建议授权

grant select, replication slave, replication client on *.* to

###权限说明:

select:需要读取server端information_schema.columns表,获取表结构的元信息,拼接成可视化的sql语句

super/replication client:两个权限都可以,需要执行'show master status', 获取server端的binlog列表

replication slave:通过binlog_dump协议获取binlog内容的权限

2、安装配置

shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql

shell> pip install -r requirements.txt

附加:

软件包已经下载完成,需要提前安装pip。

报错处理:

importerror: no module named setuptools

解决方法

wget https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz

tar zxvf setuptools-0.6c11.tar.gz

cd setuptools-0.6c11

python setup.py install

3、基本用法

解析出标准sql

shell> python binlog2sql.py -h127.0.0.1 -p3306 -uadmin -p'admin' -dtest -t test3 test4 --start-file='mysql-bin.000002'

输出:

insert into`test`.`test3`(`addtime`,`data`,`id`) values ('2016-12-10 13:03:38','english', 4); #start 570 end 736

update`test`.`test3` set`addtime`='2016-12-10 12:00:00',`data`='中文',`id`=3 where`addtime`='2016-12-10 13:03:22' and`data`='中文' and`id`=3 limit 1; #start 763 end 954

delete from`test`.`test3` where`addtime`='2016-12-10 13:03:38' and`data`='english' and`id`=4 limit 1; #start 981 end 1147

解析出回滚sql

shell> python binlog2sql.py --flashback -h127.0.0.1 -p3306 -uadmin -p'admin' -dtest -ttest3 --start-file='mysql-bin.000002' --start-position=763 --stop-position=1147

输出:

insert into`test`.`test3`(`addtime`,`data`,`id`) values ('2016-12-10 13:03:38','english', 4); #start 981 end 1147

update`test`.`test3` set`addtime`='2016-12-10 13:03:22',`data`='中文',`id`=3 where`addtime`='2016-12-10 12:00:00' and

4、选项说明

选项:

###mysql连接配置

-h host; -p port; -u user; -p password

###解析模式

--stop-never 持续同步binlog。可选。不加则同步至执行命令时最新的binlog位置。

-k, --no-primary-key 对insert语句去除主键。可选。

-b, --flashback 生成回滚语句,可解析大文件,不受内存限制,每打印一千行加一句sleep select(1)。可选。与stop-never或no-primary-key不能同时添加。

###解析范围控制

--start-file 起始解析文件。必须。

--start-position/--start-pos start-file的起始解析位置。可选。默认为start-file的起始位置。

--stop-file/--end-file 末尾解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。

--stop-position/--end-pos stop-file的末尾解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。

--start-datetime 从哪个时间点的binlog开始解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。

--stop-datetime 到哪个时间点的binlog停止解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。

###对象过滤

-d, --databases 只输出目标db的sql。可选。默认为空。

-t, --tables 只输出目标tables的sql。可选。默认为空。

5、最终总结

适用于增删改等误操作的闪回。

可用于单表恢复后,后续的二进制日志中的,此表的其他操作语句重新生成执行,减少数据丢失量。

可以生成标准的sql,结合inception实现对开发的sql语句执行标准的制定。

仅针对增删改操作的sql生成,对ddl语句只能查看到,并不能生成回滚。对于已经drop的表应使用备份先进性恢复,之后再根据恢复的位置,从二进制日志再进行sql生成并应用。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网