binlog以及Canel

超详细的Canal入门,看这篇就够了! Canal入门看这篇就够了! 阅读详情

一、NDB存储引擎

在介绍binlog之前,需要先了解一下NDB
NDB 存储引擎也叫NDB Cluster 存储引擎,主要用于MySQL Cluster 分布式集群环境。

NDB特点:
• 分布式:分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体数据的一部分
• 支持事务:和Innodb一样,支持事务
• 可与mysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互
• 内存需求量巨大:新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在与内存中

二、Mysql集群

mysql主从备份实现:

  • master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
  • slave将master的binary log events拷贝到它的中继日志(relay log);
  • slave重做中继日志中的事件,将改变反映它自己的数据。
    mysql主从备份实现

如果你能将自己伪装为一个mysql slave,就可以欺骗mysql master给自己推送中继日志,从而实现增量获取事件的功能。阿里开源的canel就是这样做的。

三、Binlog

简单点说:

  • binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录。
  • mysql的binlog数据格式,按照生成的方式,主要分为:statement-based、row-based、mixed。
  • 使用mysqlbinlog解析查看

    一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版)。二进制有两个最重要的使用场景:
    其一:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。 (数据库的主从复制)
    其二:自然就是数据恢复了,通过使用mysqlbinlog工具来使恢复数据。

一、开启binlog日志:
vi编辑打开mysql配置文件

 # vi /usr/local/mysql/etc/my.cnf

在[mysqld] 区块
设置/添加 log-bin=mysql-bin 确认是打开状态(值 mysql-bin 是日志的基本名或前缀名);
重启mysqld服务使配置生效

# pkill mysqld
# /usr/local/mysql/bin/mysqld_safe --user=mysql &

二、也可登录mysql服务器,通过mysql的变量配置表,查看二进制日志是否已开启 单词:variable[ˈvɛriəbəl] 变量
登录服务器

# /usr/local/mysql/bin/mysql -uroot -p123456
mysql> show variables like 'log_%'; 

参数

三、常用binlog日志操作命令

1.查看所有binlog日志列表

    mysql> show master logs;

2.查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值

    mysql> show master status;

3.刷新log日志,自此刻开始产生一个新编号的binlog日志文件

     mysql> flush logs;

注:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;
4.重置(清空)所有binlog日志

     mysql> reset master;

四、查看某个binlog日志内容
这里介绍一种方便的查询命令:

mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

选项解析:
IN ‘log_name’ 指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos 指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset,] 偏移量(不指定就是0)
row_count 查询总条数(不指定就是所有行)

这里写图片描述

四、Canel

canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。

起源:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。

基于日志增量订阅&消费支持的业务:

数据库镜像
数据库实时备份
多级索引 (卖家和买家各自分库索引)
search build
业务cache刷新
价格变化等重要业务消息

原理相对比较简单:

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

这里写图片描述

架构设计
个人理解,数据增量订阅与消费应当有如下几个点:

1、增量订阅和消费模块应当包括binlog日志抓取,binlog日志解析,事件分发过滤(EventSink),存储(EventStore)等主要模块。
2、如果需要确保HA可以采用Zookeeper保存各个子模块的状态,让整个增量订阅和消费模块实现无状态化,当然作为consumer(客户端)的状态也可以保存在zk之中。
3、整体上通过一个Manager System进行集中管理,分配资源。

源码以及项目介绍: https://github.com/alibaba/canal
canal消费端项目开源:Otter(分布式数据库同步系统),地址:https://github.com/alibaba/otter

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步 阅读详情

相关推荐

Java实现读取canal中binlog数据

package we.com.canal; import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import com.alibaba.otter.canal.common.utils.AddressUtils; import co...

杨鑫newlife的专栏 2731

Canel-简介&使用

Canel-简介&使用

S1124654的博客 1万+

Simulink中扩张状态观测器ESO搭建与参数整定实战

