主从同步binlog

主从同步的原理是怎样的
提到主从同步的原理,我们就需要了解在数据库中的一个重要日志文件,那就是 Binlog 二

进制日志,它记录了对数据库进行更新的事件。实际上主从同步的原理就是基于 Binlog 进

行数据同步的。在主从复制过程中,会基于 3 个线程来操作,一个主库线程,两个从库线

程。

二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候,

主库可以将二进制日志发送给从库,当主库读取事件的时候,会在 Binlog 上加锁,读取完

成之后,再将锁释放掉。

从库 I/O 线程会连接到主库,向主库发送请求更新 Binlog。这时从库的 I/O 线程就可以读

取到主库的二进制日志转储线程发送的 Binlog 更新部分,并且拷贝到本地形成中继日志

(Relay log)。

从库 SQL 线程会读取从库中的中继日志,并且执行日志中的事件,从而将从库中的数据与

主库保持同步。

在这里插入图片描述

所以你能看到主从同步的内容就是二进制日志(Binlog),它虽然叫二进制日志,实际上

存储的是一个又一个事件(Event),这些事件分别对应着数据库的更新操作,比如

INSERT、UPDATE、DELETE 等。另外我们还需要注意的是,不是所有版本的 MySQL 都

默认开启服务器的二进制日志,在进行主从同步的时候,我们需要先检查服务器是否已经开

启了二进制日志。进行主从同步的内容是二进制日志,它是一个文件,在进行网络传输的过程中就一定会存在

延迟(比如 500ms),这样就可能造成用户在从库上读取的数据不是最新的数据,也就是

主从同步中的数据不一致性问题。比如我们对一条记录进行更新,这个操作是在主库上完成

的,而在很短的时间内(比如 100ms)又对同一个记录进行了读取,这时候从库还没有完

成数据的更新,那么我们通过从库读到的数据就是一条旧的记录。

这种情况下该怎么办呢?

如何解决主从同步的数据一致性问题

可以想象下,如果我们想要操作的数据都存储在同一个数据库中,那么对数据进行更新的时
候,可以对记录加写锁,这样在读取的时候就不会发生数据不一致的情况,但这时从库的作
用就是备份,并没有起到读写分离,分担主库读压力的作用。
在这里插入图片描述
因此我们还需要继续想办法,在进行读写分离的同时,解决主从同步中数据不一致的问题,

也就是解决主从之间数据复制方式的问题,如果按照数据一致性从弱到强来进行划分,有以

下 3 种复制方式。

方法 1:异步复制
异步模式就是客户端提交 COMMIT 之后不需要等从库返回任何结果,而是直接将结果返回

给客户端,这样做的好处是不会影响主库写的效率,但可能会存在主库宕机,而 Binlog 还

没有同步到从库的情况,也就是此时的主库和从库数据不一致。这时候从从库中选择一个作

为新主,那么新主则可能缺少原来主服务器中已提交的事务。所以,这种复制模式下的数据

一致性是最弱的。
在这里插入图片描述
方法 2:半同步复制

MySQL5.5 版本之后开始支持半同步复制的方式。原理是在客户端提交 COMMIT 之后不

直接将结果返回给客户端,而是等待至少有一个从库接收到了 Binlog,并且写入到中继日

志中,再返回给客户端。这样做的好处就是提高了数据的一致性,当然相比于异步复制来

说,至少多增加了一个网络连接的延迟,降低了主库写的效率。

在 MySQL5.7 版本中还增加了一个

rpl_semi_sync_master_wait_for_slave_count参数,我们可以对应答的从库数量

进行设置,默认为 1,也就是说只要有 1 个从库进行了响应,就可以返回给客户端。如果

将这个参数调大,可以提升数据一致性的强度,但也会增加主库等待从库响应的时间。

在这里插入图片描述
方法 3:组复制

组复制技术,简称 MGR(MySQL Group Replication)。是 MySQL 在 5.7.17 版本中推

