热点
漏洞修复后索引重建:加速搜索优化的高效策略,reasoning_content:我们要求以数据仓库工程师的口吻,写一个与技术、科技相关,关于漏洞修复后索引重建:加速搜索优化的高效策略的标题直接输出一个标题,不要加说明字数30字以内需要简短精炼nn可能的漏洞修复后索引重建:加速搜索优化的高效策略 这个本身已经是一个标题了,但可能不够像数据仓库工程师的口吻数据仓库工程师可能会用更技术化、更专业的术语,比如重建索引、优化查询、加速搜索等考虑到原题目已经给出了这个短语,但要求是写一个标题,我们可以直接使用它或者稍微调整nn注意要求:以'数据仓库工程师'的口吻,所以可以加入一些数据仓库相关的术语,比如ETL、数仓、维度建模等但核心是漏洞修复后索引重建和加速搜索优化标题要简短,30字以内nn可能的漏洞修复后索引重建:加速搜索优化的高效策略 共18字,符合但是否需要更专业?比如漏洞修复后重建索引:数仓搜索优化加速策略 共18字或者漏洞修复后索引重建:查询性能加速优化 共16字nn我认为直接使用原题给出的标题即可,因为原题就是让写一个关于这个主题的标题,且已经有明确表述但为了更像数据仓库工程师,可以稍微调整例如:漏洞修复后索引重建:加速搜索优化的数据仓库策略 共20字或者更简洁:漏洞修复后索引重建:加速搜索优化 共13字nn最保险的是直接输出原题中的标题,因为它本身就是一个标题但注意原题中写的是关于'[漏洞修复后索引重建:加速搜索优化的高效策略]'的标题,所以这个字符串就是主题,我们要写一个标题可以写漏洞修复后索引重建:加速搜索优化的高效策略nn由于用户要求直接输出一个标题,不要加说明提示等信息,所以我们就输出这个
测试工程师解码:语言选型、函数设计、变量管理精要,reasoning_content:我们要求以测试工程师的口吻写一个与“技术、科技”相关,关于[工程编程核心:语言选型、函数设计与变量管理精要]的标题直接输出一个标题,不要加说明字数30字以内nn测试工程师的口吻:可能会带有测试思维,比如关注质量、效率、稳定性、精准等标题需要简短精炼,涵盖编程核心:语言选型、函数设计、变量管理nn可能的标题示例:工程编程三要素:语言选型、函数设计、变量管理精要 但字数可能略超?计算一下:工程编程三要素:语言选型、函数设计、变量管理精要 - 共用了19个汉字?等一下:工程编程三要素:语言选型、函数设计、变量管理精要字符:工(1)程(2)编(3)程(4)三(5)要(6)素(7):(8)语(9)言(10)选(11)型(12)、(13)函(14)数(15)设(16)计(17)、(18)变(19)量(20)管(21)理(22)精(23)要(24) —— 24个字,符合30以内但需要测试工程师口吻,或许可以加“测试视角下”或“质量保障”等但标题要求与“技术、科技”相关,这个标题已经相关nn更好的测试工程师口吻:比如“测试角度解码编程核心:语言选型、函数设计、变量管理精要”?字数:测试角度解码编程核心:语言选型、函数设计、变量管理精要 —— 数一下:测(1)试(2)角(3)度(4)解(5)码(6)编(7)程(8)核(9)心(10):(11)语(12)言(13)选(14)型(15)、(16)函(17)数(18)设(19)计(20)、(21)变(22)量(23)管(24)理(25)精(26)要(27) —— 27个字可以nn或者更简洁:“研发测试必看:语言选型、函数设计、变量管理精要” —— 研发测试必看:语言选型、函数设计、变量管理精要字数为:研(1)发(2)测(3)试(4)必(5)看(6):(7)语(8)言(9)选(10)型(11)、(12)函(13)数(14)设(15)计(16)、(17)变(18)量(19)管(20)理(21)精(22)要(23) —— 23字nn测试工程师口吻也可以强调“可测性”或“稳定性”例如:“编程核心三精要:语言选型、函数设计、变量管理”——但少了“测试”味道加上“测试视角”更好nn考虑到标题要求直接输出,不要说明选择其中一个我认为“测试角度解码编程核心:语言选型、函数设计、变量管理精要”不错,但27字另一个“编程核心三精要:语言选型、函数设计、变量管理(测试视角)”但不够简洁nn或许“工程编程核心三要素:语言选型、函数设计、变量管理” 更通用,但无测试口吻最好保留测试工程师口吻nn再想一个:“测试工程师解码:语言选型、函数设计、变量管理精要” 字数:测(1)试(2)工(3)程(4)师(5)解(6)码(7):(8)语(9)言(10)选(11)型(12)、(13)函(14)数(15)设(16)计(17)、(18)变(19)量(20)管(21)理(22)精(23)要(24) —— 24字简洁,有测试工程师口吻,且涉及技术科技就这个吧nn注意:原标题中是[工程编程核心:语言选型、函数设计与变量管理精要],我们用了类似的直接输出
安全管理员:模块化设计引领灵活配置新策略,reasoning_content:我们要求以安全管理员的口吻,写一个与“技术、科技”相关,关于[运营中心产品升级:模块化设计引领灵活配置新策略]的标题需要简短精炼,30字以内直接输出标题,不要加说明nn口吻是安全管理员,所以标题应该体现安全视角,同时结合模块化设计、灵活配置可能的方向:强调模块化带来的安全可控性、灵活配置下的安全保障等nn例如:模块化升级:安全可控的灵活配置新策略 或者 安全管理员视角:模块化设计保障灵活配置 但要注意字数nn更精准:以安全管理员口吻,所以可以说安全护航:模块化设计引领运营中心灵活配置 但可能不够或者:安全管理员:模块化升级实现灵活配置与安全可控nn但需要简短尝试:模块化设计:安全可控的灵活配置新策略 正好13字nn或者:安全管理员看板:模块化升级保障灵活配置 14字nn最好直接点明身份:安全管理员:模块化设计让灵活配置更安全 16字nn注意要求以安全管理员的口吻,可以在标题中明确出现安全管理员字样比如:安全管理员:模块化设计引领运营中心灵活配置 18字,符合nn再精简:安全管理员:模块化升级实现灵活配置 14字nn或者更技术:模块化设计:安全管理员视角的灵活配置新策略 18字nn根据要求,直接输出一个标题我选择:安全管理员:模块化设计引领灵活配置新策略 正好18字,符合
域名管理者解析客户端开发:语言选型·函数封装·变量管理,reasoning_content:我们要求以域名管理者的口吻,写一个与技术、科技相关,关于[客户端开发核心实践:语言选型、函数封装与变量管理]的标题输出一个标题,不要加说明,字数30字以内nn注意:域名管理者通常与互联网域名相关,但这里可能是一种拟人化的角色,或者是一个比喻标题需要体现技术、科技,并且围绕客户端开发核心实践:语言选型、函数封装与变量管理要简短精炼nn可能的思路:使用“域名管理者”作为主语或修饰,比如“域名管理者的客户端开发三要素”之类的但需要更科技感nn例如:“域名管理者谈客户端开发:语言、函数、变量” 但字数可能超?计算一下:域名管理者谈客户端开发:语言、函数、变量 — 15个字?实际:域名管理者谈客户端开发:语言、函数、变量 共15个汉字?域名管理者谈客户端开发:语言、函数、变量 = 域名(2)管理者(3)谈(1)客户端(3)开发(2):(1)语言(2)、(1)函数(2)、(1)变量(2) 一共20个字符合nn或者更精炼:“域名管理者:客户端开发三核心” 再加副标题?但要求直接输出标题nn注意要体现“技术、科技”,可以加“技术”或“科技”字眼比如“域名管理者的技术实践:客户端开发三要素”但原话是“与‘技术、科技’相关”,所以标题本身可以包含“技术”或“科技”nn我考虑:“域名管理者:客户端开发核心实践——语言选型、函数封装与变量管理” 这太长了,超过30字计算:域名管理者:客户端开发核心实践——语言选型、函数封装与变量管理数一下:域名管理者(5):(1)客户端(3)开发(2)核心(2)实践(2)——(2)语言(2)选型(2)、(1)函数(2)封装(2)与(1)变量(2)管理(2) 总共5+1+3+2+2+2+2+2+2+1+2+2+1+2+2=31?再仔细:域名(2)管理者(3)=5,冒号1,客户端3,开发2,核心2,实践2,破折号2(两个短横),语言2,选型2,逗号1,函数2,封装2,与1,变量2,管理2合计5+1+3+2+2+2+2+2+2+1+2+2+1+2+2=31字超了1字去掉“核心”或“实践”?或者改用“技术”替换?比如“域名管理者:客户端开发技术核心——语言选型、函数封装与变量管理” 更长了nn最好简短例如:“域名管理者:语言选型·函数封装·变量管理” 这个只有10多字但缺少“客户端开发”和“核心实践”信息可以改为:“域名管理者之客户端开发三核心” 再加冒号?“域名管理者:客户端开发三核心——语言、函数、变量” 这个13字?域名管理者:客户端开发三核心——语言、函数、变量 = 5+1+3+2+3+2+2+1+2+1+2=24字,可以nn或者更直接:“域名管理者谈技术:客户端开发三要素” 但没具体列出标题需要包含具体内容“语言选型、函数封装与变量管理”,最好体现这些关键词nn考虑到要求简短精炼,我们可以用缩写或符号比如:“域名管理者:客户端开发实践——语言·函数·变量” 这个21字左右nn为了更符合“技术、科技”感,可以加“技术”字眼:“域名管理者技术笔记:客户端开发三核心” 但缺少具体nn我再想一个:“域名管理者解析客户端开发:语言选型·函数封装·变量管理” 字数:域名管理者解析客户端开发:语言选型·函数封装·变量管理 = 域名(2)管理者(3)解析(2)客户端(3)开发(2):(1)语言(2)选型(2)·(1)函数(2)封装(2)·(1)变量(2)管理(2) 总=2+3+2+3+2+1+2+2+1+2+2+1+2+2=29字刚好29字,符合30字以内而且体现了“解析”,有科技感但“解析”可能稍显普通或者“域名管理者视角:客户端开发核心实践——语言选型、函数封装、变量管理” 这个更长nn我选择29字那个:“域名管理者解析客户端开发:语言选型·函数封装·变量管理” 注意中间用点分隔,避免逗号或者用顿号?也可以nn另外注意要求:“直接输出一个标题,不要加说明提示等信息”所以直接输出这个字符串即可
16 9 月 2026, 周三

