开发者社区> 问答> 正文

canal adapter1.1.3怎么配置同步到mysql实例中所有库和所有表

环境信息

canal adapter1.1.3 mysql 5.7.24

问题描述

conf/rdb/mytest_user.yml 配置中 dataSourceKey: defaultDS destination: canal_mysql outerAdapterKey: mysql1 concurrent: true dbMapping: database: cloud_dev1

步骤重现

这样设置同步失败,如果指定table、targetTable、targetPk、id等能成功同步单个表,请问怎么设置成同步database中所有table?还有一个实例多个库的同步怎么配置?

mysql数据库自带的M-S同步很简单配置,能实现一个实例的所有库所有表同步;canal adapter文档不清楚具体配置,targetPk 关于联合主键也配置不成功。

经过源码测试,application.yml配置多个name: rdb( 每个key: mysql1命名不同),rdb文件夹下要为每个表配置dataSourceKey、destination、outerAdapterKey、dbMapping等对应参数,期中 targetPk: # 联合主键时多行 c_id: c_id s_id: s_id 这样就可以单实例多个库多个表同步。

原提问者GitHub用户githubkevinyou

展开
收起
古拉古拉 2023-05-08 14:59:31 233 0
2 条回答
写回答
取消 提交回答
  • 单表对应topic,可以参考一下wiki里的dymaicTopic的配置

    原回答者GitHub用户agapple

    2023-05-09 18:06:54
    赞同 1 展开评论 打赏
  • 感谢您提供的详细信息。根据您的描述和测试结果,可以通过以下两种方式实现Canal Adapter同步一个实例多个库并同步所有表的需求:

    1. 在对应的rdb配置文件中分别指定每个库的表信息。可以参考您提供的方法,在每个库的rdb配置文件中分别添加dataSourceKey、destination、outerAdapterKey、dbMapping等对应参数,这样可以配置单实例多个库多个表同步。例如,可以像下面这样为每个库分别配置:
    # for DB1
    dataSourceKey: defaultDS
    destination: canal_mysql
    outerAdapterKey: mysql1
    concurrent: true
    dbMapping:
      database: db1
      table1: {}
      table2: {}
      table3: {}
      
    # for DB2
    dataSourceKey: defaultDS
    destination: canal_mysql
    outerAdapterKey: mysql1
    concurrent: true
    dbMapping:
      database: db2
      table1: {}
      table2: {}
      table3: {}
    

    这里设置了两个不同的database,分别是db1和db2,每个database下面配置了多个table。在这个配置中,可以通过指定空对象表示同步database中的所有表,例如DB1中的dbMapping: database: db1 table1: {} table2: {}配置表示,同步db1库中的所有表。

    1. 使用通配符*来指定所需同步的库或表。在dbMapping中使用"*"表示同步该database下的所有表。例如,可以像下面这样为每个库分别配置:
    # for DB1
    dataSourceKey: defaultDS
    destination: canal_mysql
    outerAdapterKey: mysql1
    concurrent: true
    dbMapping:
      database: db1
      "*": {}
      
    # for DB2
    dataSourceKey: defaultDS
    destination: canal_mysql
    outerAdapterKey: mysql1
    concurrent: true
    dbMapping:
      database: db2
      "*": {}
    

    在这个配置中,使用"*"表示同步db1或db2库中的所有表。这种方式只适用于需要同步所有库和表的场景。

    2023-05-08 15:23:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像