扩张状态观测器(ESO)是自抗扰控制(ADRC)的核心,用于估计系统总扰动并实时补偿。其原理是将扰动扩张为状态变量,通过观测器带宽配置增益,实现扰动估计。在Simulink中搭建ESO可直观验证连续与离散域性能,解决参数整定与噪声折中问题。典型应用包括运动控制、电力电子和机器人驱动。本文基于MATLAB/Simulink,详细讲解线性ESO的模型结构、参数计算、离散化实现及常见问题排查,帮助读者从零搭建并调试ESO仿真。

weixin_34116482的博客 225

数据同步神器Canel-day01

背景 关于数据同步的方式有很多种,现在有一个场景需要将mysql数据库的数据主动同步到我们的工程中,并且能再mysql数据库客户端更改某一行的数据也能将数据同步到另一个数据库或者工程中,对于这种场景的使用我们应该怎么去实现呢? 我们从问题点去分析, 同步mysql数据库数据到工程中,这个很简单,那就是工程直接连接数据库直接读取。这不是主动是被动,这样的话那就肯定得数据库主动去触发了。 那这肯定要改动mysql的底层源码,或者mysql又提供接口,既然说到了这里,想想mysql的主从同步机制呢? mas

weixin_40413961的博客 4695

Obsidian + AI 自动知识管理:手把手教程

装完后,在命令面板(Ctrl+P)搜 "Generate Summary",AI 会在当前笔记末尾追加一段摘要。你一个月前写的、现在想快速回顾的笔记长篇笔记(三千字以上)开会记录这类信息密集的内容过度自动化。有人装上插件后,所有笔记都让 AI 打标签、写摘要、找关联。最后笔记库看起来整整齐齐,但全都是 AI 的链接,你自己完全没参与。这样做的后果是什么?你写过的笔记跟你没有"真实连接"。你还是记不住。你还是不知道自己的知识库里有什么。AI 推荐,你决策。

weixin_43571227的博客 749

VS2022离线安装总闪退?可能是这个--noWeb参数没加对(完整参数指南)

本文深入解析了VS2022离线安装过程中常见的闪退问题,指出核心原因往往在于命令行参数使用不当,特别是`--noWeb`参数。文章提供了完整的参数使用指南和实战解决方案,包括证书处理、安装器文件修复及自动化脚本,帮助用户彻底解决离线部署中的验证失败与闪退难题。

weixin_28842269的博客 761

canal - 数据同步工具

在前面Echarts - 实现图表显示中,我们使用了服务调用(统计表中的信息通过调用用户模块服务来获取)获取统计信息,这样耦合度高,效率相对较低,目前有另一种方法,通过实时同步数据库表的方法实现。例如每天统计登录注册人数,我们只需要把用户表同步到统计库中,实现本地统计就可以了,这样效率更高,耦合度更低,canal就是一个数据库同步工具。也可以将mysql数据库中的数据同步到中间件。 canal是阿里巴巴旗下的一款开源项目,纯java开发。基于数据库增量日志解析,提供增量数据订阅与消费。

weixin_44610169的博客 5862

基于ENVI5.3的Landsat条带去除、辐射定标、大气校正

基于ENVI5.3的Landsat条带去除、辐射定标、大气校正坏带修复辐射定标大气校正 坏带修复 1.下载landsat_gapfill插件,放入“安装目录\Exelis\ENVI53\extensions”,重启ENVI 2. 加载拟处理文件(MTL.txt格式) 3.打开landsat_gapfill 4.选择存放位置并命名文件 5.选择处理文件 辐射定标 1.选择工具Radiometric Calibration 2.选择已修复坏带文件 3.修改参数,选择输出位置及命名文件 大气校正 1

u010198950的博客 1万+

阿里同步神器Canal原理+安装+快速使用