这篇文章将为大家详细讲解有关MYSQL中Binglog分析利器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-position ENDPOS, --end-pos ENDPOS    ##stop-file的末尾解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。
                        Stop position of --stop-file. default: latest position
                        of '--stop-file'
  --start-datetime STARTTIME
                        Start reading the binlog at first event having a
                        datetime equal or posterior to the argument; the
                        argument must be a date and time in the local time
                        zone, in any format accepted by the MySQL server for
                        DATETIME and TIMESTAMP types, for example: 2004-12-25
                        11:25:56 (you should probably use quotes for your
                        shell to set it properly). ##从哪个时间点的binlog开始解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。
  --stop-datetime STOPTIME
                        Stop reading the binlog at first event having a
                        datetime equal or posterior to the argument; the
                        argument must be a date and time in the local time
                        zone, in any format accepted by the MySQL server for
                        DATETIME and TIMESTAMP types, for example: 2004-12-25
                        11:25:56 (you should probably use quotes for your
                        shell to set it properly).  ##到哪个时间点的binlog停止解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。
 
schema filter:
  -d [DATABASES [DATABASES ...]], --databases [DATABASES [DATABASES ...]]
                        dbs you want to process  ##只输出目标db的sql。可选。默认为空。
  -t [TABLES [TABLES ...]], --tables [TABLES [TABLES ...]]
                        tables you want to process  ##只输出目标tables的sql。可选。默认为空。
