MySQL协议和canal实现

本文深入探讨了MySQL主从复制原理,并详细介绍了canal如何模拟MySQL slave协议,通过源码分析了连接过程、dump前的准备、slave注册及binlog数据解析。此外,还展示了canal启动流程和binlog事件类型。
摘要由CSDN通过智能技术生成

前言

前面的文章里,我们了解到 canal 可以从 MySQL 中感知数据的变化。这是因为它模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,从而实现了主从复制。

正是了解到这一点,笔者有两个问题便一直萦绕于心:

  • 它是如何模拟 MySQL slave 交互协议的?
  • 它又是怎么解析 binlog 日志的呢?

今天,笔者准备就着这两个问题,扒拉扒拉 canal 的代码,一探究竟。

一、MySQL 主从复制

在谈 canal 之前,我们有必要再重温下 MySQL 主从复制的原理。
在这里插入图片描述
总结上图的流程如下:

  • MySQL master 将数据变更写入二进制日志 (binary log , 其中记录叫做二进制日志binarylog
    events);
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志 (relay log);
  • MySQL slave 重放 relay log 中的事件,将数据变更反映到自己的数据库。

二、canal 原理

在这里插入图片描述
上图就很形象的描述了 canal 的角色。它的原理也很简单:

  • canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议;
  • mysql master收到dump请求,开始推送binary log给slave(也就是canal);
  • canal解析binary log对象(原始为byte流);
  • canal将解析后的对象,根据业务场景,分发到比如 MySQL 、RocketMQ 或者 ES 中。

三、源码启动

看完了 MySQL 主从

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值