最开始听说canal是从mysql与redis双写一致性解决方案,当时并没有太在意,最近由于需要实时同步数据,如果在代码对insert/update/delete做拦截也可以实现,但对代码侵入性太大了,并且后期更改时容易有遗漏,风险太高,这时就又想到了canal,canal的好处在于对业务代码没有侵入,因为是基于监听binlog日志去进行同步数据,这个真的是太爽爽爽了。并且实时性也能做到准实时,这也是canal为什么这么流行,因为确实很多企业会用来做数据同步的方案。

天罡gg的专栏 5965

华为2022数字芯片笔试题

单选 1、ASIC开发流程中,如下环节的先后顺序是? A. RTL-> Synthesis->P&R B. Synthesis->P&R->RTL C. Synthesis->RTL->P&R D.RTL->P&R->Synthesis 2、o10换算成十进制是多少? A. 8 B.16 C.10 D.2 3、reg [7:0] mem [1:256];initial $readmemh("me..

weixin_44072819的博客 1万+

避坑指南:ANSYS流固耦合计算中System Coupling数据传递设置与常见报错解决

本文深入解析ANSYS Workbench中System Coupling模块在双向流固耦合(FSI)计算中的应用,详细讲解数据传递机制、典型报错解决方案及高阶调试技巧。通过实际案例展示如何优化耦合步长、处理大变形问题,并提升并行计算效率,帮助工程师有效规避常见技术陷阱。

weixin_29213525的博客 731

binlog+canel windows服务器下mysql数据的部署过程

1.开启mysql的binlog功能,并配置binlog模式为row。 1.1windos下修改mysql的my.ini文件(该文件在C:\ProgramData\MySQL\MySQL Server 5.7,而不是C:\Program Files\MySQL\MySQL Server 5.7下的my-default.ini文件,C:\ProgramData\MySQ...

liuli_1234567890的专栏 777

Oracle DG库手动注册归档日志的两种方法

有的时候由于网络或各种原因,Oracle DG库服务器上可能缺少部分归档日志文件,导致DG库的MRP进程一直处于状态。此时我们可以手动从主库或其他DG拷贝归档日志到当前DG服务器,并对日志文件进行手动注册。

Sebastien23的博客 729

Windows 本地搭建 CDC 全链路测试环境(Kafka+Canel+binlog+SpringBoot)

本文介绍了在Windows本地搭建MySQL Binlog CDC全链路测试环境的完整步骤,环境包含Kafka、Canal、MySQL Binlog和SpringBoot应用。主要内容包括:1)配置MySQL开启Binlog日志;2)安装并启动Kafka和ZooKeeper;3)部署Canal并配置Kafka输出;4)创建SpringBoot项目实现数据消费。通过此环境可实现MySQL数据变更捕获(CDC)并通过Kafka消息队列传输,最终由SpringBoot应用消费处理,形成完整的CDC数据管道。文章提

BADAO_LIUMANG_QIZHI的博客 365

一篇文章带你快速入门 MATLAB

文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一

南淮北安的博客 5128

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

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

139. MySQL同步ES的四种方案

在实际项目开发中,我们经常将MySQL作为业务数据库,ES作为查询数据库,用来实现读写分离,缓解MySQL数据库的查询压力,应对海量数据的复杂查询。此外,当MySQL是分库分表的情况下,查询where条件中必须带上分片键,大大限制了查询场景,此时也可以将数据异构到ES中,支持多样化的查询。这其中有一个很重要的问题,就是如何实现MySQL数据库和ES的数据同步,本文就和大家聊聊MySQL和ES数据同步的各种方案。我们先看看下面4种常用的数据同步方案。

YouMing_Li的博客 2697

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

高并发场景下如何保障缓存与数据库一致性?一文讲透

先删除缓存再更新数据库,延迟一段时间,再次删除缓存。延迟时间必须大于数据库事务提交时间 + 可能的网络延迟,这个时间无法准确预估,所以还是会有可能造成redis 和 mysql 数据缓存不一致性问题。要保证redis和mysql的数据一致性问题,首先想到的就是在对数据库增删改的时候删除缓存。所有的读请求访问的都是旧数据,但是最终更新数据库完成之后,会删掉缓存,所以能保证。,有一个读请求来了,那么缓存的还是旧数据,后续的读操就都是旧数据,不能保证。但是如果删除缓存操作失败了,就不能保证最终一致性。

