技术分享丨 关于MySQL binlog解析那些事

mysql_binlog格式分析,快速了解binlog日志格式 mysql binlog 日志解析及分析流程在mysql中,binlog记录了所有记录操作(insert,update,delete)当然也包括表变更等操作本篇文章将详细讲解binlog格式以及常见的问题,为广大道友快速入门!以下流程执行环境为:mysql8。 阅读详情

为一名数据库DBA,查看解析 binlog 是日常工作的一部分。

但如果 binlog 文件很多呢?如何高效解析 binlog,能否同时解析多个binlog?这个问题至关重要。

本文就针对能否同时解析多个binlog、innodb_buffer_pool_instances设置多少合适这两个问题进行探讨。

可以同时解析多个binlog吗?

首先,答案是肯定的。

其次,当我们采用这种方式解析binlog时 $ mysqlbinlog -vvv --base64-output=decode-rows --start-position=4 --stop-position=2000 binlog.000001 binlog.000002 时,它的工作方式是这样的:

  • 指定binlog停止位置的参数,只对最后一个binlog 文件生效(指定开始位置则针对第一个文件生效);

  • 前面的binlog文件则是全量解析;

  • 如果没有匹配的 stop-position,则向上取值最接近的position;

  • 如果同时多次指定 start-position 或 stop-position,则以最后一次指定的为准;

  • 如果指定的 stop-position 超出binlog的最大范围,则会发出WARN;

  • 如果 stop-position 指向的最后一个event是 table_map,也会发出WARN。

我们分别举几个例子看下:

a.解析多个文件,但每次指定顺序不同



$ mysqlbinlog -vvv --base64-output=decode-rows --start-position=4 --stop-position=1500 mgr01.001205 mgr01.001206 mgr01.001207 > /tmp/b1
$ mysqlbinlog -vvv --base64-output=decode-rows --start-position=4 --stop-position=1500 mgr01.001206 mgr01.001205 mgr01.001207 > /tmp/b2
$ mysqlbinlog -vvv --base64-output=decode-rows --start-position=4 --stop-position=1500 mgr01.001207 mgr01.001206 mgr01.001205 > /tmp/b3

$ ls -la /tmp/b*
-rw-r--r-- 1 root root 5027246 Oct 30 19:36 /tmp/b1
-rw-r--r-- 1 root root 5027246 Oct 30 19:21 /tmp/b2
-rw-r--r-- 1 root root 3126107 Oct 30 19:22 /tmp/b3

# 虽然 /tmp/b1、/tmp/b2文件大小看起来一样,但其MD5SUM是不同的
$ md5sum /tmp/b*
ac8e223d417310e02366d5cbfcb4a882  /tmp/b1
6a09fddd30ab210f3370613aff85571c  /tmp/b2
9e2e70e1cee5fb10860c66c2ef770c0a  /tmp/b3

b.指定stop-position,但实际会向上取值

$ mysqlbinlog -vvv --base64-output=decode-rows --start-position=4 --stop-position=1500 mgr01.001205 mgr01.001206 mgr01.001207 > /tmp/b1

# 查看文本格式的binlog,发现end_log_pos最大值超过了1500
$ grep end_log_pos /tmp/b1 | tail
...
#221030 19:17:12 server id 3306  end_log_pos 1208 CRC32 0x8e5ca346      Table_map: `sbtest`.`sbtest5` mapped to number 926
#221030 19:17:12 server id 3306  end_log_pos 1624 CRC32 0x0059617f      Update_rows: table id 926 flags: STMT_END_F

c.指定stop-position对应的是table_map event,会发出WARN

$ mysqlbinlog -vvv --base64-output=decode-rows --start-position=4 --stop-position=1208 mgr01.001205

