首页 > 数据库 >使用Canal同步mysql数据到es

使用Canal同步mysql数据到es

时间:2023-07-19 22:00:54浏览次数:61  
标签:Canal canal slave log binary mysql master MySQL es

一、简介

使用Canal同步mysql数据到es_MySQL

Canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

二、工作原理

MySQL主备复制原理
  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal 工作原理
  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

三、准备安装包

下载地址,我使用的是1.1.6版本https://github.com/alibaba/canal/releases/tag/canal-1.1.6国内的话,可以在绿色聊天软件搜索:程序员朱永胜 关注回复1006领取安装包,不限速下载

使用Canal同步mysql数据到es_推送_02

  • deployer包:服务包
  • admin包:UI管理系统,需要的话可以下载
  • adapter包:官方提供的客户端,可以实现自动同步

四、启动Canal服务

4.1 下载

最简单的使用,我们只需要安装deplyee包即可,其他的不需要

4.2 新增用户并授权

使用Canal同步mysql数据到es_MySQL_03

4.3 配置文件修改

4.3.1 canal.properties

使用Canal同步mysql数据到es_推送_04

这个配置文件默认即可,无需修改配置

4.3.2 instance.properties

使用Canal同步mysql数据到es_数据_05

修改mysql地址,要确保已经配置了账号密码并授权

使用Canal同步mysql数据到es_MySQL_06

4.4 启动

使用Canal同步mysql数据到es_推送_07

使用Canal同步mysql数据到es_MySQL_08

4.5 确认启动成功

使用Canal同步mysql数据到es_MySQL_09

使用Canal同步mysql数据到es_数据_10

五、安装依赖

<dependencies>
    <dependency>
        <groupId>com.alibaba.otter</groupId>
        <artifactId>canal.client</artifactId>
        <version>1.1.4</version>
    </dependency>
</dependencies>

六、运行效果

由于代码比较长,我放到最后了,这里先说下效果。代码启动后,我们只需要变更任意表里面的数据即可看到控制台打印内容。

数据很清晰,有具体的数据库,表,操作类型,以及字段及修改的值。 到这里基本就算结束了,后续就是根据业务自己推送到ES中。当然,也可以使用官方的adapter推送到ES中。

使用Canal同步mysql数据到es_推送_11

七、编写客户端代码

测试代码官网地址:https://github.com/alibaba/canal/blob/master/example/src/main/java/com/alibaba/otter/canal/example/AbstractCanalClientTest.java国内的话,可以在绿色聊天软件搜索:程序员朱永胜 关注回复1007领取代码,不限速下载

6.1 BaseCanalClientTest

使用Canal同步mysql数据到es_MySQL_12

6.2 SimpleCanalClientTest

使用Canal同步mysql数据到es_推送_13

6.3 AbstractCanalClientTest

使用Canal同步mysql数据到es_MySQL_14

标签:Canal,canal,slave,log,binary,mysql,master,MySQL,es
From: https://blog.51cto.com/u_14799880/6780425

相关文章

  • AtCoder Grand Contest 049 E Increment Decrement
    洛谷传送门AtCoder传送门好题。同时考查了slopetrick和选手的计数能力,不愧是AGCE。先考虑问题的第一部分。你现在有一个初始全为\(0\)的序列\(b\)。你每次可以给\(b\)单点\(\pm1\),代价为\(1\),或区间\(\pm1\),代价为\(m\)。求把\(b\)变成给定序列\(a\)的......
  • 使用Canal同步mysql数据到es
    一、简介Canal主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。当前的canal支持源端MySQL版本包括5.1.x,5.5.x,5.6.x,5.7.x,8.0.x二、工作原理MySQL主备复制原理MySQLmaster将数据变更写入二进制日志(binarylog,其中记录叫做二进制日志......
  • 错误连接数据库 [mysql] : org.pentaho.di.core.exception.KettleDatabaseExcepti
    错误连接数据库[mysql]:org.pentaho.di.core.exception.KettleDatabaseException是一种常见的错误,通常在使用PentahoDataIntegration(PDI)工具连接到MySQL数据库时出现。本文将介绍这个错误的原因,以及如何解决它。在使用PDI工具连接到MySQL数据库时,经常会遇到数据库连接失败的......
  • Metadata processing is not available 解决方案
    问题Export:Release11.2.0.4.0-ProductiononWedJul1920:49:242023Copyright(c)1982,2011,Oracleand/oritsaffiliates.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitio......
  • Codeforces Round 885 (Div. 2)
    Preface打的就是依托答辩居然也能上分,看来手稳还是重要的说D题半场开香槟以为随便写,然后没想到怎么处理这个局部没有三分性的函数,直接GG后面听学长一说其实分成四种函数分别求最值即可直接恍然大悟,只能说还是太菜太菜而且F好像是个蓝桥杯的某个题的弱化版,我说比赛的时候怎么那......
  • Codeforces Round 882 div.2 A
    Smiling&Weeping----总有人间一两风,填我十万八千梦A.TheManwhobecameaGodtimelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutput Kars istiredand......
  • QSqlDatabasePrivate::removeDatabase: connection ‘myConnection’ is still in use
    1.解决QSqlDatabasePrivate::removeDatabase:connection‘myConnection’isstillinuse,allquerieswillceasetowork的问题该问题主要是因为没有关闭之前的数据库连接,然后又需要创建新的数据库连接导致。解决方案:必须释放该连接的所有查询,即删除所有与该连接有关的quer......
  • 跟着Environmental Research学作图:R语言ggplot2堆积柱形图叠加折线图(1)
    跟着EnvironmentalResearch学作图:R语言ggplot2堆积柱形图叠加折线图(1)简介在环境研究领域,数据可视化是非常重要的工具,可以帮助我们更好地理解和解释复杂的数据。本篇文章将教会你如何使用R语言中的ggplot2包创建堆积柱形图叠加折线图,以展示不同组别之间的关系和趋势。环境设......
  • 对UION结果进行排序 MYSQL
    对UION结果进行排序MYSQL在MySQL中,可以使用UNION操作符将多个SELECT语句的结果合并成一个结果集。但是,UNION操作符的结果默认是按照表达式顺序进行排序的。如果我们想要对UNION的结果进行排序,可以使用子查询或者别名的方式来实现。子查询排序子查询是将一个SELECT语句嵌套在另......
  • 电脑安装两个MySQL数据库怎么查看指定
    电脑安装两个MySQL数据库的问题解决方案在某些情况下,我们可能需要在一台电脑上安装并运行两个独立的MySQL数据库实例。这可能是因为需要同时管理不同的项目,或者进行开发和测试等工作。本文将介绍如何在一台电脑上安装并运行两个MySQL数据库,并演示如何查看指定的数据库。安装和配......