Canal-1-安装-代码

news2024/11/13 23:18:06

1总体简介

1 mysql需要开启binlog 

 binlog分类

1.1)statement:

语句级别,binlog 会记录每一次执行写操作的语句。相对于row模式节省空间,但是会产生数据不一致性,例如:update aa set create_time=new(); 如果用binlog日志进行恢复,由于执行时间不同可能产生的数据就不同。

   优点:节省空间

  缺点:可能造成数据不一致。(因为只记录sql语句,万一 id>5的个数不一样呢? 随机数函数等等情况)

1.2)row:

行级 binlog会记录每次操作后每行记录的变化。

    优点:保持数据的绝对一致性。因为不管sql是什么,引用了什么函数,他只记录执行后的效果。

缺点:占用较大空间

1.3)mixed:

statement升级版,在一定程度上解决了statement模式数据不一致问题。例如:函数中包含UUID(),包含AUTO_INCREMENT字段被更新时,执行 insert ,delayed语句时,会按照row方式,进行处理。

优点:节省空间,同时兼顾一定的一致性

缺点:还是会造成数据不一致情况

2 Canal介绍

Canal:伪装成Slave,假装从Master复制数据

2 安装开始

2.1 mysql配置文件编辑

编辑mysql配置文件(看你安装方式)

vim /etc/my.cnf
    [mysqld]
    #开启日志 
    log-bin = mysql-bin
    #binlog级别 (statement:只记操作命令,有可能导致主从数据不一致,row:数据一致 mixed:)
    binlog_format=row
    #设置服务id,主从不能一致  ,一般设置为ip最后一段
    server-id = 19 
   
 
   #设置需要同步的数据库   
    binlog-do-db=aa_db 
    #屏蔽系统库同步 
    binlog-ignore-db=mysql 
    binlog-ignore-db=bb_db 
 

3 重启

systemctl restart mysqld

4登录主库

mysql -uroot -p

5 创建用户

降低密码强度(不建议使用)

SELECT @@VALIDATE_PASSWORD_POLICY;
set global validate_password_policy = 0;
set global validate_password_length=1;

6  授权主从复制专用账号(给从库复制数据使用的)

GRANT REPLICATION SLAVE ON *.* TO canal'@'%' IDENTIFIED BY 'canal'; 

7  刷新权限

flush privileges;

2.2 Canal安装

下载安装包

Releases · alibaba/canal · GitHub

1解压

tar -zxvf canal.deployer-1.1.6.tar.gz -C /usr/local/canal/

2编辑配置文件

 example:一个mysql实例,可以有多个

cd usr/local/canal/conf
vim canal.properties

  我们不需要直接发送mq所以选择tcp。异步同步数据系列(canal+mq)

canal.properties文件

# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ 
canal.serverMode = tcp

# 默认的实例,可以配置多个,同时可以监控多个mysql服务。多个用逗号隔开
canal.destinations = example

  instance.properties 编辑

 vim conf/example/instance.properties
 #默认注释的 放开要  不要和主库重复了 slaveId号
 canal.instance.mysql.slaveId=0

# mysql主库的连接地址
canal.instance.master.address=192.168.135.128:3306
# mysql主库自己创建的同步数据的账号密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

开通端口号

firewall-cmd --permanent --add-port=11111/tcp
firewall-cmd --reload

启动

./startup.sh

查看是否连接数据成功

cd /usr/local/canal/logs/example
tail -n 1000 -f example.log

3 代码使用

3.1 代码

        <dependency>
            <groupId>com.xpand</groupId>
            <artifactId>starter-canal</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
canal:
  client:
    instances:
      example:
        host: 192.168.135.128
        port: 11111
        batchSize: 100
@EnableCanalClient

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.CanalEventListener;
import com.xpand.starter.canal.annotation.ListenPoint;

/**
 * @创建人 赵伟
 * @创建时间 2022/12/10
 * @描述
 */
