Canal实现数据同步的工作原理

Canal实现数据同步的工作原理

1. Canal的核心原理和整体流程

Canal 通过模拟自己是一个 MySQL slave(从库),向主库“伪装”成从库来订阅 MySQL 的 binlog,从而实时拿到所有写操作(INSERT/UPDATE/DELETE)的变更数据,再推给你的应用进行处理。

Canal 数据流动的整体链路:

1
2
3
4
5
6
7
8
9
MySQL 写入(INSERT/UPDATE/DELETE
↓(生成binlog)
Canal Server 订阅 binlog(伪装成 slave)

Canal Client(你的 aimin-drug 微服务)

你写的 CanalReceiver 对数据进行处理

同步到 ES / Redis / MQ / 其他地方

2. MySQL 产生 binlog(变更日志)

只要执行:

  • INSERT
  • UPDATE
  • DELETE

MySQL都会把变化记录到 binlog(Binary log)中。

binlog 里面存的是数据变更事件,例如:

操作 binlog中记录
Insert row 新增的数据
Update 修改前 & 修改后的值
Delete 删除前的值

3. Canal的具体工作流程

  1. Canal Server 会去连接 MySQL:
    • slave 的身份注册
    • 发送 show master status
    • 读取 binlog 的位置点(binlog filename + position)
    • 持续向 MySQL 发送 dump 请求 —— 和从库一样
  2. MySQL 不断把 binlog 推给 Canal Server
    • 当 Canal Server 模拟从库连接后,MySQL 会不断把 binlog 内容“推送”给 Canal。
  3. Canal Server 把 binlog 解析并封装成 Java 对象,执行后续逻辑

END