数据同步工具otter(一)谈谈binlog和canal

Mycat + canal + otter 一、内容介绍 一.mycat Mycat是一个开源的数据库中间件,是一个大数据库集群。 支持事务、ACID、可以替代MySQL的加强版数据库。 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server mycat监控支持 支持对mycat、mysql性能监控 支持对mycat的jvm内存提供监控服务 支持对线程的监控 支持对操作系统CPU、内存、磁盘...... 阅读详情

数据同步工具otter(一)谈谈binlog和canal

之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用。

Otter是基于cannal开源的,canal又是基于mysql binlog的产品。我们就从binlog说起

binlog

mysql的binlog日志是被设计用来作主从备份或者数据恢复用的。binlog是The Binary Log的简称,意思就是二进制的日志文件(可以点击https://dev.mysql.com/doc/refman/5.6/en/binary-log.html了解)。binlog中以二进制的形式记录了数据库的"events(事件)"即数据库结构及表数据发生的变化。以下这张图就反应了主从库之间使用binlog进行同步的过程:

mysql提供了三种不同的binlog记录形式:

  1. STATEMENT 语句模式(默认):日志中记录了所有的执行的sql语句,从库在执行的时候,重新执行相应sql即可。但是因为不记录语句执行的上下文,在从库执行某些语句(比如存储过程)的时候,有些语句不一定能成功执行导致丢失数据
  2. ROW 行模式:日志中记录每一行每个字段的变化,能清楚记录每行数据的变化历史,主从丢失数据的情况大大降低,但是缺点是会产生大量的binlog占用存储空间
  3. MIX 混合模式:在 Mixed 模式下,MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,也就是在 statement 和 row 之间选择一种。比如遇到表结构变更的时候就会以 statement 模式来记录,如果 SQL 语句确实就是 update 或者 delete 等修改数据的语句,那么还是会记录所有行的变更。目前这种模式其实就是由mysql来选择到底用哪种模式记录,可以点此了解https://dev.mysql.com/doc/refman/5.6/en/binary-log-mixed.html

你可以通过以下命令查看自己的mysql的binlog情况:

//查看自己的mysql是否打开了binlog选项
show variables like 'log_bin'
//查看binlog的格式
show variables like 'binlog_format'

//获取binlog列表
show binary logs
//或者
show master logs

//查看正在写入的binlog
show master status

上文中说过binlog中是以event的形式记录日志的,所以你可以通过事件命令查看具体的日志内容及位置

SHOW BINLOG EVENTS
   [IN 'log_name']
   [FROM pos]
   [LIMIT [offset,] row_count]

比如:SHOW BINLOG EVENTS LIMIT 1

  • Log_name:日志文件名
  • Pos:事件起始位置
  • Event_type:事件类型
  • End_log_pos结束位置
mysqlbinlog工具

如果binlog的格式是STATEMENT,以上show binlog event的方式是可以看到sql语句的,但是如果row模式的话,没法看到,只能通过mysqlbinlog工具进行查看,mysqlbinlog也是mysql dba常用的备份恢复数据的工具。

该工具需要登录到数据库主机使用

mysqlbinlog [options] log_file 

具体的选项参考:https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html

如果你没有数据库主机的登录权限,可以选择使用远程导出的方式将远端的binlog导出。

# mysqlbinlog -u用户名 -p密码 -h主机地址 -P端口号 --read-from-remote-server mysql-bin.000001 --base64-output=decode-rows -v > 1.txt

返回数据如下,黑色背景部分为一个事件的完整日志,红框标记则为执行的SQL

Canal

canal(https://github.com/alibaba/canal)是阿里出品基于binlog的一款订阅消费组件,简单来说也就是它可以订阅mysql的binlog,并进行读取消费,以达到数据同步等目的。相较于传统的触发器同步数据模式,基于binlog的数据同步方式无疑灵活性、功能性更强。

原理如下:

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  3. canal解析binary log对象(原始为byte流)
canal服务端:

这张图表示了canal服务端的模块划分

  • server代表一个canal运行实例,对应于一个jvm
  • instance对应于一个数据队列(也就是一个数据库的binlog订阅者) (1个server对应1…n个instance)

instance下的子模块:

  • eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
  • eventSink (Parser和Store链接器,进行数据过滤,加工,分发的工作)
  • eventStore (数据存储)
  • metaManager (增量订阅&消费信息管理器)

canal客户端:

canal客户端可以向服务器端进行消息订阅消费,服务器端的解析后的数据存在eventStore中,而客户端的工作就是从eventStore中订阅消费。

好了,我们已经对canal大概了解了,下一篇文档我们进入我们的正题otter

使用canal实现数据实时同步 canal 在实现缓存和数据库数据一致性的时候,我们会用到延时双删等同步策略,但是在删除缓存失败时,会再次出现缓存和数据库不一致的问题。为了应对删除缓存失败的情况,可以通过回溯数据库日志文件,提供一个保障的重试机制即可。 流程如下图所示: (1)更新数据库数据 (2)数据库会将操作信息写入binlog日志当中 (3)订阅程序提取出所需要的数据以及key (4)另起一段非业务代码,获得该信息 (5)尝试删除缓存操作,发现删除失败 (6)将这些信息发送至消息队列 (7)重新从消息队列中获得该数据,重试操作。 阅读详情

相关推荐

【源码】canal和otter的高可靠性分析

一般来说,我们对于数据库最主要的要求就是:数据不丢。不管是主从复制,还是使用类似otter+canal这样的数据库同步方案,我们最基本的需求是,在数据不丢失的前提下,尽可能的保证系统的高可用,也就是在某个节点挂掉,或者数据库发生主从切换等情况下,我们的数据同步系统依然能够发挥它的作用–数据同步。本文讨论的场景是数据库发生主从切换,本文将从源码的角度,来看看otter和canal是如何保证高可用和高可

1012

canal

canal MySQL二进制文件 作用:1.主从复制 2.数据恢复 类别:1.二进制日志索引文件(文件后缀.index)记录所有操作 2.二进制日志文件记录不含查询的语句事件 MySQL二进制文件binlog 分类:1.statement 语句级别 记录每一次语句 优点:节省空间 缺点:有可能造成数据不一致性(可能使用时间函数随机函数造成数据不一致) 2.row 行级别 记录每一次结果 优点数据绝对一致性 缺点占用空间(一条sql影响多条数据改变) 3.mixed 默认走statement 特殊情况

ct1104的博客 888

深入浅出Otter与Canal.pdf

深入浅出Otter与Canal.pdf深入浅出Otter与Canal.pdf深入浅出Otter与Canal.pdf深入浅出Otter与Canal.pdf

Canal原理及其使用

什么是Canal? Canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 工作原理 Canal是模拟Mysql主从复制原理。将自己伪装成Slave。向主库发起dump协议,拿到bin_log日志,解析之后对数据做相关操作 Mysql主从复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 sh

十四 丶 5515

电荷灵敏前置放大器噪声优化策略:从理论到实践

本文深入探讨了电荷灵敏前置放大器的噪声优化策略,从理论分析到实践应用。文章系统解析了并联电流噪声与串联电压噪声的来源,并引入噪声等效原理与“冷电容”模型作为统一分析工具。通过详解a、b、c三类噪声的频谱特性,为实战优化提供了清晰指导。核心策略包括选用高跨导、低漏电流FET,优化静态工作点,采用共源-共基结构,精心设计反馈网络,以及实施严格的PCB布局、屏蔽与接地,旨在全面提升微弱信号检测系统的信噪比。

weixin_29292431的博客 466

告别蓝牙音质妥协:用ESP32和PCM5102搭建WiFi无损音频播放器(附完整代码)

本文详细介绍了如何利用ESP32微控制器和PCM5102 DAC芯片构建一套完整的WiFi无损音频流媒体系统,彻底摆脱蓝牙协议的音质束缚。从硬件原理到软件实现,包括核心器件选型、电路设计、I2S音频驱动实现以及系统优化方案,帮助音频发烧友实现高保真无线音频传输。

weixin_30733003的博客 541

中间件---Binlog传输同步---Otter和Canal

Otter 1. Otter是什么 Ottter是由阿里爸爸开源的一个数据同步产品,它的最初的目的是为了解决跨国异地机房双A架构,两边可写的场景,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了Otter。 Otter基于数据库增量日志解析,支持mysql/oracle数据库进行同步,在最新的v4.2.13已经支持mysql5.7以及阿里...

FeelTouch Labs 3717

ArcGIS实战:利用IDW反距离权重法实现气象数据的批量空间插值

本文详细介绍了如何利用ArcGIS中的IDW反距离权重法实现气象数据的批量空间插值。通过实战案例和脚本示例,展示了IDW插值在气象数据分析中的高效应用,包括算法原理、参数调优、批处理自动化及常见问题解决方案,帮助用户快速生成连续分布的气象地图。

weixin_29051149的博客 239

缓存同步canal实现(订阅binlog)

对于实体类,Canal会将改变的数据注入Item,如果属性名和数据库字段名不一致,需要用注解标明。重启docker,/mysql/data目录下会出现mysql-bin.000001。查看主库的状态(如果从库字段position小于主库,那么就有新的数据要获取了)当canal监听到binlog发生变化,会通知canal客户端。2、基于canal实现缓存同步。1、基于mq实现缓存同步。

qq_46624276的博客 2398

空频、空时、空域、时域、频域抗干扰介绍

1、时域抗干扰:对时间域序列进行滤波,滤波系数h(n),采样序列不断进行输入与滤波系数卷积计算,得到响应输出;例如常用的FIR和IIR滤波器。 对于多窄带干扰噪声源和连续波干扰源有较好的处理效果,还可以解决多径问题; 可以通过在接收机前端处理中增加一个嵌入式块实现; 2、频域抗干扰:接收机不容易受到相对于接收机频带以外的强功率干扰; 通常为带通滤波和阻带滤波, 适用于窄带干扰噪声源,连续波干扰源以及较强的频带外干扰噪声源, 3、空域抗干扰:通过多个自适应天线按照特定组合成天线阵列,波束成形,针对

qq_43517907的博客 7299

如何在win11中用双硬盘或移动硬盘装Ubuntu 20.04 双系统

win11 安装双系统

qq_42817360的博客 5137

配置binlog并使用Canal实现Mysql定制同步数据的功能

binlog是一个二进制文件,它保存在磁盘中,是用来记录数据库表结构变更、表数据修改的二进制日志。其实除了数据复制外,它还可以实现数据恢复、增量备份等功能。首先需要确保mysql服务已经启用了binloglog_bin = /var/log/mysql/mysql-bin.log #指定binlog路径 binlog-format = ROW在配置文件中加入了log_bin配置项后,表示启用了binlog。

明生的博客 4015

12、每日卫星任务规划问题的不同公式

本文探讨了卫星任务规划问题的多种数学公式表示方法,包括传统的整数线性规划(ILP)模型、改进的基于路径的公式、基于集合覆盖的公式以及动态规划公式。通过案例研究比较了不同公式的求解效率和适用场景,并提供了使用Python进行实际求解的操作步骤。最后讨论了进一步优化策略及未来研究方向,旨在为解决卫星任务规划问题提供全面的理论支持和实践指导。

assembly8low的博客 203

otter mysql5.6_数据同步工具otter(一)谈谈binlog和canal

标签:数据同步工具otter(一)谈谈binlog和canal之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用。Otter是基于cannal开源的,canal又是基于mysql binlog的产品。我们就从binlog说起binlogmysql的binlog日志是被设计用来作主从备份或者数据恢复用的。binlog是The Bin...

weixin_34163588的博客 262

Swin Transformer 类可视化(grad CAM)

完整代码 from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM from pytorch_grad_cam.utils.image import show_cam_on_image from torchvision.models import resnet50 import glob from demo import parse_option from models i

G果的博客 6637

AI 编程工具面试题(Claude Code、Codex 等)基础篇(一)

文章摘要: 本文整理了20道AI编程工具基础面试题,涵盖Claude Code、Codex CLI、GitHub Copilot等主流工具的核心概念与实操技巧。内容分为工具分类(代码补全/对话式/自主代理)、安装配置(静默部署/API管理)、关键命令(上下文加载/token监控)、调试策略(错误处理/提示优化)及对比选型(Tabnine vs Copilot)。重点解析了终端工具与模型能力的差异,并针对实际场景(如长代码生成/私有化部署)提供解决方案。附追问环节,深入探讨工具边界问题(如上下文溢出处理)和成

篮球界最会写bug的人;程序猿中打球最菜的人。 333

mysql binlog查看工具_数据同步工具otter(一)谈谈binlog和canal

之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用。Otter是基于cannal开源的,canal又是基于mysql binlog的产品。我们就从binlog说起binlogmysql的binlog日志是被设计用来作主从备份或者数据恢复用的。binlog是The Binary Log的简称,意思就是二进制的日志文件(可以点击htt...

weixin_39714849的博客 525

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

mysql binlog 同步组件_数据同步工具otter(一)谈谈binlog和canal

之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用。Otter是基于cannal开源的,canal又是基于mysql binlog的产品。我们就从binlog说起binlogmysql的binlog日志是被设计用来作主从备份或者数据恢复用的。binlog是The Binary Log的简称,意思就是二进制的日志文件(可以点击htt...

weixin_28756347的博客 569

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

log解析工具 px4_数据同步工具otter(一)谈谈binlog和canal

之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用。Otter是基于cannal开源的,canal又是基于mysql binlog的产品。我们就从binlog说起binlogmysql的binlog日志是被设计用来作主从备份或者数据恢复用的。binlog是The Binary Log的简称,意思就是二进制的日志文件(可以点击htt...

weixin_36205997的博客 215

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Otter与Canal工具对比介绍

Otter和Canal是两个不同的工具,分别用于不同的场景。

一个写了10年bug的程序员日常笔记。 1826

阿里 Otter 数据同步教程

摘要:阿里开源分布式数据同步中间件Otter基于Canal解析数据库binlog,解决数据同步、迁移和分表问题。其核心能力包括单向/双向同步、文件同步、双A同步和数据迁移,性能远超传统主从复制。Otter采用Manager+Node架构,依赖Zookeeper实现分布式调度。本文详细讲解Otter的核心概念、环境搭建(JDK/MySQL/Zookeeper)、Manager与Node的配置启动流程,并通过实战案例指导如何配置同步任务,帮助开发者高效解决企业级数据同步需求。

CharlesYooSky的博客 1286

Canal+Otter实现Mysql数据库数据记录增量备份实践

通过之前对Canal的了解,我们知道Canal实际上只做了日志级别的读取和操作事件的捕获,对于如何将获取到的增量日志保存到目标数据库去,这里单纯地通过Canal来做就需要做很多后续解析的工作,好在阿里都给出了解决方案,那就只Otter。Otter就是来帮助我们让源数据库的数据通过binlog再次写入到目标数据库。 目录 必须弄清楚的两个问题 Canal帮我们做了什么? 我们将用Otter来...

纸上得来终觉浅,绝知此事要躬行 4639

Otter与Canal功能对比

如果你只需要监听 MySQL 变更并推送至消息队列或自定义处理→ 选Canal。如果你需要跨机房数据库双向同步、异地多活、自动冲突解决→ 选Otter(但需评估运维成本)。💡 补充:如今很多团队用构建实时数据管道,替代 Otter 的部分功能,获得更高灵活性。

m0_73582531的博客 467
上一篇: 性能测试入门(三):性能测试工具
下一篇: 近期解决的一些问题
frog4
博客等级 码龄18年 56粉丝 42原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值