binlog2sql使用总结

binlog2sql是大众点评开源的一款用于解析binlog的工具,在测试环境试用了下,还不错。

其具有以下功能

1. 提取SQL

2. 生成回滚SQL

关于该工具的使用方法可参考github操作文档:https://github.com/danfengcao/binlog2sql

个人感觉该文档已相当简单明了。

使用该工具的前提

1. binlog_format为ROW,且binlog_row_image为full或noblog,默认为full。

2. 必须开启MySQL Server,理由有如下两点:

1> 它是基于BINLOG_DUMP协议来获取binlog内容

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

提取SQL示例

#  python binlog2sql.py -h192.168.244.10 -P3306 -uadmin -p123456 -dtest -ttest --start-file=‘mysql-bin.000028‘

INSERT INTO `test`.`test`(`id`, `name`) VALUES (10, ‘a‘); #start 4 end 284 time 2017-02-17 15:36:27
INSERT INTO `test`.`test`(`id`, `name`) VALUES (11, ‘b‘); #start 4 end 376 time 2017-02-17 15:36:31
UPDATE `test`.`test` SET `id`=11, `name`=‘c‘ WHERE `id`=11 AND `name`=‘b‘ LIMIT 1; #start 4 end 476 time 2017-02-17 15:36:40
DELETE FROM `test`.`test` WHERE `id`=11 AND `name`=‘c‘ LIMIT 1; #start 4 end 568 time 2017-02-17 15:36:48
INSERT INTO `test`.`test`(`id`, `name`) VALUES (12, ‘d‘); #start 599 end 763 time 2017-02-17 15:37:09
INSERT INTO `test`.`test`(`id`, `name`) VALUES (13, ‘c‘); #start 794 end 958 time 2017-02-17 15:37:15
UPDATE `test`.`test` SET `id`=13, `name`=‘d‘ WHERE `id`=13 AND `name`=‘c‘ LIMIT 1; #start 989 end 1161 time 2017-02-17 15:37:23
DELETE FROM `test`.`test` WHERE `id`=13 AND `name`=‘d‘ LIMIT 1; #start 1192 end 1356 time 2017-02-17 15:37:30

生成回滚SQL示例

# python binlog2sql.py --flashback -h192.168.244.10 -P3306 -uadmin -p123456 -dtest -ttest --start-file=‘mysql-bin.000028‘

INSERT INTO `test`.`test`(`id`, `name`) VALUES (13, ‘d‘); #start 1192 end 1356 time 2017-02-17 15:37:30
UPDATE `test`.`test` SET `id`=13, `name`=‘c‘ WHERE `id`=13 AND `name`=‘d‘ LIMIT 1; #start 989 end 1161 time 2017-02-17 15:37:23
DELETE FROM `test`.`test` WHERE `id`=13 AND `name`=‘c‘ LIMIT 1; #start 794 end 958 time 2017-02-17 15:37:15
DELETE FROM `test`.`test` WHERE `id`=12 AND `name`=‘d‘ LIMIT 1; #start 599 end 763 time 2017-02-17 15:37:09
INSERT INTO `test`.`test`(`id`, `name`) VALUES (11, ‘c‘); #start 4 end 568 time 2017-02-17 15:36:48
UPDATE `test`.`test` SET `id`=11, `name`=‘b‘ WHERE `id`=11 AND `name`=‘c‘ LIMIT 1; #start 4 end 476 time 2017-02-17 15:36:40
DELETE FROM `test`.`test` WHERE `id`=11 AND `name`=‘b‘ LIMIT 1; #start 4 end 376 time 2017-02-17 15:36:31
DELETE FROM `test`.`test` WHERE `id`=10 AND `name`=‘a‘ LIMIT 1; #start 4 end 284 time 2017-02-17 15:36:27

总结

1. 看了下源代码,它本身的核心代码比较少,主要是在pymysqlreplication的基础上进行了二次开发。

pymysqlreplication实现了MySQL复制协议,可捕捉不同类型的EVENT事件。

具体可参考:https://github.com/noplay/python-mysql-replication

2. 个人感觉,直接解析文本格式的binlog,也未尝不是一个好办法。

理由如下:

1> binlog2sql强烈依赖于MySQL复制协议,如果复制协议发生改变,则该工具将不可用。

虽然,复制协议发生改变的可能性很小(一般都会保持向前兼容),但相对而言,自带的mysqlbinlog肯定更懂binlog,基于mysqlbinlog解析后的结果进行处理,可完

全屏蔽复制协议等底层细节。

2> 用python来解析文本格式的binlog,本身也不是件难事。

