大部分使用mysql的业务也都会开启binlog,用以记录数据库的更新操作。当然binlog的格式大家也都比较清楚,分别是statement、mixed、row模式。针对row格式的binlog,它以二进制形式记录相应的SQL,通过编辑器打开无法知道具体的SQL是什么。当然,我们也可以通过mysqlbinlog分析,但分析结果不利于我们做数据的回滚和redo。前段时间同事分享了一个小工具binlog2sql,觉得蛮有意思,凑着今天有时间装了学习下。
一、binlog2sql简介
binlog2sql是一开源工具,其可以从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。
主要用途如下:
(1)数据快速回滚(闪回)
(2)主从切换后数据不一致的修复
(3)从binlog生成标准SQL,带来的衍生功能
二、binlog2sql安装
1、binlog2sql下载
https://github.com/danfengcao/binlog2sql
2、binlog2sql依赖包安装
python2.6+
PyMySQL==0.7.8+
wheel==0.24.0+
mysql-replication==0.9+
(1)PyMySQL-0.7.10安装
https://pypi.python.org/pypi/PyMySQL/
[root@node1 binlogsql]# tar -xzvf PyMySQL-0.7.10.tar.gz
[root@node1 binlogsql]# cd PyMySQL-0.7.10
[root@node1 PyMySQL-0.7.10]# python setup.py install
(2)wheel-0.30.0a0安装
https://pypi.python.org/pypi/wheel/
[root@node1 binlogsql]# tar -xzvf wheel-0.30.0a0.tar.gz
[root@node1 binlogsql]# cd wheel-0.30.0a0
[root@node1 wheel-0.30.0a0]# python setup.py install
(3)python-mysql-replication安装
https://github.com/noplay/python-mysql-replication
[root@node1 binlogsql]# unzip python-mysql-replication-master.zip
[root@node1 binlogsql]# cd python-mysql-replication-master
[root@node1 python-mysql-replication-master]# python setup.py install
(4)可以通过pip安装相应的依赖包
https://pypi.python.org/pypi/pip
[root@node1 tools]# tar -xzvf pip-9.0.1.tar.gz
[root@node1 tools]# cd pip-9.0.1
[root@node1 pip-9.0.1]# python setup.py install
[root@node1 binlog2sql-master]# pip install -r requirements.txt
3、binlog2sql安装
直接下载解压缩即可,运行相应的py脚本
[root@node1 tools]# unzip binlog2sql-master.zip
[root@node1 tools]# cd binlog2sql-master
设置别名,方便命令调用:
alias binlog2sql='python /tools/binlogsql/binlog2sql-master/binlog2sql/binlog2sql.py'
三、binlog2sql使用1、binlog2sql帮助手册
[root@node1 binlog2sql]# binlog2sql --help
usage: binlog2sql.py [-h HOST] [-u USER] [-p PASSWORD] [-P PORT]
[--start-file STARTFILE] [--start-position STARTPOS]
[--stop-file ENDFILE] [--stop-position ENDPOS]
[--start-datetime STARTTIME] [--stop-datetime STOPTIME]
[--stop-never] [--help] [-d [DATABASES [DATABASES ...]]]
[-t [TABLES [TABLES ...]]] [-K] [-B]
Parse MySQL binlog to SQL you want
optional arguments:
--stop-never Wait for more data from the server. default: stop
replicate at the last binlog when you start binlog2sql ##持续同步binlog。可选。不加则同步至执行命令时最新的binlog位置
--help help infomation
-K, --no-primary-key Generate insert sql without primary key if exists##对INSERT语句去除主键。可选。
-B, --flashback Flashback data to start_postition of start_file ##生成回滚语句,可解析大文件,不受内存限制,每打印一千行加一句SLEEP SELECT(1)。可选。与stop-never或no-primary-key不能同时添加。
connect setting:
-h HOST, --host HOST Host the MySQL database server located
-u USER, --user USER MySQL Username to log in as
-p PASSWORD, --password PASSWORD
MySQL Password to use
-P PORT, --port PORT MySQL port to use
range filter:
--start-file STARTFILE
Start binlog file to be parsed ##起始解析文件。必须。
--start-position STARTPOS, --start-pos STARTPOS##start-file的起始解析位置。可选。默认为start-file的起始位置。
Start position of the --start-file
--stop-file ENDFILE, --end-file ENDFILE ##末尾解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。
Stop binlog file to be parsed. default: '--start-file'
--stop-po