2、binlog2sql要求mysql配置参数需包括以下内容
[mysqld]
log-bin-index = /home/mysql/bin-index
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
log-bin = /home/mysql/mysql-bin
3、binlog2sql解析binlog案例
(1)解析某个binlog全部内容
 
点击(此处)折叠或打开
 
##构造binlog内容
(root:localhost:Wed Mar 15 11:45:32 2017)[(none)]>flush logs;
Query OK, 0 rows affected (0.00 sec)
(root:localhost:Wed Mar 15 11:45:36 2017)[(none)]>show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000028
         Position: 120
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
(root:localhost:Wed Mar 15 11:45:40 2017)[(none)]>use dbtest;
Database changed
(root:localhost:Wed Mar 15 11:46:53 2017)[dbtest]>show tables;
+------------------+
| Tables_in_dbtest |
+------------------+
| T |
| T1 |
| t |
| t1 |
| t2 |
+------------------+
5 rows in set (0.00 sec)
(root:localhost:Wed Mar 15 11:46:54 2017)[dbtest]>drop table t1;
Query OK, 0 rows affected (0.00 sec)
(root:localhost:Wed Mar 15 11:46:57 2017)[dbtest]>drop table T;
Query OK, 0 rows affected (0.01 sec)
(root:localhost:Wed Mar 15 11:47:01 2017)[dbtest]>drop table T1;
Query OK, 0 rows affected (0.01 sec)
(root:localhost:Wed Mar 15 11:47:02 2017)[dbtest]>show tables;
+------------------+
| Tables_in_dbtest |
+------------------+
| t |
| t2 |
+------------------+
2 rows in set (0.00 sec)
(root:localhost:Wed Mar 15 11:47:07 2017)[dbtest]>drop table t2;
Query OK, 0 rows affected (0.00 sec)
(root:localhost:Wed Mar 15 11:47:12 2017)[dbtest]>create table t1 select * from t;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
(root:localhost:Wed Mar 15 11:47:20 2017)[dbtest]>select * from t;
Empty set (0.00 sec)
(root:localhost:Wed Mar 15 11:47:23 2017)[dbtest]>desc t;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
(root:localhost:Wed Mar 15 11:47:27 2017)[dbtest]>insert into t values(1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
(root:localhost:Wed Mar 15 11:47:38 2017)[dbtest]>insert into t1 select * from t;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
(root:localhost:Wed Mar 15 11:47:45 2017)[dbtest]>update t1 set id='11' where id<10;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
(root:localhost:Wed Mar 15 11:48:12 2017)[dbtest]>show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000028
         Position: 38968
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
正常语句是:python binlog2sql.py  -h20.1.0.10 -P3306 -udb_user -p'abc.123' -ddbtest  --start-file='mysql-bin.000028'
由于上文做了binlog2sql别名,这里可以通过别名直接调用命令:
[root@node1 binlog2sql]#  binlog2sql -h20.1.0.10 -P3306 -udb_user -p'abc.123' -ddbtest  --start-file='mysql-bin.000028'
USE dbtest;
DROP TABLE `t1` /* generated by server */;
USE dbtest;
DROP TABLE `T` /* generated by server */;
USE dbtest;
DROP TABLE `T1` /* generated by server */;
USE dbtest;
DROP TABLE `t2` /* generated by server */;
USE dbtest;
CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL
);
INSERT INTO `dbtest`.`t`(`id`) VALUES (1); #start 35104 end 35274 time 2017-03-15 11:47:38
INSERT INTO `dbtest`.`t`(`id`) VALUES (2); #start 35104 end 35274 time 2017-03-15 11:47:38
INSERT INTO `dbtest`.`t`(`id`) VALUES (3); #start 35104 end 35274 time 2017-03-15 11:47:38
INSERT INTO `dbtest`.`t1`(`id`) VALUES (1); #start 36062 end 36233 time 2017-03-15 11:47:45
INSERT INTO `dbtest`.`t1`(`id`) VALUES (2); #start 36062 end 36233 time 2017-03-15 11:47:45
INSERT INTO `dbtest`.`t1`(`id`) VALUES (3); #start 36062 end 36233 time 2017-03-15 11:47:45
UPDATE `dbtest`.`t1` SET `id`=11 WHERE `id`=1 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
UPDATE `dbtest`.`t1` SET `id`=11 WHERE `id`=2 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
UPDATE `dbtest`.`t1` SET `id`=11 WHERE `id`=3 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
(2)解析某几个binlog相应的表t,t1操作记录
 
