坚持原创,共同进步!请关注我,后续分享更精彩!!!
介绍
canal是阿里开源的一款mysql数据同步工具。纯java开发,基于数据库增量日志解析,提供增量数据的订阅&消费,主要支持mysql。可应用以下业务场景:
- 数据库镜像
- 数据库实时备份
- 多级索引 (卖家和买家各自分库索引)
- search build
- 业务cache刷新
- 价格变化等重要业务消息
工作原理
mysql工作原理:
从上层来看,复制分成三步:
- master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
- slave将master的binary log events拷贝到它的中继日志(relay log);
- slave重做中继日志中的事件,将改变反映它自己的数据。
canal工作原理:
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
通过以上原理,很容易理解canal的数据同步逻辑:就是把canal实例伪装为mysql的一个从库实例,通过mysql自有的数据同步机制来达到数据同步的目的。