@CanalEventListener
public class BusinessListener {
    /**
     * destination = "example" mysql实例(默认:example)可以不配置
     * schema:库名
     * table:表名
     * eventType:CanalEntry.EventType.INSERT,DELETE,UPDATE。 配置了哪个他只接收哪个类型
     * @param eventType 当前操作数据库的类型
     * @param rowData   当前操作数据库的数据
     */
    @ListenPoint(destination = "example",schema = "db1", table = "t_order")
    public void listenerOrder(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
       //1新增数据: eventType:INSERT , BeforeColumnsList 将会是空
       //2 删除数据 eventType:DELETE , AfterColumnsList  将会是空
       //3 更新数据 eventType:UPDATE, BeforeColumnsList 将是旧数据   AfterColumnsList 将是新数据
       // 没有查询类型
        System.out.println("订单表数据发生改变");
        System.out.println("eventType:"+eventType);
        //获取改变之前的数据
        rowData.getBeforeColumnsList().forEach((c) ->
            System.out.println("改变前的数据:" + c.getName() + "::" + c.getValue())
        );
        //获取改变之后的数据
        rowData.getAfterColumnsList().forEach((c) ->
            System.out.println("改变之后的数据:" + c.getName() + "::" + c.getValue())

        );
    }
}

3.2 坐标安装

 https://github.com/chenqian56131/spring-boot-starter-cana

mvn install

 直接就打到了你配置好的仓库位置

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

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

相关文章

Java学习笔记7.2.2 事件处理 - Swing常用事件

文章目录零、本讲学习目标一、Swing常用事件二、窗体事件&#xff08;一&#xff09;窗体事件概述&#xff08;二&#xff09;窗体事件类API概述&#xff08;三&#xff09;窗体事件使用方法&#xff08;四&#xff09;窗体事件案例演示三、鼠标事件&#xff08;一&#xff09;…

【进阶】C语言第一课:深度剖析数据在内存中的存储

目录 前言&#xff1a; 一、数据类型详细介绍&#xff1a; 1.相关知识回顾&#xff1a; 2.类型的基本归类&#xff1a; 整型家族&#xff1a; 浮点型家族&#xff1a; 构造类型&#xff1a; 指针类型&#xff1a; 空类型&#xff1a; 二、整形在内存中的存储&#xff1a; …

PS 更换证件照背景色

哈喽&#xff0c;各位小伙伴&#xff01;今天我们来学习一下如何更换证件照背景色&#xff1f; 常见证件照 常见的证件照一般有白色、蓝色和红色三种样式&#xff0c;我们拍证件照一般只拍一种&#xff0c;为了节省支出&#xff0c;其他两种颜色就需要我们自己调色处理了 蓝…

计算机毕业设计ssm+vue基本微信小程序的客户资源管理系统

项目介绍 基于Vue技术的客户资源管理系统是对客户的一些资料进行有效的管理, 它将企业的经营管理以客户为中心,通过系统管理员就可以轻松有效的对客户的信息进行操作管理。从而实现客户资料的一致性、准确性,查询的及时性等等。 该系统提供了客户管理、系统管理、合同管理、…

Java学习笔记7.1.2 初探Swing世界 - 布局管理器

文章目录零、本讲学习目标一、布局管理器二、边框布局管理器&#xff08;BorderLayout&#xff09;&#xff08;一&#xff09;边框布局管理器概述&#xff08;二&#xff09;边框布局管理器API文档&#xff08;三&#xff09;边框布局管理器使用方法&#xff08;四&#xff09…

Java项目:SSM在线物流综合管理平台系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能 管理员登录,管理员管理,合作公司管理,车型信息,货物基本…

MongoDB 数据库安装详细教程

1. MongoDB 下载流程 &#xff08;急用&#xff09;直接抵达&#xff1a;Download MongoDB Community Server | MongoDB 打开MongoDB官网&#xff1a;MongoDB (点击进入) 下载完成之后双击打开会出现如下界面&#xff1a; 2. MongoDB 环境配置 通过刚刚的安装知道了MongoDB Se…

人工智能--决策树原理与代码实现、特征提取、回归决策树