weixin_65790121的博客 1270

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

mysql binlog_Mysql的binlog简介及其作用

binlog是mysql操作时留下的日志。如果后续我们需要配置主从数据库,如果我们需要从数据库同步主数据库的内容,我们就可以通过binlog来进行同步。如何开启并查看binlog?1,从sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf进入,找到log_bin,取消注释,保存。重启数据库就行了。登录mysql,用show variables like '%log...

weixin_39866487的博客 178

数据库一致性问题

数据库一致性问题是面试常考的内容。包含MySQL主从一致性,Redis和MySQL的一致性问题,以及Redis集群一致性问题等。如果面试官问道这个问题,还是想更多的考察对一些实际业务的理解吧。至少这一段在找暑期实习的过程中,不乏面试官对一致性的考察。

chris3will的博客 189

canal将binlog直接同步到kafka

目录1. 说明2. 配置修改2.1 conf/canal.properties修改2.2 新建一个example_kafka实例2.3 kafka_sync.java代码的开发 1. 说明 canal只需配置一个kafka的example实例,就可以直接将binlog同步到kafka, 此时kafka相当于一个id为1001的client 各组件说明如下表: 组件 版本 服务器 安装教程 canal 1.1.5 canal1, canal2, canal3 canal HA安装 + mysq

Bulut0907 2967

利用基于canal的go库来监听binlog日志

利用基于canal的go库来监听binlog日志**情景导入****下载安装踩的坑****API用法****参考** 情景导入   每当线上的DB数据发生了更新,要同步到从库需要一定的时间。此外有些如报表数据还要落地到其他存储(如缓存)中去。如果把数据落地的逻辑写在业务层,一定层度上会造成系统的耦合。   查了资料,发现阿里有一款开源的数据同步神器canal,基于数据库增量日志解析,提供增量数据订...

Marcus929的博客 9825

四、binlog与canal的藕断丝连

一、Canal的介绍 名称:canal [kə’næl] 译意: 水道/管道/沟渠 语言: 纯java开发 定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql 二、binLog主备原理 mysql主备复制实现 从上面来看,复制分成三步: master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log event...

1979

Logstash同步MySQL到ES

软件版本ES: 7.10.2MySQL: 5.7Logstash和ES安装在Windows中, MySQL安装在虚拟机中。

weixin_51918722的博客 1120

数据同步——otter

参考文献:Otter-入门篇1(阿里开源项目Otter介绍) 一、背景 本人是一名应届毕业生,,还在努力挖坑。最近两个月被外派到其他公司做一个升级系统,做到现在一个多月。学到的东西很多,想总结的东西也很多,可是。。。时间是让人猝不及防的东西。好吧,现在先来总结otter数据同步。升级系统需要做到内网数据库(主)和外网的n个数据库(从)进行数据同步,考虑的方案有: 直接在项目配置n个从数据库...

rocklee的专栏 1306

解决 MySQL binlog 同步时出现的乱序

要实现将MySQL的binlog日志发送到RocketMQ,可以使用Canal作为中间件来监听MySQL的binlog,并将监听到的数据发送到RocketMQ。1. 安装Canal:首先,需要在服务器上安装Canal。可以从Canal的官方网站下载并安装Canal Server。2. 配置Canal:在Canal Server的配置文件(conf/canal.properties)中,配置MySQL的连接信息,包括MySQL的地址、端口、用户名和密码。3. 配置RocketMQ:在Canal Server的

npk191954的专栏 1230
上一篇: 网址(url),域名,ip地址,dns,hosts之间的关系
下一篇: 源码分析常见问题
HY_Chan
博客等级 码龄10年 54粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值