环境信息
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
感谢您提供的详细信息。根据您的描述和测试结果,可以通过以下两种方式实现Canal Adapter同步一个实例多个库并同步所有表的需求:
# 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库中的所有表。
*
来指定所需同步的库或表。在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库中的所有表。这种方式只适用于需要同步所有库和表的场景。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。