Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >可以同时解析多个binlog吗

可以同时解析多个binlog吗

作者头像
老叶茶馆
发布于 2022-12-02 11:30:23
发布于 2022-12-02 11:30:23
1.4K00
代码可运行
举报
运行总次数:0
代码可运行
  • 1.可以同时解析多个binlog吗
  • 2. innodb_buffer_pool_instances设置多少合适

1.可以同时解析多个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.解析多个文件,但每次指定顺序不同

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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,但实际会向上取值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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*/;

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

2. 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定义的值)的整数倍。

Enjoy MySQL :)


《深入浅出MGR》视频课程

戳此小程序即可直达B站

https://www.bilibili.com/medialist/play/1363850082?business=space_collection&business_id=343928&desc=0


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老叶茶馆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
带你解析MySQL binlog
我们都知道,binlog可以说是MySQL中比较重要的日志了,在日常学习及运维过程中,也经常会遇到。不清楚你对binlog了解多少呢?本篇文章将从binlog作用、binlog相关参数、解析binlog内容三个方面带你了解binlog。
MySQL技术
2020/07/14
2.4K0
MySQL抑制binlog日志中的BINLOG部分
    MySQL通过binlog来记录整个数据的变更过程,因此我们只要有MySQL的binlog日志即可完整的还原数据库。MySQL binlog日志记录有3种不同的方式,即:STATEMENT,MIXED,ROW。对于不同的日志模式,生成的binlog有不同的记录方式。对于MIXED(部分SQL语句)和ROW模式是以base-64方式记录,会以BINLOG开头,是一段伪SQL,我们可以用使用base64-output参数来抑制其显示。本文对此给出了描述及演示。
Leshami
2018/08/13
1.7K0
技术分享 | mysqlbinlog 技巧
爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。
爱可生开源社区
2021/12/27
1.4K0
技术分享 | mysqlbinlog 技巧
【DB宝17】使用mysqldump+mysqlbinlog恢复误删除的数据库
这里可以看到,备份开始时的pos点是mysql5729-bin.000001文件的1405,备份好的文件是lhrdb.sql文件,该文件是文本文件,可直接查看。如果后续通过binlog来恢复数据库时,则需要从mysql5729-bin.000001文件的1405号开始恢复。
AiDBA宝典
2020/08/14
9430
ROW 格式binlog 在MySQL5.6上的数据恢复实验
5.6和5.7版本的MySQL,有个参数binlog_row_p_w_picpath,默认值为FULL,表示记录的是全部的binlog操作日志(仅在binlog_format=ROW时候生效)。此外binlog_row_p_w_picpath还可以是minimal,表示binlog记录的就只是影响后的行。如此一来使用ROW格式就能节约很多的磁盘空间。
保持热爱奔赴山海
2019/09/18
1.3K0
有事务冲突时节点怎么加入MGR集群
有些时候,可能因为网络分区等异常情况导致节点意外退出MGR集群,在退出之前可能有些事务还没来得及发送到其他节点。或者可能因为误操作,在这个节点上意外写入数据。那么这个节点重加入MGR集群时,就可能会报告类似下面的错误:
GreatSQL社区
2022/05/05
8700
MySQL Binlog解析方法对比
# 会显示dml语句具体做了什么操作,例如:insert语句,会显示出insert具体插入了什么数据;
Power
2025/02/28
1310
MySQL利用binlog恢复误操作数据(Python脚本)
方法一、利用最近的全量备份+增量binlog备份,恢复到误操作之前的状态,但是随着数据量的增大,binlog的增多,恢复起来很费时。
SEian.G
2021/03/03
1.2K0
关于MySQL binlog中的内容分析
在实际的工作过程中,我们经常会解析binlog文件,解析文件的时候,通常有下面三种方法,这里我们简单介绍一下:
AsiaYe
2019/11/18
2.6K0
MySQL Binlog日志解析方法
【注】判断是否为大事务,可以通过查看2个事务之间相差多少行即可。如上:第一个事务在25行,第二个事务在143831106行。由此可判断这个事务很大,执行时间很长~
Power
2025/03/01
4150
关于mysql binlog二进制
在mysql中,当发生数据变更时,都会将变更数据的语句,通过二进制形式,存储到binlog日志文件中.
仙士可
2020/04/21
1.2K0
mysql binlog日志事件解析
二进制日志(binary log)是mysql的一种日志记录了mysql中的数据变更操作,二进制日志主要有以下作用:
wangwei-dba
2021/06/09
2.7K0
听说Mysql你很豪横?-------------呕心沥血深入解析mysql备份与恢复!!!
物理备份 : 文件备份,直接在linux系统上拷贝 逻辑备份 : 库备份,表备份–>>数据库sql脚本 (1) 完整性备份 所有的全部备份 生成所有的sql脚本 (2) 增量备份 完整性为前提 后面完整加上 增加的内容 与上一次进行比较 如果其中间的一个凉了 数据就会丢掉那一层的增量 数据就会丢失 (3) 差异备份 完整性为前提 相比较完整性备份 多出来的3 4
不吃小白菜
2020/09/03
7350
听说Mysql你很豪横?-------------呕心沥血深入解析mysql备份与恢复!!!
MySQL基于Binlog的数据恢复实战
操作系统:CentOS 7.7 MySQL版本:5.7.30,搭建主从 开启binlog,binlog_format=row 备份情况:每天00:00对数据库进行全量备份 恢复原因:某日22:00左右,执行了批量update语句,需要回滚
仙人技术
2021/09/29
2.4K0
MySQL基于Binlog的数据恢复实战
Mysql binlog解析
事实上,在ROW格式的binlog文件中, 每个ROWS_EVENT事件前都会有一个TABLE_MAP_EVENT,用于描述表的内部id和结构定义。
mingjie
2022/05/12
5.4K0
MySQL Binlog 介绍[通俗易懂]
MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。
全栈程序员站长
2022/11/01
2.4K0
【Mysql 实战】问题分析利器之 binlog
文章链接:https://mp.weixin.qq.com/s/JOhdZE6ctDI0y53G_qXR8w
程序员架构进阶
2021/03/23
6590
MySQL二进制日志截取和恢复
在打印出来的信息中可以看到event事件的开始和结束号码,它可以方便我们从日志中截取想要的日志事件
云计算小黑
2022/12/28
1.5K0
快速获取binlog文件的开始时间
大数据那边有个需求,希望能知道上游的MySQL的binlog文件的文件名和开始时间,用于偶尔出现的cdc的修数据用(PS:如果CDC时候用了GTID的模式话就不需要用到这里的方法了)。
保持热爱奔赴山海
2024/09/26
1690
使用python脚本实现mysql误操作
1.简介 在oracle数据库中,当一个误操作被提交后,我们可以通过oracle提供的闪回功能将表闪回至误操作之前的状态。mysql中没有原生的flushback功能,DBA误操作时,传统的恢复方式是利用全备+二进制日志前滚进行恢复。 今天给大家介绍一种使用python脚本在mysql中实现类似oracle中flushback table的闪回功能,相比于传统的全备+增备,本方法更为快速、简单。
py3study
2020/01/07
7570
相关推荐
带你解析MySQL binlog
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验