出的一种新的数据复制技术,这种复制技术是基于 Paxos 协议的状态机复制。

我刚才介绍的异步复制和半同步复制都无法最终保证数据的一致性问题,半同步复制是通过

判断从库响应的个数来决定是否返回给客户端,虽然数据一致性相比于异步复制有提升,但

仍然无法满足对数据一致性要求高的场景,比如金融领域。MGR 很好地弥补了这两种复制

模式的不足。

下面我们来看下 MGR 是如何工作的(如下图所示)。

首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致

性协议层(Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里“大

多数人”(对应 Node 节点)的同意,大多数指的是同意的节点数量需要大于

(N/2+1),这样才可以进行提交,而不是原发起方一个说了算。而针对只读(RO)事务

则不需要经过组内同意,直接 COMMIT 即可。

在一个复制组内有多个节点组成,它们各自维护了自己的数据副本,并且在一致性协议层实

现了原子消息和全局有序消息,从而保证组内数据的一致性。
在这里插入图片描述
MGR 将 MySQL 带入了数据强一致性的时代,是一个划时代的创新,其中一个重要的原因
就是 MGR 是基于 Paxos 协议的。Paxos 算法是由 2013 年的图灵奖获得者 Leslie
Lamport 于 1990 年提出的,有关这个算法的决策机制你可以去网上搜一下。或者点击
这里查看具体的算法,另外作者在 2001 年发布了一篇简化版的文章,你如果感兴趣的
话,也可以看下。
事实上,Paxos 算法提出来之后就作为分布式一致性算法被广泛应用,比如 Apache 的
ZooKeeper 也是基于 Paxos 实现的。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastGPT 调用Qwen 测试Hello world

Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录, 点击右上角的 新建 点击 这里,配置AI使用本地 ollama跑的qwen模型 问题:树上有3只鸟,开了一枪&#…

外贸企业选择什么网络?

随着全球化的深入发展,越来越多的国内企业将市场拓展到海外。为了确保外贸业务的顺利进行,企业需要建立一个稳定、安全且高速的网络。那么,外贸企业应该选择哪种网络呢?本文将为您详细介绍。 外贸企业应选择什么网络? …

pytest-yaml-sanmu(五):跳过执行和预期失败

除了手动注册标记之外,pytest 还内置了一些标记可直接使用,每种内置标记都会用例带来不同的特殊效果,本文先介绍 3 种。 1. skip skip 标记通常用于忽略暂时无法执行,或不需要执行的用例。 pytest 在执行用例时,如果…

Redis 7.x 系列【14】数据类型之流(Stream)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 常用命令2.1 XADD2.2 XRANGE2.3 XREVRANGE2.4 XDEL2.5 XLEN2.6 XREAD2.7 XG…

【.Net】Web项目部署腾讯云

文章目录 总述前置准备docker-compose部署普通部署 参考 总述 前置准备 云服务添加端口 另有linux本身防火墙请参考: 【Linux】防火墙命令 需安装.Net SDK和Asp .Net Runtime 注意: 1、sdk也要不只是runtime 2、是Asp .Net Runtime不是.Net Runtime …

国产音频放大器工作原理以及应用领域

音频放大器是在产生声音的输出元件上重建输入的音频信号的设备,其重建的信号音量和功率级都要理想:如实、有效且失真低。音频范围为约20Hz~20000Hz,因此放大器在此范围内必须有良好的频率响应(驱动频带受限的扬声器时要…

BIOS设置与系统分区

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 目录 一BIOS 1破解密码的前提 2B…

Spring Cloud Gateway3.x自定义Spring Cloud Loadbalancer负载均衡策略以及实现动态负载均衡策略的方案

目录 前言 1.原理分析 1.1 ReactiveLoadBalancerClientFilter源码分析 1.2 LoadBalancerClientFactory源码分析 2.代码实现 2.1 扩展原生RoundRobinLoadBalancer轮询策略 2.1.1 自定义实现RoundRobinLoadBalancer 2.1.2 配置自定义的RoundRobinLoadBalan…

【web3】分享一个web入门学习平台-HackQuest

前言 一直想进入web3行业,但是没有什么途径,偶然在电鸭平台看到HackQuest的共学营,发现真的不错,并且还接触到了黑客松这种形式。 链接地址:HackQuest 平台功能 学习路径:平台有完整的学习路径&#xff…

金蝶云星空字段之间连续触发值更新

文章目录 金蝶云星空字段之间连续触发值更新场景说明具体需求:解决方案 金蝶云星空字段之间连续触发值更新 场景说明 字段A配置了字段B的计算公式,字段B配置了自动C的计算公式,修改A的时候,触发了B的重算,但是C触发不…

ABeam×StartUp | ABeam德硕中国新创部门拜访通用机器人初创公司 :逐际动力,就具身智能机器人的发展展开交流

近日,ABeam中国新创部门有幸拜访了深圳逐际动力科技有限公司(以下简称:逐际动力)。作为一家通用机器人公司,其在人形机器人、四轮足机器人等领域具有深厚的学术与技术储备。 现场合影 左:ABeam中国新创部门…

最快33天录用!一投就中的医学4区SCI,几乎不退稿~

【SciencePub学术】今天小编给大家推荐2本生物医学领域的SCI,此期刊为我处目前合作的重点期刊!影响因子0-3.0之间,最重要的是审稿周期较短,对急投的学者较为友好! 医学医药类SCI 01 / 期刊概况 【期刊简介】IF&…

多模态融合 + 慢病精准预测

多模态融合 慢病精准预测 慢病预测算法拆解子解法1:多模态数据集成子解法2:实时数据处理与更新子解法3:采用大型语言多模态模型(LLMMs)进行深度学习分析 慢病预测更多模态 论文:https://arxiv.org/pdf/2406…

高通骁龙(Qualcomm Snapdragon)CDSP HVX HTP 芯片简介与开发入门

1. Hexagon DSP/HVX/HTP 硬件演进 说到高通骁龙芯片大家应该不会陌生,其作为最为广泛的移动处理器之一,几乎每一个品牌的智能手机都会使用高通骁龙的处理器。 高通提供了一系列骁龙芯片解决方案。根据性能强弱分为了5个产品系列:从最高端的…

数据结构_1.0

一、数据结构概述 1.1 概念 在计算机科学中,数据结构是一种数据组织、管理和存储的格式 。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技…

【C语言】typedef 关键字

在C语言中,typedef关键字用于给现有的数据类型起一个新的名字。它在提高代码可读性、简化复杂类型声明、增强可维护性方面非常有用。typedef通常用于定义结构体、指针、函数指针以及其他复杂类型。 基本用法 typedef int MyInt; MyInt x 10;在这个例子中&#xf…

wps linux node.js 加载项开发,和离线部署方案

环境准备 windwos 安装node.js 安装VSCode 安装wps linux 安装node.js 安装VSCode 安装wps 通过npm 安装wpsjs SDK 使用npm安装wpsjs npm install -g wpsjs 创建一个项目 wpsjs create WPS-Addin-PPT 创建项目会让你选择2个东西: 1:选择你的文…

SpringBoot实现图片添加水印(完整)

提示:昨天不是写了一个类似与图片添加水印的版本吗,今天来写一个带数据库,并且可以完整访问的版本 文章目录 目录 文章目录 引入库 配置文件 数据库配置 字段配置 索引配置 数据库表语句 启动文件 前端代码 整体代码目录 配置类AppConfig Contro…

五千元软考补贴,这个地区的人别错过!

软考合格者可享受一些补贴,最高可达25万?!持有软考证书可领取哪些补贴?软考补贴详细信息 由于不同地区政策有时间限制,符合条件的人员应尽快领取哦~ 今天继续分享常德地区的补贴信息。 这里给大家总结一下和软考有关…