MySql-Binlog 协议详解 - 流程篇

本贴最后更新于 2829 天前,其中的信息可能已经时异事殊

MySql-Binlog 在 MySql 主从不同方面发挥着不可或缺的作用,同时我们也能通过 Binlog 实时监控数据的变化。本系列就讲述了怎样接收并解析 Binlog。本篇就主要对接收 binlog 的流程做了一下探讨。

Binlog 发送接收流程

流程如下图所示:
(1)第一步和上篇 blog 一样,通过 HandShake 协议进行 Client 和 DB 的握手认证 (2)握手成功以后,Client 对 DB 发送 show master status 命令,此命令中回带回当前最新 binlog 存储在哪个文件,以及对应哪个偏移量。如果想从当前开始接收 binglog,则在后面发送 binlog dump 命令的时候用这两个值就好。
(3)发送 show global variables like 'binlog_checksum'命令,这是由于 binlog event 发送回来的时候需要,在最后获取 event 内容的时候,会增加 4 个额外字节做校验用。mysql5.6.5 以后的版本中 binlog_checksum=crc32,而低版本都是 binlog_checksum=none。如果不想校验,可以使用 set 命令设置 set binlog_checksum=none
(4)最后终于到了发送 Dump 命令的阶段

MySql-Binlog-Dump 命令

Dump 命令包图如下所示:
如上图所示,在报文中塞入 binlogPosition 和 binlogFileName 即可让 master 从相应的位置发送 binlog event

MySql-Binlog-Event

一但发送了 BinlogDump 命令,master 就会在数据库有变化的源源不断的推送 binlog event 到 client。值得注意的是 binlog 的类型有三种:
(1)Statement:每一条会修改数据的 sql 都会记录在 binlog 中。
(2)Row:不记录 sql 语句上下文相关信息,仅保存哪条记录被修改。
(3)Mixedlevel:以上两种 Level 的混合。
在下一篇博客中,笔者会详细讲述 binlog-event 的格式。

github 地址

https://github.com/alchemystar/Aroundight

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    690 引用 • 535 回帖
  • binlog
    4 引用 • 1 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...