简介

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

Canal 实现 Mysql数据库实时数据同步 https://mp.weixin.qq.com/s/jtT-pjzxgeHLKdtYoxPBiA

Canal 实现 Mysql数据库实时数据同步相关推荐

  1. ubuntun系统mysql数据库同步_Canal 实现 Mysql数据库实时数据同步

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

  2. Canal监控MySQL数据库实现数据同步

    canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL. canal简介 需求:将MySQL中某些表的数据实时的同步到 ...

  3. 基于Canal的MySQL=>ES数据同步方案

    文章目录 1.MySQL和ES的主要区别? 1.1 功能性 1.2 性能指标 1.3 在搜索业务上的区别 1.3.1 查询 1.3.2 检索 2.为什么要做数据同步 2.1 检索性能 2.2 写入性能 ...

  4. MySQL异构同步_详解MySQL数据库异构数据同步

    本文主要向大家介绍了MySQL数据库异构数据同步,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 在实现levelDB挂载成MySQL引擎时,发现在实际存储是key-value格式 ...

  5. 使用canal解决Mysql和Redis数据同步问题

    前言 千呼万唤始出来,停了好个月,终于又开始动手写文章了,今天带给大家的是阿里的一个工具Canal,这个工具是企业做数据同步使用的比较多的方案,希望对你有所帮助,喜欢的话请给个好评 工作原理分析 我们 ...

  6. 如何保证elasticsearch和mysql数据库的数据同步?

    在应对大数据量的电商网站时,通常我们把热门数据放在elasticsearch中.但如何保证es和mysql的数据同步? 方法一:.双写模式 1.首先添加商品入数据库,添加商品成功后,商品入ES, 2. ...

  7. MySQL 到 DM DB 达梦数据库实时数据同步实操分享

  8. oracle数据库实时数据同步

    1.查询当前用户是否有添加dblink的权利: select * from user_sys_privs where privilege like upper('%DATABASE LINK%'); ...

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

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

最新文章

  1. 最火移动端跨平台方案盘点:React Native、weex、Flutter
  2. easyUI的combobox是否可用
  3. 第五章 常用Lua开发库1-redis、mysql、http客户端
  4. 百练2757:最长上升子序列
  5. VMware Tools installation cannot be started manually while Easy Install is in progress.
  6. 扫描二维码 扫码打电话 可以打电话的二维码
  7. 余额表前后台操作和对应sql
  8. 显卡排行榜天梯图2022 显卡性能天梯图2022
  9. fixed在ios失效解决方案
  10. MacOS系统上有什么好用的思维导图软件?
  11. springboot结合redis解决重复提交问题的实际应用
  12. iOS 手机安装Charles证书失败解决方法
  13. 人民大学 环境学院 雷洋(1987-2016)
  14. 自适应阈值(adaptiveThreshold)分割原理及实现
  15. PHP 发送邮件配置 转发自http://www.cnblogs.com/dee0912/p/5448350.html
  16. python中面向对象的缺点_python中的面向对象和面向过程
  17. 【性能测试】轻商城-项目实战2
  18. 国科大学习资料--最优化计算方法(王晓)--期末考试试卷2
  19. pool win10提示bad_Win10蓝屏问题:BAD_POOL_HEADER
  20. 数字电路实验 08 - | 555定时器及其应用

热门文章

  1. PaddleOCR 文本检测训练+推理模型转换教程
  2. 掌握了AI这些点,面试官的天选之子就是你
  3. tensorflow版PSENet 文本检测模型训练和测试
  4. ObjC学习9-Foundation框架之数字、字符串和集合
  5. python调用视频流_RTSP协议进行视频取流的方法、注意点及python实现
  6. win10怎么设置默认浏览器_如何将浏览器设置为默认浏览器?最简单的方法
  7. ScintillaNET的应用
  8. 为什么要用Vue.js的组件化开发
  9. quartz--关于Scheduler
  10. RAM调优之日志分析