修改涉及的文件

  1. deployer
    /conf/canal.properties
    /conf/example/instance.properties

  2. canal-adapter
    /conf/application.yml
    /conf/rdb 添加对应的数据表配置

  3. 只监听一个数据源只需要配置一个example

  4. 监听多个数据源相应的配置多个example(复制后修改)

前置准备

我这里部署了三台服务器 ,两台监听的数据源 , 一台同步的数据库 。
如果使用虚拟机测试, 可以创建一台服务器,使用docker 创建mysql, 安装完jdk后, 复制两个服务器,启动进行测试
我使用的石virtualbox虚拟机

下载

  1. docker、mysql、jdk配置
  2. virtualbox 安装centeros
  3. canal- --github下载地址 速度较慢
  4. canal----码云下载地址 速度较快
  5. 启动的服务器的安装好jdk 这里我安装的jdk11 需要修改startup.sh 文件

打包

项目刷新完毕 打包 生成部署文件

mvn clean install -DskipTests

打包完成后 文件地址

  1. deployer 在 deploy 模块 target 文件的下 把 canal 文件夹 重命名 压缩即可
  2. adapter 在 client-adapter 模块的 launcher 模块 target文件 对应的文件夹下 压缩即可

上传文件至服务器

将文件压缩成zip文件 上传至服务器 修改命令

chmod u+x startup.sh stop.sh restart.shsed -i 's/\r$//' startup.sh stop.sh restart.sh

修改 startup.sh 文件

jdk11 需要把sh文件修改 将以下相同的替换
vim startup.sh

if [ -n "$str" ]; thenJAVA_OPTS="-server -Xms2048m -Xmx3072m -Xmn1024m -XX:SurvivorRatio=2 -Xss256k"
elseJAVA_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=example

canal-adapter

修改 application.yml 文件

srcDataSources:defaultDS:# 监听的数据库地址url: jdbc:mysql://192.168.31.119:3306/db01?useUnicode=trueusername: rootpassword: 123456canalAdapters:- instance: example # canal instance Name or mq topic namegroups:- groupId: g1outerAdapters:- name: logger- name: rdbkey: mysql1properties:# 同步的数据库地址jdbc.driverClassName: com.mysql.jdbc.Driverjdbc.url: jdbc:mysql://192.168.31.208:3306/db01?useUnicode=truejdbc.username: rootjdbc.password: 123456

添加对应的数据表文件 赋值一个 进行修改
数据表.yml

# 同application 的监听配置
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:# 监听的数据库名database: db01# 监听的数据表明table: t_test1# 同步的数据表明targetTable: t_test1targetPk:id: idmapAll: true

监听多个数据源同步到到一个/多个数据库

deployer

  1. 修改 /conf/canal.properties 文件
    添加多个实例
canal.destinations = example,example1
  1. 监听一个数据源 对应一个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

adapter

  1. 修改 application.yml 添加多个监听实例
 srcDataSources:# 监听的数据源1  同example配置defaultDS:url: jdbc:mysql://192.168.31.119:3306/db01?useUnicode=trueusername: rootpassword: 123456# 监听的数据源2 同example1的配置db02DS:url: jdbc:mysql://192.168.31.221:3306/db02?useUnicode=trueusername: rootpassword: 123456canalAdapters:# example 配置 同步的数据库  这里 我同步到一个数据库 所以下面两个配置数据库一样- instance: example # canal instance Name or mq topic namegroups:- groupId: g1outerAdapters:- name: logger- name: rdbkey: mysql1properties:jdbc.driverClassName: com.mysql.jdbc.Driverjdbc.url: jdbc:mysql://192.168.31.208:3306/db01?useUnicode=truejdbc.username: rootjdbc.password: 123456# 同 deployer example1 同步到下面配置的数据库      - instance: example1 # canal instance Name or mq topic namegroups:- groupId: g1outerAdapters:- name: logger- name: rdbkey: mysql1properties:jdbc.driverClassName: com.mysql.jdbc.Driverjdbc.url: jdbc:mysql://192.168.31.208:3306/db01?useUnicode=truejdbc.username: rootjdbc.password: 123456

数据表配置
添加需要同步的数据表 yml文件 复制修改

dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:# 监听的数据库名database: db01# 监听的数据表明table: t_test1# 同步的数据表明targetTable: t_test1targetPk:id: idmapAll: true
# 上面监听的第二个数据源配置
dataSourceKey: db02DS
#  对应example1
destination: example1
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:database: db02table: t_studenttargetTable: t_studenttargetPk:id: idmapAll: true

