简介

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 position2020-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 status2020-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: 8089spring:  jackson:    date-format: yyyy-MM-dd HH:mm:ss    time-zone: GMT+8    default-property-inclusion: non_nullcanal.conf:  mode: tcp # kafka rocketMQ  canalServerHost: 127.0.0.1:11111  batchSize: 500  syncBatchSize: 1000  retries: 0  timeout:  accessKey:  secretKey:# 源Mysql 地址账号密码等  srcDataSources:     defaultDS:      url: jdbc:mysql://localhost:3306/test_database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai      username: canal      password: canal# 需要实时同步数据库,如果多个实例进行区分即可  canalAdapters:  - instance: prod # canal instance,在canal-server中指定instance的名称    groups:    - groupId: g1      outerAdapters:      - name: rdb        key: mysql1 # 唯一标示        properties:          jdbc.driverClassName: com.mysql.jdbc.Driver          jdbc.url: jdbc:mysql://localhost:3306/test_database_01?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai          jdbc.username: canal          jdbc.password: canal

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

dataSourceKey: defaultDSdestination: prodouterAdapterKey: mysql1concurrent: truedbMapping:  database: test_database_01  table: test  targetTable: test_database_01.test  targetPk:    id: id  mapAll: 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

设备多,负荷大,企业运维如何实现高效又智能?9月22日(周二)晚20:30,十年运维老鸟在线揭秘上市公司基础架构建设!带你玩转运维自动化!

马哥教育Linux、Python、Go系列课程火热报名中

往期推荐

  • 想月薪20K以上的运维工程师必备技能!快速get!

  • 有偿招募 | 热爱分享也是一种人生态度!

  • 敲响高薪!马哥教育"双王炸"班型封班倒计时...

oracle和mysql数据实时同步_Canal 实现 Mysql数据库实时数据同步相关推荐

  1. (转)【mysql元数据库】使用information_schema.tables查询数据库和数据表信息 ---数据记录大小统计...

    转:https://www.cnblogs.com/ssslinppp/p/6178636.html https://segmentfault.com/q/1010000007268994?_ea=1 ...

  2. python 数据库同步_python实现不同数据库间数据同步功能

    功能描述 数据库间数据同步方式很多,在上篇博文中有总结.本文是用py程序实现数据同步. a数据库中有几十张表,要汇聚到b数据库中,且表结构一致,需要准实时的进行数据同步,用工具实现时对其控制有限且配置 ...

  3. oracle数据库触发器怎么查询后插入,[求助][Oracle][ORA-00604][ORA-02067]触发器被触发时向远程数据库插入数据...

    环境: 数据库:Oracle 12c:数据库A(本地),数据库B(远程),在A中创建DBLink连接到B 工具:sqldevloper 问题: 数据库A中的Change表中创建了触发器T,After ...

  4. mysql导入sql脚本、增删改数据库、数据表,超详细图解

    为方便查看,建议使用右侧目录 一.导入sql脚本 source 二.数据库操作 create 增 use 使用 三.数据表操作 表结构(DDL) create 新建 drop 删 alter 增.改 ...

  5. 在MySQL中如何用SQL命令创建数据库及数据表

    HRELLO 大家好! 上期给大家讲解了,MySQL数据库常用的管理命令.现在,给大家讲解,如何用SQL命令在MySQL中创建一个数据库及数据表. 在学习前,我们首先要了解,SQL命令是什么? SQL ...

  6. resultset遍历取数据_数据放在哪?如何从数据库取数据?

    前言 数据放在数据库内(如:mysql) 如何获取数据,可用JDBC 1. 为什么要了解mysql数据库? 因为实际的生活中,网页里面的内容都不是静止的,会根据你的操作和交互,数据会发生变化 有数据变 ...

  7. 后端处理数据保存请求流程multer+ajax 数据库添加数据 前端与后端的数据联通 在business_list 页面进行数据处理 @stage3---week3--day4

    后端处理 基础流程 $ npx be_app -e 快速构建项目骨架 $ yarn 安装依赖包 修改 package.json {"name": "be-app" ...

  8. php tp5清空数据表并主键,tp5数据库——更新数据

    更新数据 更新数据表中的数据 Db::table('think_user')->where('id', 1)->update(['name' => 'thinkphp']); 如果数 ...

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

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

  10. java web mysql视图_Javaweb项目-下拉列表显示后台数据库的数据

    下面将演示前端下拉列表显示后台数据库中class表的说有班级的名称 环境: Tomcat-8.5.40 mysql-8.0.13 eclipse-4.9.0 springmvc框架 一.从mysql中 ...

最新文章

  1. 凭证 90000000 保存(帐户确定出错)
  2. activiti 条件表达式json报错_2020年2月13日学习python 条件控制
  3. Typescript常见三种函数类型
  4. ffplay源码(版本:ffmpeg-4.2.1)
  5. FPGA和CPLD的比较
  6. TypeError at /**/ ** missing 1 required positional argument: '**'
  7. Mysql disk write 高_优化系列|实例解析MySQL性能瓶颈排查定位 导读 排查过程
  8. linux shell中实现循环日期的实例代码
  9. 更改API级别的Android Studio
  10. 数据可视化:CSV格式,JSON格式
  11. Bcm96xx 系列芯片 SDK介绍(一)
  12. 学习强国---Android逆向及JS逆向
  13. Mybatis 缓存配置 ,如何禁用缓存与一些细节
  14. WordPress自媒体网站迁移
  15. png格式的icon使用方法
  16. nn,cnn(lenet5),c++代码
  17. Redis min-slaves-to-write
  18. 电脑计算机无法运行怎么办,如果计算机在打开电源后仍无法运行,则该怎么办?计算机无法进入系统的原因[图形]...
  19. VMware虚拟机从一台电脑复制到另一台电脑
  20. 遥感图像大气校正以及是否大气校正

热门文章

  1. Hadoop YARN配置参数剖析(5)—Capacity Scheduler相关参数
  2. Storm处理流程, 基本参数配置
  3. valgrind 报告 ecpg内存泄露 (二)
  4. spring mvc 页面跳转 携带数据的两种方式
  5. DL学习笔记(1)整体理解
  6. 不到30行JS代码实现的Excel表格
  7. Android 3.0“.NET研究”七大特性全解析
  8. [Erlang 0026] 目前最优的Erlang IDE
  9. 2017 计蒜之道 初赛 第五场 A. UCloud 机房的网络搭建
  10. Matlab学习(可以用MATLAB作曲)