决策树&#xff1a;本质就是一个拥有多个判断节点的树 1&#xff0c;熵 系统越有序&#xff0c;集中&#xff0c;熵值越低&#xff1b;系统越混乱&#xff0c;越分散&#xff0c;熵值越高 在这里的计算中&#xff0c;log2记为1&#xff0c;通常以2为底 2&#xff0c;决策树…

Matlab|基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

SpringBoot中使用Easyexcel实现Excel导入导出功能(三)

导出的数据包含有图片 导出excel表格的数据包含有图片&#xff0c;这种场景比较少。通Easyexcel实现这样的需求&#xff0c;我认为最简便的方法就是使用前面提到的自定义转换器&#xff08;com.alibaba.excel.converters.Converter&#xff09;&#xff1b;假如有这样一个场景&…

mysql学习-- 聚合函数,group by理解与使用

文章目录聚合函数定义常用的聚合函数group by的使用使用单个列进行分组根据多个列进行分组having 的使用作用要求sql 语法sql92语法&#xff1a;sql99语法&#xff1a;sql语句的执行过程&#xff08;进理解为主&#xff09;&#xff1a;聚合函数 定义 作用一组数据&#xff0…

ArcGIS Pro为CAD设置投影

将CAD加载到GIS中&#xff0c;经常出现与GIS数据不能重合的问题。 现在的国空规划的数据基本都是CGCS2000&#xff0c;不重叠的原因不太可能是因为地理坐标系不统一&#xff0c;那极有可能就是ArcGIS的动态投影与CAD的带号没有统一。 如下图&#xff0c;左边为ArcGIS动态投影…

宠物之家网站大学生网页制作教程 学生HTML静态宠物网页设计作业成品 DIV布局简单动物网页制作代码

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

宝塔无法安装fileinfo扩展解决办法(小白篇)

宝塔无法安装fileinfo扩展解决办法&#xff08;小白篇&#xff09; 宝塔无法php安装fileinfo扩展的方法&#xff1a;手动安装 重装系统登录宝塔先不要安装其他软件&#xff0c;先设置swap是Linux下的虚拟内存&#xff0c;设置内存后先安装PHP版本&#xff0c;安装好PHP以后&…

Python实现数据结构与算法(三)链表

链表 为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间&#xff0c;而在进行扩充时又需要进行数据的搬迁&#xff0c;所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间&#xff0c;实现灵活的内存动态管理。 链表的定义 链表&#xf…

html内联框架iframe

<!--iframe内联框架src&#xff1a;地址w-h&#xff1a;宽度高度 --> <iframe src"https://www.4399.com" frameborder"0" width"800px" height"800px"></iframe> 使用name属性&#xff1a; <!--回顾&#xff1…

Allegro如何创建差分对操作指导

Allegro如何创建差分对操作指导 Allegro可以在规则管理器里面进行差分对的创建,让两个网络以差分的形式布线,具体操作如下 打开规则管理器 选择Physical-net-All layers 选择两个需要创建差分对的网络,选择Create-Differential Pair 输入差分对的名字 选择Create 差分…

【MATLAB教程案例58】使用matlab实现yolov2网络目标检测功能与仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.yolo网络理论概述

Python画3D足球2

文章目录前情提要补点球形膨胀前情提要 足球是正五边形和正六边形拼接而成&#xff0c;由此形成的骨架结构&#xff0c;可通过切割正二十面体获得&#xff0c;所以画足球的第一步是画正二十面体&#xff1a;Python绘制正二十面体 在学会绘制正二十面体之后&#xff0c;就可以…

【JavaWeb开发-Servlet】老人言随机语录

需求&#xff1a;点击网页按钮随机显示一句话&#xff1a; 1、内容涵盖&#xff1a; 老人言、励志语录、名言名言、一句情话 2、设计要求&#xff1a; 以老人言为例&#xff1a;①在数据库创建一张表&#xff0c;存放老人言经典语录。字段包括&#xff1a;id、sentence。id为in…