- 我们先回顾一下,传统MySQL主从复制工作原理:
1、现在有一个客户端,往主库(Master)中写入一条数据; 2、主库(Master)会记录一条数据变化,向BinLog中插入一条数据日志; 3、I/O Thread会不停的调度(即过一会执行一下),向BinLog中发起一个请求,读取一下BinLog中的二进制日志 4、BinLog接收到请求后,把数据发送到从库(Slave)中的; 5、I/O Thread 接收到数据以后,把数据写入到RelayLog中; 6、SQL Thread也是会不停的调度,向Relay Log发送一个请求,读取一下RelayLog中的临时日志 7、RelayLog接收到请求后,把数据发送到SQL Thread,并根据日志把数据写入从库中
- 接下来,我们也先看一下Canal的工作原理:
1、canal其实模拟的Mysql Slave的交互协议,把自己伪装成Mysql Slave, 向Mysql Master发送一个dump请求; 2、Master收到这个dump请求后,开始推送binlog日志给slave(这个slave指canal); 3、canal解析master发送过的binlog对象(当前binlog原始数据为byte流)
- 一般Canal的使用场景有什么呢?
1、数据库实时备份 2、业务cache刷新 3、search build (搜索的构建) 4、价格变化等重要业务信息 5、带业务逻辑的增量数据处理 6、跨数据库的数据备份(异构数据同步),例如:mysql => oracle, mysql => mongo,mysql => redis, mysql=>elasticsearch 等
当前canal主要支持的Mysql版本有:5.1.x、5.5.x、5.6.x、5.7.x、8.0.x。