WARNING: The range of printed events ends with a row event or a table map event that does not have the STMT_END_F flag set. This might be because the last statement was not fully written to the log, or because you are using a --stop-position or --stop-datetime that refers to an event in the middle of a statement. The event(s) from the partial statement have not been written to output.
#221030 19:17:12 server id 3306  end_log_pos 1141 CRC32 0x5226ecd8      Rows_query
# UPDATE sbtest7 SET c='85585077000-51806678786-29036174562-00737528630-90333366602-59672213053-90973506235-01305133574-41639459483-63273277428' WHERE id=83642
# at 1141
#221030 19:17:12 server id 3306  end_log_pos 1208 CRC32 0x96186542      Table_map: `sbtest`.`sbtest7` mapped to number 928
ROLLBACK /* added by mysqlbinlog */ /*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

更多的规则自己摸索吧 :)

innodb_buffer_pool_instances 设置多少合

将innodb buffer pool拆分成多个instance,每个instance有独立的free lists、flush lists、LRU list,也有独立的mutex,有助于提升InnoDB并发性能。

当 innodb_buffer_pool_size 小于1GB时,innodb_buffer_pool_instances 默认值为1。反之,则默认值为8。

instance的设置尽量符合几个原则:

  • 首先,innodb_buffer_pool_size 大于1GB时,设置多个instance才有意义;

  • 拆分后,每个instance也尽量大于1GB;

  • 拆分后,每个instance必须是128MB(innodb_buffer_pool_chunk_size定义的值)的整数倍。

 

 

技术分享 | binlog 实用解析工具 my2sql 作者:赵黎明 爱可生 MySQL DBA 团队成员,Oracle 10g OCM,MySQL 5.7 OCP,擅长数据库性能问题诊断、务与锁问题的分析等,负责处理客户 MySQL 及我司自研 DMP 平台日常运维中的问题,对开源数据库相关技术非常感兴趣。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 前言 大部分 DBA 应该都已经熟悉并使用过一些闪回工具,诸如:binlog2sql、MyFlash。 今天要介绍的是另一款基于 Go 编写的 bin. 阅读详情

相关推荐

故障分析 | MySQL 数据”丢失”件之 binlog 解析应用一则

这个只需在从库查询下这条记录是否存在即可初步排除,客户生产环境是一主多从的架构,从库均没有这条记录存在, 可能性被排除 有没有可能这张表除了DML行为,还有DDL行为,如重建了,但重建后这批数据没有被重新插入该表,于是尝试解析binlog看对该表的DDL操作行为是否存在 BINLOG_LIST='mysql-bin.000002 mysql-b.

ActionTech的博客 1178

mysql binlog详解

一、初步了解binlog   1、MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是务安全型的。     a、DDL       ----Data Definition Language 数据库定义语言       主要的命令有create、alter、drop等,ddl主要是用在定义或改变表(table)的结构,数据类型,表之间的连接和约束等初.

_好人的博客 5万+

mysqlbinlog工具详解

详细讲解了mysqlbinlog数据库库回复的详细过程,减少了参数的冗余性造成的命令看不懂得现象

mysqlbinlog 解析二进制日志

mysqlbinlog 解析二进制日志。binlog中记录按照务提交时间顺序排序输出,先提交的务先输出。

kiwixing的博客 737

mysql binlog elk_【MySQL运维】binlog日志的管理与数据恢复

在部署主从的时候已经知道MySQLbinlog文件记录了数据的每次变动,详细到了哪个主机在哪个时间点执行了哪些语句,有了这些语句就可以对数据进行还原。由于binlog是二进制文件,所以无法使用VI等编辑器直接打开,如果需要查看日志内容通常使用mysqlbinlog工具或者MySQL客户端的show binlog events命令。一、mysqlbinlog命令使用教程1、mysqlbinlog命...

weixin_35988836的博客 303

mysql binlog 指定表_技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlog是...

weixin_39788256的博客 3223

mysql binlog 分析_技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlog是...

weixin_36338808的博客 983

mysql binlog select_技术分享 | MySQL binlog 日志解析

一 、binlog 简介binlogMySQL Server 层记录的二进制日志文件,用于记录 MySQL 的数据更新或者潜在更新(比如 DELETE 语句执行删除而实际并没有符合条件的数据),select 或 show等不会修改数据的操作则不会记录在 binlog 中。通常在binlog_format = ROW的环境下,我们可以通过 binlog 获取历史的 SQL 执行记录,前提...

weixin_39645019的博客 1340

oracle 解析bin log,关于binlog:技术分享-MySQL-binlog-日志解析

作者:xuty本文起源:原创投稿*爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。很多时候,当咱们的业务数据产生了不失常的变动,但却无奈得悉这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费劲。那么就须要通过剖析数据库日志来失去历史执行 SQL,依据 SQL 执行逻辑来确认代码地位,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlog是...

weixin_35224206的博客 3843

技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里...

杨建荣的学习笔记 841

技术分享 | MySQL binlog 分析工具 analysis_binlog 的使用介绍

作者:莫善 某互联网公司资深 DBA。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 目 录 一、概述 二、环境信息 三、环境准备 1、centos1 2、centos2 3、centos3 四、测试 1、准备数据 2、flush binlog 3、MySQL 压测 4、解析 binlog 五、总结 一、概述 作为一个 MySQL DBA,查看分析 binlog 是日常工作的一部分。 不知道你是否遇到过这样的需求:一个时间段,各个表的 dml 统计.

ActionTech的博客 2199

mysql binlog协议详解_技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlog 是...

weixin_39923110的博客 179

mysql binlog grep_技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。----很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binl...

weixin_30497687的博客 269

mysqlbinlog工具_技术分享 | MySQL binlog 日志解析

作者:xuty很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlogMySQL Server 层记录的二进制日志文件,用于记录 MySQL 的数据更新或者潜在更新...

weixin_39550410的博客 306

mysql binlog server_技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlog是 ...

weixin_35284593的博客 267

mysql binlog 协议_技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlog是...

weixin_29198045的博客 134

log解析工具 px4_技术分享 | MySQL binlog 日志解析

作者:xuty本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。很多时候,当我们的业务数据产生了不正常的变化,但却无法得知这类操作是在哪里进行,并且如何进行,单单从程序当面排查很费力。那么就需要通过分析数据库日志来得到历史执行 SQL,根据 SQL 执行逻辑来确认代码位置,进而确认是否是 BUG,亦或是误操作等。一 、binlog 简介binlog 是...

weixin_35992880的博客 232
上一篇: 联合评测 | GreatSQL开源数据库在DapuStor Roealsen5 NVMe SSD中的应用探索
下一篇: 包拯断案 | create connections failed的深度剖析@还故障一个真相
万里数据库
博客等级 码龄5年 169粉丝 66原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值