简介

1.1 canal介绍

​ Canal是一个基于MySQL二进制日志的高性能数据同步系统。Canal广泛用于阿里巴巴集团(包括https://www.taobao.com),以提供可靠的低延迟增量数据管道,github地址:https://github.com/alibaba/canal

Canal Server能够解析MySQL binlog并订阅数据更改,而Canal Client可以实现将更改广播到任何地方,例如数据库和Apache Kafka。

它具有以下功能:

  • 支持所有平台。
  • 支持由Prometheus提供支持的细粒度系统监控。
  • 支持通过不同方式解析和订阅MySQL binlog,例如通过GTID。
  • 支持高性能,实时数据同步。(详见Performance)
  • Canal Server和Canal Client都支持HA / Scalability,由Apache ZooKeeper提供支持
  • Docker支持。

缺点:

不支持全量更新,只支持增量更新。

完整wiki地址:https://github.com/alibaba/canal/wiki

1.2 运作原理

原理很简单:

  1. Canal模拟MySQL的slave的交互协议,伪装成mysql slave,并将转发协议发送到MySQL Master服务器。
  2. MySQL Master接收到转储请求并开始将二进制日志推送到slave(即canal)。
  3. Canal将二进制日志对象解析为自己的数据类型(原始字节流)

如图所示:

准备工作

2.1 下载解压canal-server

​ 通过 github 下载 canal-server release 版本(本次安装文档使用v1.1.4)

root@locahost:/# wget  https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz

​ 解压

tar -zxvf canal.deployer-1.1.4.tar.gz

2.2 下载解压 canal-adapter

​ 通过 github 下载 canal-adapter release 版本(本次安装文档使用v1.1.4)

root@locahost:/# wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz

​ 解压

tar -zxvf canal.adapter-1.1.4.tar.gz

配置 canal-server

3.1 canal-server 配置

​ 解压之后进入 conf文件夹中,修改 canal.properties 根据实际需要来修改(如果不使用kafka或MQ 默认tcp即可)

canal.destinations = prod # 指定instance的名字多个使用逗号分隔

​ 保存之后在conf目录创建 prod 文件夹并将 example文件夹中的 nstance.properties copy 到and_prod中

mkdir ant_prod  #创建文件夹
cp example/nstance.properties  prod/ # copy 文件

​ 修改 nstance.properties 配置如下:

canal.instance.master.address=127.0.0.1:3306      # 源Mysql地址
canal.instance.dbUsername=canal                   # 源Mysql账号
canal.instance.dbPassword=canal                   # 源Mysql密码
canal.instance.connectionCharset=UTF-8            # 与源数据库编码格式一致
canal.instance.defaultDatabaseName=test_database  # 默认监听源数据库

3.2 canal-server 启动

​ 进入 canal-server bin 目录 启动

cd canal-server/bin # 进入目录
./startup.sh & # 后台启动

​ 查看日志,是否启动成功

cd canal-server/logs/ant_prod #进入日志目录

​ 启动成功:

2020-06-09 17:13:04.956 [main] WARN  o.s.beans.GenericTypeAwarePropertyDescriptor - Invalid JavaBean property 'connectionCharset' being accessed! Ambiguous write methods found next to actually used [public void com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.nio.charset.Charset)]: [public void com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.lang.String)]
2020-06-09 17:13:04.990 [main] INFO  c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [canal.properties]
2020-06-09 17:13:04.990 [main] INFO  c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [ant_prod/instance.properties]
2020-06-09 17:13:05.305 [main] INFO  c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-ant_prod
2020-06-09 17:13:05.311 [main] WARN  c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table filter : ^.*..*$
2020-06-09 17:13:05.311 [main] WARN  c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table black filter :
2020-06-09 17:13:05.315 [main] INFO  c.a.otter.canal.instance.core.AbstractCanalInstance - start successful....
2020-06-09 17:13:05.422 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position
2020-06-09 17:13:05.423 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just show master status
2020-06-09 17:13:06.483 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN  c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000234,position=6676924,serverId=184376678,gtid=,timestamp=1591693973000] cost : 1051ms , the next step is binlog dump

配置 canal-adapter

4.1 canal-adapter 配置

​ 由于Mysql 是8.0 这里需要下载 mysql-connector-java-8.0.20.jar,并将其放入lib中

cp mysql-connector-java-8.0.20.jar /canal-adapter/lib/

​ 解压之后进入 conf文件夹中,修改 application.yml

server:port: 8089
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8default-property-inclusion: non_null
canal.conf:mode: tcp # kafka rocketMQcanalServerHost: 127.0.0.1:11111batchSize: 500syncBatchSize: 1000retries: 0timeout:accessKey:secretKey:
# 源Mysql 地址账号密码等srcDataSources: defaultDS:url: jdbc:mysql://localhost:3306/test_database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaiusername: canalpassword: canal
# 需要实时同步数据库,如果多个实例进行区分即可canalAdapters:- instance: prod # canal instance,在canal-server中指定instance的名称groups:- groupId: g1outerAdapters:- name: rdbkey: mysql1 # 唯一标示properties:jdbc.driverClassName: com.mysql.jdbc.Driverjdbc.url: jdbc:mysql://localhost:3306/test_database_01?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaijdbc.username: canaljdbc.password: canal

