数据同步利器


大家好,我是开源小妹,今天给大家一款强大的数据同步开源项目,Canal 最近小妹收到需求需要做一些数据同步的工作,小妹首先想到数据同步那就用定时任务吧,但是定时任务的弊端在于时效性不够高,如果对于时效性要求稍高的话则定时任务就明显不合适的,最终小妹找到了Canal项目正好可以满足需求能够及时的进行数据同步。 接下来跟着小妹一块来看看这款项目吧

Canal概述

Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 当前的Canal支持源端Mysql版本包括5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

image-20210930093131556

Canal工作原理

Mysql主备复制原理

  • Mysql master将数据变更写入二进制日志(binary log,其中记录叫做二进制日志事件,binary log events)
  • Mysql slave 将master的binary log events 拷贝到它的中继日志(relay log)
  • Mysql slave slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal工作原理

  • canal模拟Mysql slave的交互协议,伪装自己为Mysql slave,向Mysql master发送dump协议,
  • Mysql master收到dump请求,开始推送binary log 给slave(也就是canal)
  • canal 解析binary log 对象(原始为byte流)

Canal简单使用

安装部署 Canal

  1. 需要开启mysql的binlog写入功能,配置binlog-format 为Row模式

  2. 下载Canal 点击下载

  3. 安装 & 配置

    • 解压下载的文件

      1
      2
      mkdir /tmp/canal
      tar zxvf canal.deployer-$version.tar.gz -C /tmp/canal
    • 配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      vi conf/example/instance.properties

      ## mysql serverId
      canal.instance.mysql.slaveId = 1234
      #position info,需要改成自己的数据库信息
      canal.instance.master.address = 127.0.0.1:3306
      canal.instance.master.journal.name =
      canal.instance.master.position =
      canal.instance.master.timestamp =
      #canal.instance.standby.address =
      #canal.instance.standby.journal.name =
      #canal.instance.standby.position =
      #canal.instance.standby.timestamp =
      #username/password,需要改成自己的数据库信息
      canal.instance.dbUsername = canal
      canal.instance.dbPassword = canal
      canal.instance.defaultDatabaseName =
      canal.instance.connectionCharset = UTF-8
      #table regex
      canal.instance.filter.regex = .\*\\\\..\*
  4. 启动

    1
    2
    3
    sh bin/startup.sh
    #查看启动日志
    vi logs/canal/canal.log</pre>
  5. 关闭

    1
    sh bin/stop.sh

安装部署Canal Admin

canal-admin设计上是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作

安装部署

  1. 下载安装 点击下载

  2. 解压配置 & 初始化sql

    1
    2
    3
    4
    5
    mkdir /tmp/canal-admin
    tar zxvf canal.admin-$version.tar.gz -C /tmp/canal-admin

    #修改配置
    vi conf/application.yml

    a. 初始化SQL脚本里会默认创建canal_manager的数据库,建议使用root等有超级权限的账号进行初始化 b. canal_manager.sql默认会在conf目录下,也可以通过链接下载 canal_manager.sql

  3. 启动 & 关闭

    1
    2
    3
    4
    5
    #启动
    sh bin/startup.sh

    #关闭
    sh bin/stop.sh

    启动成功之后 可以通过 可以通过 http://127.0.0.1:8089/ 访问,默认密码:admin/123456

简单操作

集群管理里面配置响应的集群信息,以及zookeeper地址

image-20210930095942494

CanalServer管理

image-20210930100247819

Instance管理 也就是使用Canal的客户端 例如 要同步商品库,会员库, 则可以分别配置实例

image-20210930100546553

新建instance

image-20210930100619738

通过小妹上面的介绍是不是对Canal这块利器有所了解了呢,如果小伙伴们工作中遇到相关的场景可以考虑使用Canal来实现。

总结

上面小妹大概介绍了Canal的简单使用,安装配置好之后基本上所有的操作都是可以在控制台进行操作的,使用起来非常方便。不过Canal在部署上也有弊端,就是需要单独安装ZK。感兴趣的小伙伴可以去尝试一下。


文章作者: 开源小分队
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 开源小分队 !
  目录