修改涉及的文件

  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. C++实现大数的减法
  2. Win7system登录打开计算机,Windows7系统system文件丢失导致开机黑屏如何解决
  3. 如何用耳机翻页_游戏耳机的经典之作—罗技(G)Astro A40体验
  4. H.264视频编解码的代码移植和优化
  5. 数据库中的模式分解与无损连接性
  6. python自动发邮件附件_python自动发送带附件的邮件(163邮箱,亲测可用)
  7. 「最有用」的特殊大数据:一文看懂文本信息系统的概念框架及功能
  8. android图片垂直居中,img图片在div里垂直居中的最佳解决方案
  9. Linux服务器配置——安装CentOS以及源配置
  10. 离散数学 习题篇 —— 集合相等与子集关系判断
  11. 智力问答选择题_智力问答:智力题大全及答案
  12. Ionic系列——Ionic介绍
  13. java js 二级联动下拉列表_最简单js代码实现select二级联动下拉菜单
  14. c语言pow立方根,C#math.pow立方根计算(C# math.pow cube root calculation)
  15. Java学习指南(15) 链表
  16. 手机Android存储性能优化架构分析
  17. vs2022安装详细
  18. Intellij Idea将普通项目导出为jar包
  19. 基于yolov5与改进VGGNet的车辆多标签实时识别算法
  20. 哈夫曼树 (100分)哈夫曼树

热门文章

  1. 80%大数据交易涉及个人信息
  2. 自考计算机专业的难度,自学考试计算机这种高难度专业如何提升通过的机会
  3. 汉字和数字站几个字节,估算内存占用情况
  4. The ATIS Spoken Language Systems Pilot Corpus
  5. 单机版和网络版的区别
  6. [漏洞分析] CVE-2021-42008 6pack协议堆溢出内核提权
  7. 如何使用4EVERLAND-BUCKET在zkSync上Mint一个NFT
  8. 富文本编辑器下载与使用
  9. 【视觉SLAM】An Improved ORB-SLAM2 in Dynamic Scene with Instance Segmentation
  10. 2023年2月21日