场景
开发中,因为各种各样的原因,难免会遇到同时使用数据库和redis、elasticsearch这样中间件的地方。使用时,最为关心的便是数据的一致。业务中使用过代码保证、脚本同步等方式,都难以解决痛点,最后使用canal完美解决。
数据同步方式比较
同步方式 | 优点 | 缺点 |
---|---|---|
代码 | 实时、易实现 | 维护成本高、同步开销大 |
定时脚本 | 异步、易实现 | 数据同步不及时,同一时间有差异 |
Canal简介
canal 是阿里巴巴的一个开源项目,基于java实现,整体已经在很多大型的互联网项目生产环境中使用,包括阿里、美团等都有广泛的应用,是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。
canal是通过模拟成为mysql 的slave的方式,监听mysql 的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。
通俗的讲,canal就是将自己伪装成mysql的从库,然后通过主从备份的方式,将数据库中数据直接写入到相应的数据源中。
工作原理
MySQL主备复制原理
- MySQL master 将数据变更写入二进制日志(