Canal实现数据同步的工作原理
Canal实现数据同步的工作原理
1. Canal的核心原理和整体流程
Canal 通过模拟自己是一个 MySQL slave(从库),向主库“伪装”成从库来订阅 MySQL 的 binlog,从而实时拿到所有写操作(INSERT/UPDATE/DELETE)的变更数据,再推给你的应用进行处理。
Canal 数据流动的整体链路:
1 | |

2. MySQL 产生 binlog(变更日志)
只要执行:
- INSERT
- UPDATE
- DELETE
MySQL都会把变化记录到 binlog(Binary log)中。
binlog 里面存的是数据变更事件,例如:
| 操作 | binlog中记录 |
|---|---|
| Insert | row 新增的数据 |
| Update | 修改前 & 修改后的值 |
| Delete | 删除前的值 |
3. Canal的具体工作流程
- Canal Server 会去连接 MySQL:
- 以
slave的身份注册 - 发送
show master status - 读取 binlog 的位置点(binlog filename + position)
- 持续向 MySQL 发送 dump 请求 —— 和从库一样
- 以
- MySQL 不断把 binlog 推给 Canal Server
- 当 Canal Server 模拟从库连接后,MySQL 会不断把 binlog 内容“推送”给 Canal。
- Canal Server 把 binlog 解析并封装成 Java 对象,执行后续逻辑
