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语句

该工具所需权限如下:

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 

因为是伪装成slave来获取主的二进制事件,故无需对binlog有可读权限。

 

提取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 */

 

内网环境如何使用该工具呢?

该工具的使用依赖以下三个包:

PyMySQL==0.7.8
wheel==0.24.0
mysql-replication==0.9

其中,每个包又会依赖其它包,所以安装这些包是一个比较麻烦的事情。

如果是在外网的环境下,可直接通过pip install安装,它会自动下载并安装依赖包的。

 

在内网环境下,可手动安装这些包,目前,这些包已下载打包,并上传到百度云盘中,大家可自行下载。

http://pan.baidu.com/s/1qYQ2PPy

 

安装教程:

# tar xvf binlog2sql.tar.gz

# cd binlog2sql/binlog2sql_dependencies/


# tar xvf setuptools-0.6c11.tar.gz

# cd setuptools-0.6c11

# python setup.py install

# cd ..

# tar xvf pip-9.0.1.tar.gz

# cd pip-9.0.1

# python setup.py install

# cd ..

# pip install *.whl mysql-replication-0.9.tar.gz

DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop
 support for Python 2.6Processing ./mysql-replication-0.9.tar.gz
Processing ./argparse-1.4.0-py2.py3-none-any.whl
Processing ./linecache2-1.0.0-py2.py3-none-any.whl
Requirement already satisfied: PyMySQL==0.7.8 from file:///root/binlog2sql/binlog2sql_dependencies/PyMySQL-0.7.8-py2-none-any.whl in 
/usr/lib/python2.6/site-packagesProcessing ./six-1.10.0-py2.py3-none-any.whl
Processing ./traceback2-1.4.0-py2.py3-none-any.whl
Processing ./unittest2-1.1.0-py2.py3-none-any.whl
Processing ./wheel-0.24.0-py2.py3-none-any.whl
Installing collected packages: argparse, linecache2, six, traceback2, unittest2, wheel, mysql-replication
  Running setup.py install for mysql-replication ... done
Successfully installed argparse-1.4.0 linecache2-1.0.0 mysql-replication-0.9 six-1.10.0 traceback2-1.4.0 unittest2-1.1.0 wheel-0.24.0

至此,所有依赖包安装完毕。

 

测试一下

# cd ..

# cd binlog2sql

# python binlog2sql.py -h 192.168.244.20 -u root -p 123456  -d test -t test --start-file mysql-bin.000022

INSERT INTO `test`.`test`(`id`, `name`) VALUES (4, 'd'); #start 4 end 284 time 2017-02-21 10:44:02
INSERT INTO `test`.`test`(`id`, `name`) VALUES (5, 'f'); #start 315 end 479 time 2017-02-21 10:44:05
DELETE FROM `test`.`test` WHERE `id`=4 AND `name`='d' LIMIT 1; #start 510 end 674 time 2017-02-21 10:44:09
UPDATE `test`.`test` SET `id`=5, `name`='t' WHERE `id`=5 AND `name`='f' LIMIT 1; #start 705 end 877 time 2017-02-21 10:44:22

 

Tips,如何有效率的下载依赖包?

pip-9.0.1新增了一个选项download,可以只下载包(自动下载相关依赖包)而不安装它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: binlog2sql是一种工具,用于将MySQLbinlog日志文件转换为可读的SQL语句,以便进行离线分析和查看。binlog是MySQL数据库中的事务日志,记录了数据库中发生的所有数据变更操作。binlog2sql可以将这些变更操作还原成SQL语句,方便用户了解数据库的历史变更情况。 离线指的是在数据库不处于活动状态下进行操作,即在数据库停止或者不可用的情况下使用binlog2sql工具进行分析。这种方式可以避免对数据库正常运行造成影响,并且可以随时进行回溯和查询。 使用binlog2sql离线可以实现一些重要的功能。首先,可以恢复误删数据。当我们误删了一些重要的数据时,通过binlog2sql工具可以还原出删除数据的SQL语句,然后再执行这些SQL语句,就能够将数据恢复回来。其次,可以查看历史变更记录。通过解析binlog日志文件,可以得到所有数据的变更操作,包括插入、更新和删除等操作的SQL语句,方便我们了解数据库的演进和变化。最后,可以进行数据库迁移和同步。通过解析源数据库binlog日志文件,可以生成对应的SQL语句,然后将这些SQL语句执行在目标数据库上,从而实现数据库的迁移和同步。 总之,binlog2sql离线是一种方便的工具,可以帮助我们对数据库进行离线分析和查看。无论是恢复误删的数据、查看历史变更记录还是进行数据库迁移和同步,binlog2sql都可以帮助我们完成这些任务。 ### 回答2: binlog2sql 离线的意思是指在没有网络连接的情况下使用 binlog2sql 工具进行操作。 binlog2sql 是一个用于将 MySQL 数据库binlog 转化为 SQL 语句的工具,可以用于实时同步 MySQL 数据库的变更或者回放数据库的历史操作。一般情况下,binlog2sql 工具是在线工作的,即在数据库正常运行时实时监听 binlog,并将其转化为 SQL 语句。 然而,当没有网络连接时,我们仍然可以使用 binlog2sql 工具。这种情况下,我们需要手动将 MySQL 数据库binlog 文件复制到离线的环境中,并使用 binlog2sql 工具对这些离线的 binlog 文件进行解析和分析。这样,我们就可以获得离线环境下的 SQL 语句,用于还原数据库的操作历史。 离线使用 binlog2sql 的一个常见应用场景是进行数据库备份和恢复。我们可以将线上数据库binlog 文件复制到离线环境,使用 binlog2sql 工具解析生成对应的 SQL 语句,并创建一个新的数据库来还原原始数据库的状态。这对于故障恢复、数据迁移以及数据库版本升级等场景都非常有用。 总结起来,binlog2sql 离线的含义是指在没有网络连接的情况下,手动复制和解析 MySQL 数据库binlog 文件,使用 binlog2sql 工具生成 SQL 语句,从而进行数据库的备份、还原和迁移等操作。 ### 回答3: binlog2sql是一个用于将MySQL二进制日志(binlog)转换SQL语句的工具。它可以在离线环境中使用,意味着可以在没有网络连接的情况下进行转换操作。 通过binlog2sql,我们可以将MySQL的二进制日志文件转换成可以被理解和查询的SQL语句文件。这对于分析数据库操作记录、恢复数据等任务非常有用。通常情况下,binlog文件是MySQL服务器在执行每个事务时记录的二进制日志文件,它包含了对数据库的所有更改操作。而binlog2sql可以将这些操作转化为SQL语句,以便我们进行进一步的分析和处理。 在离线环境中使用binlog2sql有几个好处。首先,离线环境意味着我们不需要与网络连接,可以在没有外部干扰的情况下进行转换工作。这可以提高转换的速度和准确性。其次,离线环境还可以提供更高的安全性,因为我们不需要将敏感的数据库信息传输到网络上。最后,离线环境也可以方便我们在本地进行数据恢复和分析工作。 总之,binlog2sql是一个功能强大的工具,它可以在离线环境中使用,将MySQL的二进制日志转换SQL语句,方便我们进行数据分析和恢复工作。它的离线特性使得我们可以在没有网络连接的环境下进行转换操作,提高了效率和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值