-
deployer
/conf/canal.properties
/conf/example/instance.properties -
canal-adapter
/conf/application.yml
/conf/rdb 添加对应的数据表配置 -
只监听一个数据源只需要配置一个example
-
监听多个数据源相应的配置多个example(复制后修改)
下载我这里部署了三台服务器 ,两台监听的数据源 , 一台同步的数据库 。
如果使用虚拟机测试, 可以创建一台服务器,使用docker 创建mysql, 安装完jdk后, 复制两个服务器,启动进行测试
我使用的石virtualbox虚拟机
- docker、mysql、jdk配置
- virtualbox 安装centeros
- canal- --github下载地址 速度较慢
- canal----码云下载地址 速度较快
- 启动的服务器的安装好jdk 这里我安装的jdk11 需要修改startup.sh 文件
项目刷新完毕 打包 生成部署文件
mvn clean install -DskipTests
打包完成后 文件地址
- deployer 在 deploy 模块 target 文件的下 把 canal 文件夹 重命名 压缩即可
- adapter 在 client-adapter 模块的 launcher 模块 target文件 对应的文件夹下 压缩即可
将文件压缩成zip文件 上传至服务器 修改命令
chmod u+x startup.sh stop.sh restart.sh sed -i 's/r$//' startup.sh stop.sh restart.sh修改 startup.sh 文件
jdk11 需要把sh文件修改 将以下相同的替换
vim startup.sh
if [ -n "$str" ]; then JAVA_OPTS="-server -Xms2048m -Xmx3072m -Xmn1024m -XX:SurvivorRatio=2 -Xss256k" else JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m" fi文件配置
启动前 进行服务的文件配置
监听一个数据源同步到一个数据库 deployer修改 /conf/example/instance.properties 文件
# 监听的数据库地址 修改成自己的 canal.instance.master.address=192.168.31.119:3306 canal.instance.master.journal.name= canal.instance.master.position= canal.instance.master.timestamp= canal.instance.master.gtid= # rds oss binlog canal.instance.rds.accesskey= canal.instance.rds.secretkey= canal.instance.rds.instanceId= # table meta tsdb info canal.instance.tsdb.enable=true #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb #canal.instance.tsdb.dbUsername=canal #canal.instance.tsdb.dbPassword=canal #canal.instance.standby.address = #canal.instance.standby.journal.name = #canal.instance.standby.position = #canal.instance.standby.timestamp = #canal.instance.standby.gtid= # username/password # 监听的数据库账号密码 canal.instance.dbUsername=root canal.instance.dbPassword=123456 canal.instance.connectionCharset = UTF-8 # enable druid Decrypt database password canal.instance.enableDruid=false #canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ== # table regex #canal.instance.filter.regex=.*\..* # 配置监听的数据库 数据表 监听几个 配置几个 canal.instance.filter.regex=db01.t_test1 # table black regex canal.instance.filter.black.regex=mysql\.slave_.* # table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2) #canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch # table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2) #canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch # mq config # 配置消息主题 canal.mq.topic=examplecanal-adapter
修改 application.yml 文件
srcDataSources:
defaultDS:
# 监听的数据库地址
url: jdbc:mysql://192.168.31.119:3306/db01?useUnicode=true
username: root
password: 123456
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
# 同步的数据库地址
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://192.168.31.208:3306/db01?useUnicode=true
jdbc.username: root
jdbc.password: 123456
添加对应的数据表文件 赋值一个 进行修改
数据表.yml
# 同application 的监听配置
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
# 监听的数据库名
database: db01
# 监听的数据表明
table: t_test1
# 同步的数据表明
targetTable: t_test1
targetPk:
id: id
mapAll: true
监听多个数据源同步到到一个/多个数据库
deployer
- 修改 /conf/canal.properties 文件
添加多个实例
canal.destinations = example,example1
- 监听一个数据源 对应一个example 这里需要跟上面的对应
修改添加 example
这里我的是下面两个 名字都行 需要跟上面添加的相对应
conf/example
conf/example1
复制修改 对应的 instance.properties
监听的数据源1配置
# 监听的数据库地址 修改成自己的 canal.instance.master.address=192.168.31.119:3306 canal.instance.master.journal.name= canal.instance.master.position= canal.instance.master.timestamp= canal.instance.master.gtid= # rds oss binlog canal.instance.rds.accesskey= canal.instance.rds.secretkey= canal.instance.rds.instanceId= # table meta tsdb info canal.instance.tsdb.enable=true #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb #canal.instance.tsdb.dbUsername=canal #canal.instance.tsdb.dbPassword=canal #canal.instance.standby.address = #canal.instance.standby.journal.name = #canal.instance.standby.position = #canal.instance.standby.timestamp = #canal.instance.standby.gtid= # username/password # 监听的数据库账号密码 canal.instance.dbUsername=root canal.instance.dbPassword=123456 canal.instance.connectionCharset = UTF-8 # enable druid Decrypt database password canal.instance.enableDruid=false #canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ== # table regex #canal.instance.filter.regex=.*\..* # 配置监听的数据库 数据表 这里后面跟 adapter 添加的yml对应 canal.instance.filter.regex=db01.t_test1 # table black regex canal.instance.filter.black.regex=mysql\.slave_.* # table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2) #canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch # table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2) #canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch # mq config # 配置消息主题 这里跟adapter 的application.yml 对应 canal.mq.topic=example
监听的数据源2配置
# 监听的数据库地址 修改成自己的 canal.instance.master.address=192.168.31.221:3306 canal.instance.master.journal.name= canal.instance.master.position= canal.instance.master.timestamp= canal.instance.master.gtid= # rds oss binlog canal.instance.rds.accesskey= canal.instance.rds.secretkey= canal.instance.rds.instanceId= # table meta tsdb info canal.instance.tsdb.enable=true #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb #canal.instance.tsdb.dbUsername=canal #canal.instance.tsdb.dbPassword=canal #canal.instance.standby.address = #canal.instance.standby.journal.name = #canal.instance.standby.position = #canal.instance.standby.timestamp = #canal.instance.standby.gtid= # username/password # 监听的数据库账号密码 canal.instance.dbUsername=root canal.instance.dbPassword=123456 canal.instance.connectionCharset = UTF-8 # enable druid Decrypt database password canal.instance.enableDruid=false #canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ== # table regex #canal.instance.filter.regex=.*\..* # 配置监听的数据库 数据表 这里后面跟 adapter 添加的yml对应 canal.instance.filter.regex=db02.t_student # table black regex canal.instance.filter.black.regex=mysql\.slave_.* # table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2) #canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch # table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2) #canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch # mq config # 配置消息主题 这里跟adapter 的application.yml 对应 canal.mq.topic=example1
- 修改 example example1 文件下的配置 更上面一样 一个example 监听一个数据源
- 修改 application.yml 添加多个监听实例
srcDataSources:
# 监听的数据源1 同example配置
defaultDS:
url: jdbc:mysql://192.168.31.119:3306/db01?useUnicode=true
username: root
password: 123456
# 监听的数据源2 同example1的配置
db02DS:
url: jdbc:mysql://192.168.31.221:3306/db02?useUnicode=true
username: root
password: 123456
canalAdapters:
# example 配置 同步的数据库 这里 我同步到一个数据库 所以下面两个配置数据库一样
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://192.168.31.208:3306/db01?useUnicode=true
jdbc.username: root
jdbc.password: 123456
# 同 deployer example1 同步到下面配置的数据库
- instance: example1 # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://192.168.31.208:3306/db01?useUnicode=true
jdbc.username: root
jdbc.password: 123456
数据表配置
添加需要同步的数据表 yml文件 复制修改
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
# 监听的数据库名
database: db01
# 监听的数据表明
table: t_test1
# 同步的数据表明
targetTable: t_test1
targetPk:
id: id
mapAll: true
# 上面监听的第二个数据源配置
dataSourceKey: db02DS
# 对应example1
destination: example1
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
database: db02
table: t_student
targetTable: t_student
targetPk:
id: id
mapAll: true