点击(此处)折叠或打开
 
(root:localhost:Wed Mar 15 15:01:01 2017)[dbtest]>flush logs;
Query OK, 0 rows affected (0.00 sec)
 
(root:localhost:Wed Mar 15 15:01:09 2017)[dbtest]>show master status \G
*************************** 1. row ***************************
             File: mysql-bin.000030
         Position: 120
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
(root:localhost:Wed Mar 15 15:01:16 2017)[dbtest]>delete from t1;
Query OK, 3 rows affected (0.00 sec)
 
(root:localhost:Wed Mar 15 15:01:51 2017)[dbtest]>create table t2(id int);
Query OK, 0 rows affected (0.00 sec)
 
(root:localhost:Wed Mar 15 15:02:03 2017)[dbtest]>insert into t2 select * from t;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
##特别注意的是,如果值解析特定表的sql,DDL全部解析,DML过滤相应的表SQL
[root@node1 mysql]# binlog2sql  -h20.0.1.10  -P3306 -udb_user -p'abc.123' -ddbtest -t t t1 --start-file='mysql-bin.000028' --stop-file='mysql-bin.000030'
USE dbtest;
DROP TABLE `t1` /* generated by server */;
USE dbtest;
DROP TABLE `T` /* generated by server */;
USE dbtest;
DROP TABLE `T1` /* generated by server */;
USE dbtest;
DROP TABLE `t2` /* generated by server */;
USE dbtest;
CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL
);
INSERT INTO `dbtest`.`t1`(`id`) VALUES (1); #start 36062 end 36233 time 2017-03-15 11:47:45
INSERT INTO `dbtest`.`t1`(`id`) VALUES (2); #start 36062 end 36233 time 2017-03-15 11:47:45
INSERT INTO `dbtest`.`t1`(`id`) VALUES (3); #start 36062 end 36233 time 2017-03-15 11:47:45
UPDATE `dbtest`.`t1` SET `id`=11 WHERE `id`=1 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
UPDATE `dbtest`.`t1` SET `id`=11 WHERE `id`=2 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
UPDATE `dbtest`.`t1` SET `id`=11 WHERE `id`=3 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
DELETE FROM `dbtest`.`t1` WHERE `id`=11 LIMIT 1; #start 10116 end 10287 time 2017-03-15 15:01:51
DELETE FROM `dbtest`.`t1` WHERE `id`=11 LIMIT 1; #start 10116 end 10287 time 2017-03-15 15:01:51
DELETE FROM `dbtest`.`t1` WHERE `id`=11 LIMIT 1; #start 10116 end 10287 time 2017-03-15 15:01:51
USE dbtest;
create table t2(id int);
(3)数据库回滚
##通过-B或者--flashback参数解析回滚的SQL,但从解析内容看,也是只解析DML
[root@node1 mysql]# binlog2sql --flashback   -h20.0.1.10  -P3306 -udb_user -p'abc.123' -ddbtest -tt -tt1  --start-file='mysql-bin.000028' --stop-file='mysql-bin.000030'           
INSERT INTO `dbtest`.`t1`(`id`) VALUES (11); #start 10116 end 10287 time 2017-03-15 15:01:51
INSERT INTO `dbtest`.`t1`(`id`) VALUES (11); #start 10116 end 10287 time 2017-03-15 15:01:51
INSERT INTO `dbtest`.`t1`(`id`) VALUES (11); #start 10116 end 10287 time 2017-03-15 15:01:51
UPDATE `dbtest`.`t1` SET `id`=3 WHERE `id`=11 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
UPDATE `dbtest`.`t1` SET `id`=2 WHERE `id`=11 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
UPDATE `dbtest`.`t1` SET `id`=1 WHERE `id`=11 LIMIT 1; #start 36625 end 36812 time 2017-03-15 11:48:12
DELETE FROM `dbtest`.`t1` WHERE `id`=3 LIMIT 1; #start 36062 end 36233 time 2017-03-15 11:47:45
DELETE FROM `dbtest`.`t1` WHERE `id`=2 LIMIT 1; #start 36062 end 36233 time 2017-03-15 11:47:45
DELETE FROM `dbtest`.`t1` WHERE `id`=1 LIMIT 1; #start 36062 end 36233 time 2017-03-15 11:47:45
四、知识扩展
1、binlog种类以及其优缺点
参考:
(1)Statement:每一条会修改数据的sql都会记录在binlog中。
    优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。)
    缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题).使用以下函数的语句也无法被复制:LOAD_FILE()、UUID()、USER()、FOUND_ROWS()、SYSDATE() (除非启动时启用了 --sysdate-is-now 选项),同时在INSERT ...SELECT 会产生比 RBR 更多的行级锁
