canal工作原理

canal工作原理

mysql的主从复制原理

  1. MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  2. MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  3. MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
    在这里插入图片描述

canal工作原理

  1. canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  2. MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  3. canal 解析 binary log 对象(原始为 byte 流)
    在这里插入图片描述

mysql的binlog

什么binlog

MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

一般来说开启二进制日志大概会有1%的性能损耗。二进制有两个最重要的使用场景:

  1. MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
  2. 自然就是数据恢复了,通过使用mysqlbinlog工具来使恢复数据。

二进制日志包括/两类文件:A: 二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制的文件,B:二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

开启binlog

默认情况下, mysql是没有开启binlog的, 需要手动开启.
开启步骤:

  1. 找到mysql的配置文件:my.cnf. 大部分的mysql版本默认在:/etc/my.cnf.如果没有找到, 则可以通过下面的命令查找:
sudo find / -name my.cnf
  1. 修改my.cnf. 在my.cnf文件中增加如下内容:
server-id= 1
log-bin=mysql-bin
binlog_format=row
binlog-do-db=gmall
配置说明

server-id:
mysql主从复制的时候, 主从之间每个实例必须有独一无二的id

log-bin:
这个表示binlog日志的前缀是mysql-bin ,以后生成的日志文件就是 mysql-bin.123456 的文件后面的数字按顺序生成。 每次mysql重启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。

Binlog_format:
mysql binlog的格式,有三种值,分别是statement, row, mixed

三者区别:
statement:

语句级,binlog会记录每次一执行写操作的语句。
相对row模式节省空间,但是可能产生不一致性,比如
update tt set create_date=now()
如果用binlog日志进行恢复,由于执行时间不同可能产生的数据就不同。
优点: 节省空间
缺点: 有可能造成数据不一致。

row:

行级, binlog会记录每次操作后每行记录的变化。
优点:保持数据的绝对一致性。因为不管sql是什么,引用了什么函数,
他只记录执行后的效果。
缺点:占用较大空间

mixed:

statement的升级版,一定程度上解决了,因为一些情况而造成的statement
模式不一致问题
在某些情况下譬如:
当函数中包含 UUID() 时, 包含 AUTO_INCREMENT 字段的表被
更新时;执行 INSERT DELAYED 语句时;用 UDF 时;会按照
ROW的方式进行处理
优点:节省空间,同时兼顾了一定的一致性。
缺点:还有些极个别情况依旧会造成不一致,另外statement和mixed对于需要对binlog的监控的情况都不方便。

由于canal不是数据库, 是不能执行sql语句的, 所以, 只能设置为row格式

binlog-do-db:
设置把哪个database的变化写入到binlog, 如果不配置, 则所有database的变化都会写入到binlog.
如果要设置多个数据库需要, 需要写多次这个参数的配置

binlog-do-db = a
binlog-do-db = b

检测配置是否成功
A: 重启mysql服务器.

sudo systemctl restart mysqld

B: 启动msyql客户端, 执行sql语句:

show variables like'%log_bin%'

在这里插入图片描述

C: 也可以去对应的目录下查看是否生成log_bin文件
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Elasticsearch(ES) Elasticsearch是基于Lucene的搜索引擎。它是一个分布式的、高性能的全文搜索引擎,可以快速地存储、搜索和分析海量数据。其主要工作原理是将数据分片、存储并建立倒排索引,然后将数据分布在不同的节点上进行分布式处理和查询。它支持复杂的搜索和聚合操作,并且可以与多种数据源集成。 2. Message Queue(MQ) 消息队列(Message Queue)是一种用于异步通信的技术。它将消息发送者和消息接收者解耦,以提高系统的可靠性和可伸缩性。其主要工作原理是将消息发送到队列中,然后让消费者从队列中获取消息并进行处理。消息队列可以实现消息的持久化、顺序性、重复消费等功能,常用的消息队列有Kafka、RabbitMQ等。 3. Canal Canal是一个基于MySQL数据库数据同步工具,它可以将MySQL数据库的增量日志解析成增量SQL语句,并将这些SQL语句发送到消息队列中。其主要工作原理是通过MySQLbinlog实现增量日志解析,将解析后的数据发送给Kafka等消息队列,从而实现数据同步。Canal可以用于数据备份、数据同步数据分析等场景。 4. Nacos Nacos是一个分布式的服务发现和配置管理平台。它可以管理微服务的注册、发现、配置和元数据等信息,并提供了健康检查、流量管理、路由等功能。其主要工作原理是将服务实例信息注册到Nacos中心,客户端通过Nacos中心获取服务实例信息并进行调用。Nacos支持多种协议和数据格式,可以与多种微服务框架集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值