主从同步binlog

news2024/7/4 0:38:41

主从同步的原理是怎样的
提到主从同步的原理,我们就需要了解在数据库中的一个重要日志文件,那就是 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.coloradmin.cn/o/1886388.html

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

相关文章

KVM性能优化之CPU优化

1、查看kvm虚拟机vCPU的QEMU线程 ps -eLo ruser,pid,ppid,lwp,psr,args |awk /^qemu/{print $1,$2,$3,$4,$5,$6,$8} 注:vcpu是不同的线程,而不同的线程是跑在不同的cpu上,一般情况,虚拟机在运行时自身会点用3个cpus,为保证生产环…

第二篇——始计篇:“计”是最早的SWOT分析

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 第二次详读孙子兵法,当初听讲解的时候,就觉得自己…

短剧系统开发:如何让你的创意变成现实

短剧系统开发是一个将创意转化为现实的过程,它涉及多个方面,包括需求分析、系统设计、开发环境搭建、前后端开发、测试与发布等。 1. 需求分析 (1)明确目标:首先,明确短剧系统的目标和定位,包括…

某智能装备公司如何实现多个工程师共用1台图形工作站

在当今快速发展的科技领域,资源共享和高效利用已成为企业提升竞争力的关键,特别是在工程设计和研发领域。如何最大化地利用有限的资源,如工作站,成为了许多公司面临的挑战。某智能装备公司便是在这样的背景下,通过云飞…

【如何使用RSA签名验签】python语言

文章目录 签名方法异步同步通知数据验签生活号响应数据验签同步响应数据验签 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的…

002-基于Sklearn的机器学习入门:基本概念

本节将继续介绍与机器学习有关的一些基本概念,包括机器学习的分类,性能指标等。同样,如果你对本节内容很熟悉,可直接跳过。 2.1 机器学习概述 2.1.1 什么是机器学习 常见的监督学习方法 2.1.2 机器学习的分类 机器学习一般包括监…

玉林师范学院宿舍管理系统的设计与实现19633

玉林师范学院宿舍管理系统设计与实现 摘要:随着大学生人数的增加,宿舍管理成为高校管理中的重要问题。本论文旨在研究玉林师范学院宿舍管理系统,探讨其优势和不足,并提出改进建议。通过对相关文献的综述和实地调研,我们…

【操作系统】进程管理——线程管理(个人笔记)

学习日期:2024.7.2 内容摘要:线程的概念、存在的意义、线程的属性,线程的实现方式,线程的状态与组织。 线程的概念 拿QQ来说,QQ既可以打视频电话,也可以在这同时进行文字聊天或传送文件,进程是…

java基于ssm+jsp 二手交易平台网站

1商家能模块 商家首页,在商家首页页面可以查看个人中心、商品分类管理、商品信息管理、订单信息管理、订单配送管理信息,如图1所示。 图1商家首页界面图 个人中心,用户通过个人中心可以查看用户名、用户姓名、头像、性别、手机号码、邮箱等信…

MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告

数据库设计作业——《网上书店系统》数据库设计 一、功能需求 普通用户:可以进行最基础的登陆操作,可浏览图书、按类别查询图书、查看 图书的详细信息,还可以注册成为会员。会员:需要填写详细信息(真实姓名、性别、手…

移动端 UI 风格简约而不凡

移动端 UI 风格简约而不凡

vue 中使用element-ui实现锚点定位表单

效果图&#xff1a; 代码&#xff1a; html代码&#xff1a; <div class"content-left"><el-tabs :tab-position"left" tab-click"goAnchor"><el-tab-pane v-for"(item,index) in anchorNameList"v-anchor-scroll:ke…

HTTP2.0如何优化HTTP1.1

目录 HTTP1.1什么缺点 如何解决头部压缩 静态字典 动态字典 如何解决队头阻塞 Stream 排序 服务器主动推送资源 HTTP1.1什么缺点 队头阻塞问题 同一连接只能在完成一个 HTTP 事务&#xff08;请求和响应&#xff09;后&#xff0c;才能处理下一个事务&#xff1b;(…

力扣每日一题 7/2 数学、数论、数组/双指针

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 3115.质数的最大距离【中等】 题目&#xff1a; 给你一个整数数组 nums。…

视频字幕提取在线工具有哪些?总结5个字幕提取工具

平时在沉浸式追剧的时候&#xff0c;我们常常都会被影视剧中的各种金句爆梗而逗得开怀大笑~而真正要用到时候却总是一片头脑空白。其实要记住它们最好的办法便是将其提取留档下来&#xff0c;每次有需要的时候打开就能一下子回顾到~ 今天就来带大家盘一盘视频字幕提取的软件好…

[C++]——同步异步日志系统(1)

同步异步日志系统 一、项⽬介绍二、开发环境三、核心技术四、环境搭建五、日志系统介绍5.1 为什么需要日志系统5.2 日志系统技术实现5.2.1 同步写日志5.2.2 异步写日志 日志系统&#xff1a; 日志&#xff1a;程序在运行过程中&#xff0c;用来记录程序运行状态信息。 作用&…

图片转pdf,图片转pdf在线转换,在线图片转pdf,图片转pdf格式怎么弄

在数字化时代&#xff0c;图片和PDF文件成为了我们日常生活中不可或缺的元素。有时候&#xff0c;我们需要将图片转换成PDF格式以便更好地分享、存储或打印。那么&#xff0c;图片格式怎么转换成PDF呢&#xff1f;本文将为您详细介绍简单实用的转换方法。 方法一、使用pdf转换软…

Python容器 之 字典--字典的常用操作方法

1.增加和修改 字典[键] 值 键 存在, 修改 键 不存在, 添加 # 定义非空字典, 姓名, 年龄, 身高, 性别 my_dict {"name": "小明", "age": 18, "height": 1.78, "isMen": True} print(my_dict) # {name: 小明, age: 18, h…

【知识】DGL中graph默认的稀疏矩阵格式和coo格式不对的坑

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 先给结论 源码解读 代码验证 网上没找到相关的讨论&#xff0c;因此只能从源码上一步步查。 先给结论 对于自己使用dgl.graph接口创建的图&am…

【HTML入门】列表与表格

文章目录 前言一、列表与表格是什么&#xff1f;列表表格 二、使用标签列表标签表格标签 三、组合情况列表的组合表格的组合 四、示例代码总结 好的&#xff0c;以下是一个关于HTML列表与表格的文章示例&#xff1a; 前言 随着网页开发的普及&#xff0c;HTML成为了构建网页的…