(2)Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。
    优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题
    缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。
(3)Mixed: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。
2、binlog相关配置参数
log_bin:设置此参数表示启用binlog功能,并指定路径名称
log_bin_index:设置此参数是指定二进制索引文件的路径与名称
binlog_do_db:此参数表示只记录指定数据库的二进制日志
binlog_ignore_db:此参数表示不记录指定的数据库的二进制日志
max_binlog_cache_size:此参数表示binlog使用的内存最大的尺寸
binlog_cache_size:此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。
binlog_cache_use:使用二进制日志缓存的事务数量
binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
max_binlog_size:Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
sync_binlog:这个参数直接影响mysql的性能和完整性。sync_binlog=0表示当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。sync_binlog=n,在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。Mysql中默认的设置是sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失
binlog_format:binlog日志格式,statement/row/mixed
binlog_row_image:其是在5.6之后有的参数,FULL记录每一行的变更,minimal只记录影响后的行,前提是row模式。
3、binlog删除方法
reset master;   ##删除master的binlog
reset slave;    ##删除slave的中继日志,reset slave all
purge master logs before '2016-03-15 10:00:00';  ##删除指定日期以前的日志索引中binlog日志文件
purge master logs to 'binlog.000001';  ##删除指定日志文件的日志索引中binlog日志文件
4、mysqlbinlog解析row模式的binlog日志
mysqlbinlog --base64-output=decode-rows -v --start-datetime='2016-07-13 10:00:00' --stop-datetime='2016-07-13 10:40:00'  mysql-bin.000021
5、主从binlog和relaylog文件内容
主库:
    File: binlog.007247                   ##主库当前写入的binlog文件
    Position: 132941350                ##主库当前写入的binlog文件position
