mysql使用canal多库数据同步配置以及测试案例

Canal从调研到应用

测试背景

本次测试在本地,用3个库做同步测试,由canal_master_1和canal_master_2往canal_sync同步数据
在这里插入图片描述

文件配置

canal的配置会涉及到文件夹、配置文件、配置文件之间的关联,总的逻辑关系如下
在这里插入图片描述

deployer配置

deployer的主要作用是对数据库进行监听,伪装destination的从库,解析其binlog

canal/conf/canal.properties 是deployer主配置我们主要关注destinations下的配置

#################################################
######### 		destinations		#############
#################################################
# master1和master2对应着conf下的两个文件夹,其中存放着具体的监听库信息、库表过滤规则等
canal.destinations = master1,master2

ps:多余配置已经裁剪,只关注主要修改配置

master1(2)文件夹配置

master1(2)文件夹就对应着destinations中的配置项,其含义是被监听的数据源,该文件夹下存放其相关配置在instance.properties

# username/password
canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=root
canal.instance.dbPassword=12345678
canal.instance.connectionCharset = UTF-8
 # 默认监听源数据库
canal.instance.defaultDatabaseName=canal_master_1
canal.instance.enableDruid=false
# table regex
canal.instance.filter.regex=canal_master_1.order,canal_master_1.order_item

adapter配置

adapter端的作用是解析来自deployer端的binlog数据并适配转储到各种数据库本次案例中是从mysql适配到mysql.

adapter的主配置在conf/application.yml

outerAdapters代表着外部适配器配置,也就是conf配置下单独拎出来文件夹存放配置的意思

  • name 代表文件夹名称,这里mysql使用的是rdb
  • key 是代表具体配置名称,该配置主要是配置映射规则
  • properties 其下配置的是需要同步到的数据库,及目标库这里目标库只有一个canal_sync所以保持一直即可
server:
  port: 8081
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null

canal.conf:
  mode: tcp #tcp kafka rocketMQ rabbitMQ
  flatMessage: true
  zookeeperHosts:
  syncBatchSize: 1000
  retries: -1
  timeout:
  accessKey:
  secretKey:
  consumerProperties:
    # canal tcp consumer
    canal.tcp.server.host: 127.0.0.1:11111
    canal.tcp.batch.size: 500
  srcDataSources:
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/canal_master_1
      username: root
      password: 12345678
  canalAdapters:
  - instance: master1 # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: rdb
        key: master1Mapping
        properties:
          jdbc.driverClassName: com.mysql.jdbc.Driver
          jdbc.url: jdbc:mysql://127.0.0.1:3306/canal_sync
          jdbc.username: root
          jdbc.password: 12345678
          druid.stat.enable: false
          druid.stat.slowSqlMillis: 1000
  - instance: master2 # canal instance Name or mq topic name
    groups:
    - groupId: g1
      outerAdapters:
      - name: rdb
        key: master2Mapping
        properties:
          jdbc.driverClassName: com.mysql.jdbc.Driver
          jdbc.url: jdbc:mysql://127.0.0.1:3306/canal_sync
          jdbc.username: root
          jdbc.password: 12345678
          druid.stat.enable: false
          druid.stat.slowSqlMillis: 1000 
outerAdapters

在这里插入图片描述

配置master1Mapping.yml时可以用dataSourceKey 关联数据源,也可以使用destination来关联数据源

#dataSourceKey: defaultDS
destination: master1
groupId: g1
outerAdapterKey: master1Mapping
concurrent: true
dbMapping:
  database: canal_master_1
  table: order
  targetTable: order
  targetPk:
    id: id
    tenant_id: tenant_id
  mapAll: true
  commitBatch: 3000 # 批量提交的大小

至此配置已经完成,接下来我将针对给出的配置给到具体的测试数据

测试报告

双库插入,同步库同步情况

测试案例: master1 和 master2 各自写入一条数据观察 canal_sync库数据情况
测试结果:
我们可以通过日志观测到数据已经被adapter解析并执行同步
在这里插入图片描述

插入结果
在这里插入图片描述

验证destination 和 dataSourceKey

  • 测试案例: 注释掉master1Mapping 和 master2Mapping 中的destination,启动后做数据同步

    测试结果: 数据同步均失败

  • 原因分析: 默认情况下adapter会从deployer中拉取binlog,并转换成目标格式。但是在某些情况下可能需要进行回查等操作,就需要用到 dataSourceKey中的配置信息

至此此次测试案例结束

canal原理以及可用性调研
参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小贾Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值