0. Canal 的安装和使用

news2024/11/17 12:30:57

我看过一场风景,后来我才知道,那是我人生中最美的一段时光。
我爱的人,爱我的人,都能度过这场新型感冒,那该多好。

Canal 的官网: https://github.com/alibaba/canal

Canal 能干什么

为什么出现 Canal

Canal 是阿里巴巴的 MySql binlog 增量订阅 /消费的组件.

canal0.jpg

canal, 为水道,管道, 主要用途是 基于 Mysql 数据增量日志解析, 提供增量数据订阅和消费.

早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。
从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
基于日志增量订阅和消费的业务包括:

  1. 数据库镜像
  2. 数据库实时备份
  3. 索引构建和实时维护 (拆分异构索引,倒排索引)
  4. 业务 cache 缓存刷新
  5. 带业务逻辑的增量数据处理 (canal 主要用这个)

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

简单来说,就是监控数据库表数据的实时变动,及时反映到业务上,业务上进行处理。

工作原理

主从同步 / 主从复制原理

canal1.jpg

  1. Mysql Master 主库 将数据变更写入到二进制日志文件里面 (binary log , 其中记录叫做 二进制日志事件 binary log events, 可以通过 show binlog events 进行查看)
  2. Mysql slave 将 master 的 binary log events 拷贝到它的中继日志 (relay log)
  3. slave 重放 relay log 中的事件,将数据变更成 它自己的数据。

canal 的工作原理

  1. canal 模拟 Mysql slave 的交互协议,伪装自己成为 slave, 即变成从库, 向 mysql master 主库发送 dump 协议
  2. master 收到 dump 请求, 开始推送 binary log 给 slave (这里给 canal)
  3. canal 解析 binary log 对象, 进行封装,变成 canal 提供的实体对象 (原始为 byte 流)

Canal 使用前准备

主数据库 master 开启日志处理

在 Mysql 安装目录下 my.ini 或者 my.conf 配置文件下 添加以下配置:

[mysqld]
// 其它 .....
# 添加日志的处理
log-bin=mysql-bin
sync_binlog=1
binlog-format=Row
#监听同步哪些数据库  
binlog-do-db=springboot
# 服务器的id ,唯一
server-id=100
#屏蔽系统库同步 
binlog-ignore-db=mysql 
binlog-ignore-db=information_schema 
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

binlog-format: 配置成 row .
关于 binlog-format 的配置,可以看文章: https://www.cnblogs.com/langtianya/p/5504774.html
binlog-do-db: 监听的服务器,这儿只监听 springboot 服务器。

重启 Mysql 服务器。
检查一下,配置的是否正确。
show variables like ‘log_bin’

查看 binlog 日志文件列表
show binary logs;

查看当前正在写入的 binlog 文件:
show master status;

主数据源配置的,没有问题。

一般 canal 同步的时候,会专门创建 canal 同步的 相关账号,授权 同步相关的权限。 专账号专用

-- 刷新权限
 flush privileges;
 -- 创建用户
 create user 'canal'@'%' identified by 'canal';
 -- 授权 *.*表示所有库
 grant SELECT,REPLICATION SLAVE,REPLICATION CLIENT on *.* to 'canal'@'%' identified by 'canal';
  -- 再次刷新权限
 flush privileges;

安装配置 Canal

去官网下载: https://github.com/alibaba/canal/releases
下载 v 1.1.5.tar.gz 版本


也可以百度云下载:

链接:https://pan.baidu.com/s/1d2mztfEDWTe1XGN8e1sS_A提取码:yyds

解压后,配置文件:

修改 conf/example/instance.properties 配置文件:

#################################################
## mysql serverId , v1.0.26+ will autoGen
# todo 放开,配置一个固定的信息 ,默认的 11111
canal.instance.mysql.slaveId=11111

# enable gtid use true/false
canal.instance.gtidon=false

# todo position info   数据库
canal.instance.master.address=127.0.0.1:3306
# mysql 主库链接时起始的 binlog 文件    通过 show master status 来获取到
canal.instance.master.journal.name=mysql-bin.000013
# 配置偏移量  
canal.instance.master.position=154
canal.instance.master.timestamp=
canal.instance.master.gtid=

# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal

#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# username/password
# todo 配置用户名和密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# table regex
# todo 配置监听的表信息   默认是: .*\\..* , 全部的库,全部的表。   配置某个库, 为  springboot.*, 配置具体的一个表。 springboot.user,springboot.student
canal.instance.filter.regex=springboot.user
# table black regex
canal.instance.filter.black.regex=mysql\\.slave_.*
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch

# mq config
canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6
#################################################

bin/start.bat 文件 启动

1.1.4 版本之前可能会报错。
修改 startup.bat 脚本:

再重启启动即可。

这个服务器,必须要全程启动中.

其中 springboot.user 的约束 ddl

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) DEFAULT NULL,
  `sex` varchar(20) DEFAULT NULL,
  `age` int(6) DEFAULT NULL,
  `description` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

Canal 服务器配置成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ 数据结构 -- 手撕排序算法第二篇 ] 冒泡排序

文章目录前言一、常见的排序算法二、冒泡排序的实现2.1 基本思想2.2 单趟冒泡排序2.2.1 思路分析2.2.2 单趟代码实现三、冒泡排序的实现五、冒泡排序的时间复杂度5.1 最坏情况5.2 最好情况优化六、冒泡排序的特性总结总结前言 手撕排序算法第一篇:插入排序&#xf…

截止12.17 bitahub踩坑,mask无数次更改,lama代码的那些痛,羊了个羊,imwrite不生效

