数据同步神器Canel-day01

Posted Jeff、yuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据同步神器Canel-day01相关的知识,希望对你有一定的参考价值。

背景

关于数据同步的方式有很多种,现在有一个场景需要将mysql数据库的数据主动同步到我们的工程中,并且能再mysql数据库客户端更改某一行的数据也能将数据同步到另一个数据库或者工程中,对于这种场景的使用我们应该怎么去实现呢?

我们从问题点去分析,

  1. 同步mysql数据库数据到工程中,这个很简单,那就是工程直接连接数据库直接读取。这不是主动是被动,这样的话那就肯定得数据库主动去触发了。
  2. 那这肯定要改动mysql的底层源码,或者mysql又提供接口,既然说到了这里,想想mysql的主从同步机制呢?
  • master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
  • slave将master的binary log events拷贝到它的中继日志(relay log);
  • slave重做中继日志中的事件,将改变反映它自己的数据。
    这不就搞定了吗?? 写个中间件模仿slave不就搞定了?这是要自己造轮子,NO,面向搜索编程,这肯定得google一下。
    在这里插入图片描述

canel 了解一下,直接用起来。

什么是canel?

  1. canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 也就是有新改变的数据日志的同步。
  2. 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
  3. 基于日志增量订阅和消费的业务包括
    • 数据库镜像
    • 数据库实时备份
    • 索引构建和实时维护(拆分异构索引、倒排索引等)
    • 业务 cache 刷新
    • 带业务逻辑的增量数据处理

工作原理

在这里插入图片描述

  1. MySQL主备复制原理
    • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
    • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
    • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
  2. Canel 工作原理
    • 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
    • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
    • canal 解析 binary log 对象(原始为 byte 流)

真的不想写,烂泥巴不想打渔了!!!

下篇继续主从具体原理和canel 具体原理

以上是关于数据同步神器Canel-day01的主要内容,如果未能解决你的问题,请参考以下文章

离线数据同步神器:DataX,支持几乎所有异构数据源的离线同步到MaxCompute

同步MySQL数据到ES神器mysqlmom介绍

阿里的数据同步神器——Canal

lsyncd —— 多机器实时同步文件神器

linux中的备份神器rsync实现远程同步

非exchange下,outlook日历实时同步神器