譬如,update语句在binlog中的对应的文本

在得到表结构的情况下,基本上可离线解析。

### UPDATE `test`.`test`
### WHERE
###   @1=13 /* INT meta=0 nullable=0 is_null=0 */
###   @2=‘c‘ /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
###   @1=13 /* INT meta=0 nullable=0 is_null=0 */
###   @2=‘d‘ /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
时间: 2024-10-12 09:01:41

binlog2sql使用总结的相关文章

原创工具binlog2sql:从MySQL binlog得到你要的SQL

binlog2sql是我开发的mysql binlog解析工具,它能帮助你从binlog得到你要的SQL.根据不同设置,你可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等. 用途 数据回滚 主从切换后数据不一致的修复 从binlog生成标准SQL,带来的衍生功能 安装 $ git clone https://github.com/danfengcao/binlog2sql.git $ pip install -r requirements.txt 使用 MySQL server必

binlog2sql之MySQL数据闪回

DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据.此法费时费力,甚至需要停机维护,并不适合快速回滚.也有团队利用LVM快照来缩短恢复时间,但快照的缺点是会影响mysql的性能.现在有不少好用而且效率又高的开源闪回工具如binlog2sql.mysqlbinlog_flashback,这些工具在工作中给DBA减轻了不少痛苦,以下针对binlog2sql的使用进行实践演练. bin

binlog2sql 实战心得

原创:binlog2sql在GitHub的地址:https://github.com/danfengcao/binlog2sql 作者:danfengcao 功能:从MySQL binlog解析出你要的SQL.根据不同选项,你可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等. 用途: 数据快速回滚(闪回) 主从切换后数据不一致的修复 从binlog生成标准SQL,带来的衍生功能. 安装: 安装git:yum install git 安装pip: wget "https://pyp

Mysql数据闪回的奇技淫巧(binlog2sql)

一.概述 binlog2sql是一个开源项目,应用于大众点评线上环境.类似于ORACLE中的闪回功能,binlog2sql可以基于时间点或者位置偏移量进行数据恢复.从MySQL binlog解析出你要的SQL.根据不同选项,你可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等.也就是对于insert操作会生成对应的delete语句,反之delete操作会生出对应的insert语句,update操作会生成相反的语句. 关于binlog2sql的闪回详细介绍可参考闪回原理与实战.我也是

MySQL回滚工具binlog2sql使用介绍

参数介绍:参考官网地址:https://github.com/danfengcao/binlog2sql 直接从官网下载软件包,照着github上给的方法,虽然可以安装成功,但是执行如下命了报错,由于此工具源代码是是别人所写,目前暂时没找到是代码的哪个地方导致的语法错误.有知道的网友朋友可以友情提醒下,谢谢. [[email protected] binlog2sql]# python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dzi

mysql闪回工具binlog2sql 安装使用

软件包下载地址:链接:https://pan.baidu.com/s/15dDeGufVWOgVrfATGWBzaA 密码:gnz8 DBA或开发人员,有时会误删或者误更新数据,如果是线上环境会影响较大,这就需要能快速回滚;而MySQL闪回(flashback)利用binlog能直接进行回滚,并且能快速恢复数据(MySQL闪回现在只支持DML语句进行闪回). 利用binlog闪回需要的条件: Mysql参数设置: log_bin = /目录/mysql-bin.log(开启) binlog_fo

binlog2sql快速闪回

一.说明: DML(data manipulation language):       它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言DDL(data definition language):       DDL比DML要多,主要的命令有CREATE.ALTER.DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用DCL(Data Con

binlog2sql闪回恢复数据

用途: 1.数据快速回滚 2.从binlog生成标准sql 使用限制: 1.必须设置binlog_format=ROW 2.binlog_row_image=full,该参数默认为FULL 3.恢复用户拥有的最小权限集合为:select, super/replication client, replication slave 建议授权 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 权限说明 select:需要读取ser

Mysql闪回工具之binlog2sql的原理及其使用

生产上误删数据.误改数据的现象也是时常发生的现象,作为运维这时候就需要出来补锅了,最开始的做法是恢复备份,然后从中找到需要的数据再进行修复,但是这个时间太长了,对于大表少数数据的修复来讲,动作太大,成本也大. 当然还有其他的一些操作方法,我们今天有主角. MySQL 闪回工具 --   binlog2sql 用途 数据回滚 主从切换后数据不一致的修复 从 binlog 生成标准 SQL,带来的衍生功能 闪回原理简析 开始之前,先说说闪回.我们都知道 MySQL binlog 以 event 为单