全网最详细、最简单 canal同步mysql 监听单实例、监听多实例 配置
修改涉及的文件
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.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
- 修改
/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
adapter
- 修改
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
后台管理设置
- 无法启动
- 启动后开放端口号
待办 写入测试
全网最详细、最简单 canal同步mysql 监听单实例、监听多实例 配置相关推荐
- ES MQ canal同步mysql
转载来源:https://juejin.cn/post/6844904073213247496 大约两年以前,笔者在一个项目中遇到了数据同步的难题. 当时,系统部署了几十个实例,分为1个中心平台和N个 ...
- 使用canal同步MySQL数据到Elasticsearch(ES)
目录 1.功能及使用场景 1.1.功能介绍 1.2.使用场景 2.需求引入 3.canal文件下载及准备 3.1 下载文件 3.2 准备文件 4.deployer安装及效果测试 4.1.deploye ...
- Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB
摘要:本文将介绍如何将 MySQL 中的数据,通过 Binlog + Canal 的形式导入到 Kafka 中,继而被 Flink 消费的案例.内容包括: 背景介绍 环境介绍 部署 TiDB Clus ...
- 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 ...
- canal同步mysql到es
canal 主要用途 是基于 **MySQL 数据库增量日志解析**,提供**增量数据订阅和消费**. 可以简单地把canal理解为一个用来**同步增量数据的一个工具**. 工作原理 canal的工作 ...
- canal同步mysql数据到rocketmq集群
rockermq多主多从异步复制部署参考 canal github 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更.从 2010 ...
- Canal同步mysql binlog至pulsar
Canal 一.简介 canal [kə'næl],主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 基于日志增量订阅和消费的业务包括 数据库镜像 数据库实时备份 索引构建和实时 ...
- canal同步mysql数据
canal简介 canal官网文档 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署, ...
- 【BIM模型生成点云数据】revit转obj格式,全网最详细最简单的步骤了!
最近,学习到了一种新方法,用于制作点云数据集,那就是----用BIM三维模型转obj格式之后导入到cloudcompare生成点云数据.该方式适合做仿真实验,也可以用于三维建模的精度对比. 关键性问题 ...
最新文章
- C++实现大数的减法
- Win7system登录打开计算机,Windows7系统system文件丢失导致开机黑屏如何解决
- 如何用耳机翻页_游戏耳机的经典之作—罗技(G)Astro A40体验
- H.264视频编解码的代码移植和优化
- 数据库中的模式分解与无损连接性
- python自动发邮件附件_python自动发送带附件的邮件(163邮箱,亲测可用)
- 「最有用」的特殊大数据:一文看懂文本信息系统的概念框架及功能
- android图片垂直居中,img图片在div里垂直居中的最佳解决方案
- Linux服务器配置——安装CentOS以及源配置
- 离散数学 习题篇 —— 集合相等与子集关系判断
- 智力问答选择题_智力问答:智力题大全及答案
- Ionic系列——Ionic介绍
- java js 二级联动下拉列表_最简单js代码实现select二级联动下拉菜单
- c语言pow立方根,C#math.pow立方根计算(C# math.pow cube root calculation)
- Java学习指南(15) 链表
- 手机Android存储性能优化架构分析
- vs2022安装详细
- Intellij Idea将普通项目导出为jar包
- 基于yolov5与改进VGGNet的车辆多标签实时识别算法
- 哈夫曼树 (100分)哈夫曼树
热门文章
- 80%大数据交易涉及个人信息
- 自考计算机专业的难度,自学考试计算机这种高难度专业如何提升通过的机会
- 汉字和数字站几个字节,估算内存占用情况
- The ATIS Spoken Language Systems Pilot Corpus
- 单机版和网络版的区别
- [漏洞分析] CVE-2021-42008 6pack协议堆溢出内核提权
- 如何使用4EVERLAND-BUCKET在zkSync上Mint一个NFT
- 富文本编辑器下载与使用
- 【视觉SLAM】An Improved ORB-SLAM2 in Dynamic Scene with Instance Segmentation
- 2023年2月21日