​ 编辑rdb目录下面表的映射文件,数据库/表 (多个表创建多个映射文件,文件名对应表名)以此类推

dataSourceKey: defaultDS
destination: prod
outerAdapterKey: mysql1
concurrent: true
dbMapping:database: test_database_01table: testtargetTable: test_database_01.testtargetPk:id: idmapAll: true

4.1 canal-adapter 启动

​ 进入 canal-adapter/bin 目录 启动

cd canal-adapter/bin # 进入目录
./startup.sh & # 后台启动

​ 查看日志,是否启动成功

cd canal-adapter/adapter/logs/ #进入日志目录
tail -f adapter.log # 查看日志是否启动成功

测试数据库同步

 更新/删除/批量插入/批量更新/批量删除

原文链接:https://www.jianshu.com/p/d4c177f0d831 作者:qingwenLi

ubuntun系统mysql数据库同步_Canal 实现 Mysql数据库实时数据同步相关推荐

  1. Canal 实现 Mysql数据库实时数据同步

    简介 1.1 canal介绍 Canal是一个基于MySQL二进制日志的高性能数据同步系统.Canal广泛用于阿里巴巴集团(包括https://www.taobao.com),以提供可靠的低延迟增量数 ...

  2. 阿里开源数据同步神器DataX异构数据源间数据同步同步MySQL与HDFS相互实战

    Datax 实战使用 继上一篇 阿里开源数据同步神器DataX异构数据源间数据同步基础介绍与快速入门之后的实战篇 1.MySQL-To-HDFS 环境 & 准备说明: 描述: 为了快速搭建测试 ...

  3. MySQL 到 MongoDB 实时数据同步实操分享

    MySQL数据怎么实时同步到 MongoDB 实践分享系列 摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同 ...

  4. Oracle到MySQL实时数据同步CloudCanal实战

    简述 CloudCanal 2.1.0.x 版本开始支持 Oracle 作为源端的数据迁移同步能力,目前邀请测试中. 本文通过 Oracle 到 MySQL 的数据迁移同步案例简要介绍这个源端的能力. ...

  5. MySQL 到 PostgreSQL 实时数据同步实操分享

    摘要:很多 DBA 和开发同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.最近了解到一款实时数据同步工具 Tapdata C ...

  6. MySQL 到 MySQL 实时数据同步实操分享

    摘要:很多 DBA 和开发同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.最近了解到一款实时数据同步工具 Tapdata C ...

  7. MySQL 到 SQL Server 实时数据同步实操分享

    摘要:很多 DBA 和开发同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同构数据还相对容易,遇上异构数据.表多.数据量大等情况就难以同步.最近了解到一款实时数据同步工具 Tapdata C ...

  8. 基于数据库数据增量同步_基于 Flink SQL CDC 的实时数据同步方案

    简介:Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的 ...

  9. cdc工具 postgresql_基于 Flink SQL CDC 的实时数据同步方案

    作者:伍翀 (云邪) 整理:陈政羽(Flink 社区志愿者) Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink P ...

最新文章

  1. Newton-Raphson method
  2. linux学习文档-1
  3. wcf http 返回图片
  4. 二叉树的前序遍历Python解法
  5. Exchange 2013SP1和O365混合部署系列一
  6. sql 可以多个分组吗_你知道吗?罗非鱼的品种多达100多个,不单是食用鱼也可以是观赏鱼...
  7. 远程主机强迫关闭了一个现有的连接.
  8. java中打印大小写字母
  9. python难还是java难-纠结应该先学Python还是Java?看完就有数了
  10. Maven学习笔记,动力节点maven教程随堂笔记(史上最全)
  11. Jasperreport_6.18的吐血记录四之分组交叉表
  12. MySQL理论:脏读、不可重复读、幻读
  13. znpc改版前后网址修改办法
  14. husky + lint-staged 使用备忘
  15. Android MOCK HTTP 接口新方式
  16. QT网络编程——TCP服务器和客户端通信
  17. 项目__ASP.NET MVC物资管理系统——表的设计
  18. 1/v_show/id_xnjkzodc5mtcy.html,tab.html
  19. NetBeans Collaboration (二) :MSN, Gtalk,Yahoo的All in One 客户端
  20. 管理系统中计算机应用论文,计算机技术在办公自动化系统中的应用-计算机应用技术论文-计算机论文.docx...

热门文章

  1. OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats()
  2. 复制带随机节点的链表
  3. Fiddler (二) : Script 的 用法
  4. python实现搜索之二分查找
  5. 型管件的作用_管道工程基础 - 管件和管道附件的布置规定
  6. c语言程序设计主编张玉生教材答案,清华大学出版社-图书详情-《Visual Basic程序设计实验指导》...
  7. matlab实验8数据分析与多项式计算,hashidamatlab实验八数据处理与多项式计算.doc
  8. Linux基本目录结构
  9. 年月跨度_不畏困难,砥砺前行 ——国内最大跨度管桁架工程成功首滑
  10. 四川大学计算机专业贵州分数线,四川大学2016年在贵州省高考各专业录取分数线...