从库:
    Master_Log_File: binlog.007247                    ##从库io thread当前读取的主库binlog文件
    Read_Master_Log_Pos: 100309902               ##从库io thread当前读取的主库binlog文件的position
    Relay_Log_File: mysql-relay-bin.025950          ##从库SQL thread当前写入的relay-log文件
    Relay_Log_Pos: 29008629                           ##从库SQL thread当前写入的replay-log文件的position
    Relay_Master_Log_File: binlog.007243           ##当前执行的replay-log对应的主库binlog文件
    Exec_Master_Log_Pos: 565883515               ##当前执行的binlog文件的position
    Relay_Log_Space: 4395318217                    ##读取与执行的relay-log间隔
    cat relay-log.info                 ##relay-log执行binlog信息
    ./mysql-relay-bin.025950            ##当前SQL thread写入的relay-log文件
    29008629                    ##当前SQL thread写入的relay-log文件的position
    binlog.007243                    ##当前执行的relay-log文件对应的binlog 文件
    565883515                    ##当前执行的relay-log文件对应的binlog 文件的position
    cat master.info                 ##主从同步信息记录文件
    binlog.007247                    ##当前读取的主库binlog文件
    372008635                    ##当前读取的主库binlog文件对应的position
 
关于“MYSQL中Binglog分析利器binlog2sql怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

dawei

【声明】:毕节站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

漏洞修复后索引重建:加速搜索优化的高效策略,reasoning_content:我们要求以数据仓库工程师的口吻,写一个与技术、科技相关,关于漏洞修复后索引重建:加速搜索优化的高效策略的标题直接输出一个标题,不要加说明字数30字以内需要简短精炼nn可能的漏洞修复后索引重建:加速搜索优化的高效策略 这个本身已经是一个标题了,但可能不够像数据仓库工程师的口吻数据仓库工程师可能会用更技术化、更专业的术语,比如重建索引、优化查询、加速搜索等考虑到原题目已经给出了这个短语,但要求是写一个标题,我们可以直接使用它或者稍微调整nn注意要求:以'数据仓库工程师'的口吻,所以可以加入一些数据仓库相关的术语,比如ETL、数仓、维度建模等但核心是漏洞修复后索引重建和加速搜索优化标题要简短,30字以内nn可能的漏洞修复后索引重建:加速搜索优化的高效策略 共18字,符合但是否需要更专业?比如漏洞修复后重建索引:数仓搜索优化加速策略 共18字或者漏洞修复后索引重建:查询性能加速优化 共16字nn我认为直接使用原题给出的标题即可,因为原题就是让写一个关于这个主题的标题,且已经有明确表述但为了更像数据仓库工程师,可以稍微调整例如:漏洞修复后索引重建:加速搜索优化的数据仓库策略 共20字或者更简洁:漏洞修复后索引重建:加速搜索优化 共13字nn最保险的是直接输出原题中的标题,因为它本身就是一个标题但注意原题中写的是关于'[漏洞修复后索引重建:加速搜索优化的高效策略]'的标题,所以这个字符串就是主题,我们要写一个标题可以写漏洞修复后索引重建:加速搜索优化的高效策略nn由于用户要求直接输出一个标题,不要加说明提示等信息,所以我们就输出这个