问题

Reason: Unable to set value for property src-data-sources

解决方式

数据库配置改为配置

 jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false

后台管理设置

  1. 无法启动
  2. 启动后开放端口号

待办 写入测试

全网最详细、最简单 canal同步mysql 监听单实例、监听多实例 配置相关推荐

  1. ES MQ canal同步mysql

    转载来源:https://juejin.cn/post/6844904073213247496 大约两年以前,笔者在一个项目中遇到了数据同步的难题. 当时,系统部署了几十个实例,分为1个中心平台和N个 ...

  2. 使用canal同步MySQL数据到Elasticsearch(ES)

    目录 1.功能及使用场景 1.1.功能介绍 1.2.使用场景 2.需求引入 3.canal文件下载及准备 3.1 下载文件 3.2 准备文件 4.deployer安装及效果测试 4.1.deploye ...

  3. Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

    摘要:本文将介绍如何将 MySQL 中的数据,通过 Binlog + Canal 的形式导入到 Kafka 中,继而被 Flink 消费的案例.内容包括: 背景介绍 环境介绍 部署 TiDB Clus ...

  4. Elasticsearch7.9集群部署,head插件,canal同步mysql数据到es,亲自测试,无坑

    Elasticsearch集群部署 1.服务器规划 10.4.7.11 node1 10.4.7.12 node2 10.4.7.13 node3 1. 集群相关    一个运行中的 Elastics ...

  5. canal同步mysql到es

    canal 主要用途 是基于 **MySQL 数据库增量日志解析**,提供**增量数据订阅和消费**. 可以简单地把canal理解为一个用来**同步增量数据的一个工具**. 工作原理 canal的工作 ...

  6. canal同步mysql数据到rocketmq集群

    rockermq多主多从异步复制部署参考 canal github 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更.从 2010 ...

  7. Canal同步mysql binlog至pulsar

    Canal 一.简介 canal [kə'næl],主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 基于日志增量订阅和消费的业务包括 数据库镜像 数据库实时备份 索引构建和实时 ...

  8. canal同步mysql数据

    canal简介 canal官网文档 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署, ...

  9. 【BIM模型生成点云数据】revit转obj格式,全网最详细最简单的步骤了!

    最近,学习到了一种新方法,用于制作点云数据集,那就是----用BIM三维模型转obj格式之后导入到cloudcompare生成点云数据.该方式适合做仿真实验,也可以用于三维建模的精度对比. 关键性问题 ...

最新文章

  1. 不愧是大佬用Python做一个游戏辅助脚本,完整编程思路分享!
  2. 更快学习 JavaScript 的 6 个思维技巧
  3. Nginx + FastCgi + Spawn-fcgi + c 的架构
  4. 第四条:通过私有构造器强化不可实例化的能力
  5. 【每日一记3.21】initrd
  6. windbg网络双机内核调试
  7. 人大金仓数据库sql语句_人大金仓数据库总结(SQL和JDBC)
  8. Nauuo and Votes
  9. Easy Tech:什么是I帧、P帧和B帧?
  10. qq登录界面句柄_别小看QQ邮箱测试,80%的测试新手都不能写出完整的测试用例~...
  11. scrapy 爬取百度知道,多spider子一个项目中,使用一个pielines
  12. 获取和分析Dump的几种工具简介
  13. 计算机管理无线网络 win10,如何在Windows 10中使用命令行管理WIFI无线网络
  14. ipscan(ip端口扫描工具) 2.21 中文绿色版 局域网ip端口扫描神器
  15. 用例图包含关系、扩展关系、泛化关系解析
  16. 导致网页图片字体模糊的原因
  17. 【致远FAQ】致远OA启动不起来了(中集)
  18. LINUX MMC 子系统分析之五 MMC driver模块分析
  19. 公司新来了个00后测试工程师,一副毛头小子的样儿,哪想到是新一代卷王...
  20. OpenGL Glut 初学

热门文章

  1. 校园恋人分手时的经典清单
  2. 读书有益——》小朋友的诗(八)
  3. css设置利用伪元素设置三角形
  4. 软件需求工程 高校教学平台 软件需求规格说明书 part 3 (重点!!!)
  5. 清华镜像站下载android源码
  6. 升级python2升级到python3_Centos6.6升级python2到python3
  7. xilinx的VDMA驱动分析
  8. Creator3D:shader_这种置灰效果看起来挺牛逼,原来实现起来这么简单
  9. 数据可视化_用Matplotlib绘制折线图
  10. html5 红包页面,利用HTML5实现手机触屏接红包代码