前面那篇跑出了STCN,倒是STCN熟悉了很多了 对bitahub,需要注意一个问题 要进ssh请用debug卡!!!! 要进ssh请用debug卡!!!! 要进ssh请用debug卡!&…

AQS-semaphoreCyclicBarrierCountDownLatch源码学习

上文:jdk-BlockingQueue源码学习源码下载:https://gitee.com/hong99/jdk8semaphore&cyclicbarrier&CountDownLatch的介绍semaphore基础功能semaphore简称信号量,主要用于控制访问特定资源的线程数目,底层用的是AQS的状记s…

[附源码]Python计算机毕业设计Django万佳商城管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Volatile和高速缓存的关系

“volatile关键字有什么用?” 1 常见理解错误 把volatile当成一种锁机制,认为给变量加上了volatile,就好像是给函数加sychronized,不同的线程对于特定变量的访问会去加锁把volatile当成一种原子化的操作机制,认为加了…

Dubbo 3 Dubbo 快速入门 3.1 Zookeeper 安装

Dubbo 【黑马程序员Dubbo快速入门,Java分布式框架dubbo教程】 3 Dubbo 快速入门 文章目录Dubbo3 Dubbo 快速入门3.1 Zookeeper 安装3.1.1 Zookeeper 安装3.1 Zookeeper 安装 3.1.1 Zookeeper 安装 在Dubbo 架构图中 Dubbo官方推荐使用Zookeeper作为注册中心【Re…

【学习总结】注解和元注解

目录 一、注解 1、注解与XML区别 2、注解的用途 3、注解的三种分类 二、什么是元注解? 1、元注解有几种? 1、Retention存活时间 2、Target使用范围 3、Document保存到javadoc 4、Inherited注解继承 三、如何实现的注解 四、问提: …

为解决BERT模型对语料中低频词的不敏感性

来源:投稿 作者:COLDR 编辑:学姐 (内容如有错漏,可在评论区指出) 摘要 Dict-BERT为了解决BERT模型对语料中低频词(rare words)的不敏感性,通过在预训练中加入低频词词典…

人工智能/计算机期刊会议测评(持续更新...更新速度取决于我水论文的速度...)

IEEE Transactions on Knowledge and Data Engineering 中科院2区,CCF A。你为什么是二区????????????做梦都想中的刊。 …

5天带你读完《Effective Java》(二)

《Effective Java》是Java开发领域无可争议的经典之作,连Java之父James Gosling都说: “如果说我需要一本Java编程的书,那就是它了”。它为Java程序员提供了90个富有价值的编程准则,适合对Java开发有一定经验想要继续深入的程序员…

Servlet 原来是这个玩意、看完恍然大悟

1. 什么是 Servlet? 先让时间回到 25 年前,我国刚刚接入互联网不到两年时间。那时候的电脑长这个样子: 当时的网页技术还不是很发达,大家打开浏览器只能浏览一些静态的页面,例如图片、文本信息等。 随着时间的发展&a…

[附源码]Python计算机毕业设计Django社区生活废品回收APP

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

idea配置tomcat日志中文乱码,且修改后idea正常,但cmd窗口任然中文乱码解决方法

idea日志乱码问题的原因是tomcat的日志配置文件有两行有问题需要删掉,cmd乱码是Windows系统cmd窗口默认不是utf-8 首先解决idea中tomcat的日志乱码问题,在idea中进行如下的配置 Trans...........可以不勾选,它的作用是用选定的字符集把项目的…

[附源码]Python计算机毕业设计Django室内设计类网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

2023面试专题:JAVA基础

ArrayList和LinkedList有哪些区别 ArrayList扩容机制: ArrayList() 会使用长度为零的数组ArrayList(int initialCapacity) 会使用指定容量的数组public ArrayList(Collection<? extends E> c) 会使用 c 的大小作为数组容量add(Object o) 首次扩容为 10&#xff0c;再次…

【OpenCV】透视变换应用——实现鸟瞰图与贴图

透视变换是3D转换&#xff0c;透视变换的本质是将图像投影到一个新的视平面&#xff1b; 据此&#xff0c;我们可以使用透视变化来实现鸟瞰图和图形贴图的效果&#xff1b; 一、鸟瞰图 实现前&#xff1a; 实现效果&#xff1a; 1.准备一个空的mat对象 用于保存转换后的图 M…

asp.net mvc+elementUI 实现增删改查

最开始心想着一直都是前端玩这些玩意&#xff0c;个人虽然不是纯前端。好歹做为一个.net全栈开发多年&#xff0c;我就不太想用node去搭建&#xff0c;那么试试吧&#xff0c;总归不是那么几个css和js的文件引用&#xff0c;如果对vue.js不太熟悉&#xff0c;最好先去看看。 那…

智能家居创意DIY之智能触摸面板开关

触摸开关&#xff0c;即通过触摸方式控制的墙壁开关&#xff0c;其感官场景如同我们的触屏手机&#xff0c;只需手指轻轻一点即可达到控制电器的目的&#xff0c;随着人们生活品质的提高&#xff0c;触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

springboot入门案例

今天写一个springboot入门案例&#xff0c;接下来我将带大家走进springboot第一课的案例。如果有问题&#xff0c;望大家指正。 目录 1. 简介 2. 开发示例 2.1 创建springboot工程 3. 启动类 4. 常用注解 5. springboot配置文件 6. 开发一个controller 1. 简介 Spring …

大一学生WEB前端静态网页——旅游网页设计与实现(15页面)

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…