广告
返回顶部
首页 > 资讯 > 数据库 >Canal中怎么实现MySQL数据库实时数据同步
  • 515
分享到

Canal中怎么实现MySQL数据库实时数据同步

2024-04-02 19:04:59 515人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关Canal中怎么实现Mysql数据库实时数据同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.1 canal介绍Canal是一个基于

这期内容当中小编将会给大家带来有关Canal中怎么实现Mysql数据库实时数据同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

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. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2.  Canal模拟MySQL的slave的交互协议,伪装成mysql slave,并将转发协议发送到MySQL Master服务器

  3.  MySQL Master接收到转储请求并开始将二进制日志推送到slave(即canal)。

  4.  Canal将二进制日志对象解析为自己的数据类型(原始字节流)

如图所示:

Canal中怎么实现MySQL数据库实时数据同步

准备工作

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地址  canalcanal.instance.dbUsername=canal                   # 源Mysql账号  canalcanal.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:ss      time-zone: GMT+8      default-property-inclusion: non_null  canal.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: defaultDS  destination: prod  outerAdapterKey: mysql1  concurrent: true  dbMapping:    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 # 查看日志是否启动成功

测试数据库同步

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

上述就是小编为大家分享的Canal中怎么实现MySQL数据库实时数据同步了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: Canal中怎么实现MySQL数据库实时数据同步

本文链接: https://www.lsjlt.com/news/57832.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Canal中怎么实现MySQL数据库实时数据同步
    这期内容当中小编将会给大家带来有关Canal中怎么实现MySQL数据库实时数据同步,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.1 canal介绍Canal是一个基于...
    99+
    2022-10-18
  • 基于Canal实现MySQL 8.0 数据库数据同步
    前言 服务器说明 主机名称操作系统说明192.168.11.82Ubuntu 22.04主库所在服务器192.168.11.28Oracle Linux Server 8.7从库所在服务器 版本说明 ...
    99+
    2023-10-25
    数据库 mysql 服务器
  • Canal+Kafka实现Mysql数据同步
    Canal介绍 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。 canal是应阿里巴巴...
    99+
    2023-09-05
    kafka mysql 分布式
  • canal如何实现mysql的数据同步
    这篇文章将为大家详细讲解有关canal如何实现mysql的数据同步,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。canal是什么?canal [kə'næl],译...
    99+
    2022-10-18
  • 使用Canal实现PHP应用程序与MySQL数据库的实时数据同步
    目录canal简介安装配置启动安装php与canal连接的组件简单示例结果展示canal简介 由阿里巴巴开源 github地址:https://github.com/alibaba/...
    99+
    2023-05-16
    PHP Canal PHP Canal数据同步
  • canal使用说明:MySQL、Redis实时数据同步
    1. canal简介 canal是阿里开源的数据同步工具,基于bin log可以将数据库同步到其他各类数据库中,目标数据库支持mysql,postgresql,oracle,redis,MQ,ES等 ...
    99+
    2023-09-08
    mysql redis 数据库
  • Mysql数据库中怎么实现数据同步
    Mysql数据库中怎么实现数据同步,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 安装配置两台服务器,分别安装好Mysql,都安装在 /u...
    99+
    2022-10-18
  • MySQL高性能实现Canal数据同步神器
    目录简介配置mysqlCentos7 安装 canalJava客户端简介 Canal是阿里巴巴基于Java开源的数据同步工具。平时业务场景使用比较多的如下: 同步数据到ES、Redis缓存中。 数据同步。 业务需要监听数...
    99+
    2022-08-11
    MySQLCanal数据同步 MySQLCanal
  • MySQL数据库中怎么实现同步
    本篇文章给大家分享的是有关MySQL数据库中怎么实现同步,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1.修改 master 端的my.c...
    99+
    2022-10-18
  • MySQL数据库中怎么实现异构数据同步
    本篇文章为大家展示了MySQL数据库中怎么实现异构数据同步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在实现levelDB挂载成MySQL引擎时,发现在实际存储是...
    99+
    2022-10-18
  • MySQL中怎么实现多库数据同步
    本篇文章为大家展示了MySQL中怎么实现多库数据同步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、建立测试环境CREATE table mother(id in...
    99+
    2022-10-18
  • Mysql 中怎么实现主从数据库同步
    这篇文章给大家介绍Mysql 中怎么实现主从数据库同步,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、主服务器1.1、创建一个复制用户,具有replication slave 权限。...
    99+
    2022-10-18
  • Mysql数据实时同步实践
    关于小米内部使用的数据库你知道多少?背景Mysql由于自身简单、高效、可靠的特点,成为小米内部使用最广泛的数据库,但是当数据量达到千万/亿级别的时候,mysql的相关操作会变的非常迟缓;如果这时还有实时BI...
    99+
    2022-10-18
  • 阿里云MySQL数据库实时同步
    在当今的信息时代,数据是企业的生命线,而数据库则是数据存储和管理的关键。如何保证数据库数据的安全、稳定和实时性,成为企业面临的重要问题。而阿里云的MySQL数据库实时同步服务,正好解决了这个问题。 一、问题提出随着企业的业务不断扩大,数据量...
    99+
    2023-10-29
    阿里 实时 数据库
  • clickhouse实时同步MySQL数据
    两种方式         1、使用clickhouse表引擎,直接从MySQL中读取数据(针对表),如果业务需求不是很复杂,可以选择此方式,需要哪张表就配置哪张表,操作简单,数据实时同步;         2、使用clickhouse数据库...
    99+
    2023-09-02
    mysql clickhouse 数据库
  • 如何实现MySQL数据库同步
    这篇文章主要介绍了如何实现MySQL数据库同步,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL 的数据同步,在 MySQL 官方网站...
    99+
    2022-10-19
  • MySQL数据库实现主主同步
    前言 MySQL主主同步实际上是在主从同步的基础上将从数据库也提升成主数据库,让它们可以互相读写数据库,从数据库变成主数据库;主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程,只要对...
    99+
    2023-09-08
    mysql 数据库 服务器
  • MySQL 到Oracle 实时数据同步
    目录第一步:配置MySQL 连接第二步:配置 Oracle连接第四步:进行数据校验其他数据库的同步操作摘要:很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,同...
    99+
    2022-11-12
  • mysql数据库中怎么实现双向同步热备
    本篇文章为大家展示了mysql数据库中怎么实现双向同步热备,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 环境: Master server: 10.224.1...
    99+
    2022-10-18
  • 怎么使用canal+Kafka进行数据库同步操作
    这篇文章主要介绍了怎么使用canal+Kafka进行数据库同步操作的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用canal+Kafka进行数据库同步操作文章都会有所收获,下面我们一起来看看吧。平时工作中...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作