主从数据同步原理

news2024/11/30 8:59:58

2.2.主从数据同步原理

2.2.1.全量同步

主从第一次建立连接时,会执行全量同步,将master节点的所有数据都拷贝给slave节点,流程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里有一个问题,master如何得知salve是第一次来连接呢??

有几个概念,可以作为判断依据:

  • Replication Id:简称replid,是数据集的标记,id一致则说明是同一数据集。每一个master都有唯一的replid,slave则会继承master节点的replid
  • offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。

因此slave做数据同步,必须向master声明自己的replication id 和offset,master才可以判断到底需要同步哪些数据。

因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。

master判断发现slave发送来的replid与自己的不一致,说明这是一个全新的slave,就知道要做全量同步了。

master会将自己的replid和offset都发送给这个slave,slave保存这些信息。以后slave的replid就与master一致了。

因此,master判断一个节点是否是第一次同步的依据,就是看replid是否一致

如图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完整流程描述:

  • slave节点请求增量同步
  • master节点判断replid,发现不一致,拒绝增量同步
  • master将完整内存数据生成RDB,发送RDB到slave
  • slave清空本地数据,加载master的RDB
  • master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
  • slave执行接收到的命令,保持与master之间的同步

2.2.2.增量同步

全量同步需要先做RDB,然后将RDB文件通过网络传输个slave,成本太高了。因此除了第一次做全量同步,其它大多数时候slave与master都是做增量同步

什么是增量同步?就是只更新slave与master存在差异的部分数据。如图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么master怎么知道slave与自己的数据差异在哪里呢?

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

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

相关文章

添加索引真的不会锁表吗

1.MySQL DDL执行方式 MySQL5.5以及之前的版本,通常更改数据表结构操作(DDL)会阻塞对表数据的增删改操作(DML)。 MySQL5.6提供Online DDL之后可支持DDL与DML操作同时执行,降低了DDL期间对业务延迟带来的影响。 2.Online ddl: 概念&#xff…

Innodb架构解析

整体架构 通过《面试官:一条SQL是如何执行的?》我们了解了MySQL架构,下面我们看下Innodb架构。 innodb最早由Innobase Oy公司开发,5.5版本开始是MySQL默认存储引擎,该存储引擎是第一个完整支持ACID事务的MySQL存储引…

多线程GUI界面文件复制程序的解决方案

在Python中,你可以使用多线程来编写一个GUI界面的文件复制程序。这样可以使得文件复制过程在后台进行,而不会阻塞用户界面,提升用户体验。下面是一个使用Python的Tkinter库和多线程实现的文件复制程序的示例: 1、问题背景 我们有…

Mac上的最佳3D建模工具-犀牛Rhinoceros 8 for Mac v8.6.24101.05002完美兼容激活

Rhino 8是一款计算机辅助设计(CAD)和三维建模软件,由美国公司McNeel & Associates开发。它是Rhino系列的最新版本,用于创建、编辑、分析、渲染和动画三维模型。 以下是Rhino 8的一些主要特点和功能: 1. **强大的…

今天讲讲MYSQL数据库事务怎么实现的!

目录 什么是数据库事务 Mysql如何保证原子性 Mysql如何保证持久性 MySQL怎么保证隔离性 事务隔离级别 脏读的解决 不可重复读的解决 幻读的解决 MVCC实现 Read View 那么RC、RR级别下的InnoDB快照读有什么不同? 什么是数据库事务 数据库事务是指一组数据…

2024年4月12日 十二生肖 今日运势

小运播报:2024年4月12日,星期五,农历三月初四 (甲辰年戊辰月丙午日),法定工作日。 红榜生肖:羊、狗、虎 需要注意:牛、马、鼠 喜神方位:西南方 财神方位:…

强化学习-深度蒙特卡洛算法(Deep Monte-Carlo)解决骰子游戏“吹牛”

一、算法简介 深度蒙特卡洛算法是一种使用深度神经网络来进行蒙特卡洛估计的强化学习算法,它最早于2020年在《DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning》被提出用于解决斗地主问题。 深度蒙特卡洛算法使用深度网络拟合每个时刻&…

HarmonyOS 开发-阻塞事件冒泡

介绍 本示例主要介绍在点击事件中,子组件enabled属性设置为false的时候,如何解决点击子组件模块区域会触发父组件的点击事件问题;以及触摸事件中当子组件触发触摸事件的时候,父组件如果设置触摸事件的话,如何解决父组…

应对人工智能在金融服务业的迅猛发展

今天分享的是人工智能专题系列深度研究报告:《人工智能专题:应对人工智能在金融服务业的迅猛发展》。 (报告出品方:安永) 评估人工智能对金融服务业的潜在影响 虽然大型银行和保险公司使用人工智能已有多年&#xf…

Rust语言入门第一篇-环境搭建

Rust语言入门第一篇 Rust官网 一,环境搭建 1、C开发环境配置 Rust 语言的底层是依赖于 C/C 编译器的。在安装 Rust 编译器时,通常会自动安装所需的 C/C 编译环境,以便 Rust 能够生成可执行文件或库。因此,在安装 Rust 之前&…

牛客NC413 两个升序数组的中位数【hard 数组,模拟 Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/b3b59248e61f499482eaba636305474b 思路 直接模拟2个数组有顺序放到一个数组中help中如果help长度为奇数,返回中间的数如果help长度为偶数,返回中间2个数的和除以2参考答案java import j…

【学习】移动端兼容性测试有什么方法及重要性

随着移动互联网的快速发展,移动应用程序已经成为人们日常生活中不可或缺的一部分。然而,由于各种移动设备的硬件和软件差异,移动应用程序的兼容性问题也越来越突出。因此,移动端兼容性测试成为了一个重要的环节,它可以…

jar包瘦身 移除无用的maven依赖

1.进入pom.xml所在目录,执行mvn dependency:analyze Unused declared dependencies found:下的单个包进行逐个移除编译,编译不报错就可以移除

3d怎么按路径制作模型---模大狮模型网

在3D建模中,按路径制作模型是一种常见的技术,特别适用于创建曲线、管道、绳索等线性形状的物体。虽然这项技术可能对初学者来说有些复杂,但通过一步步的指导和实践,你将能够掌握它。本文将详细介绍按路径制作模型的步骤&#xff0…

4月9号总结

java学习 一.steam流 1.介绍 Stream 是 Java 8 中引入的一种处理集合数据的新抽象。它提供了一种高效且便利的方式来处理集合中的元素,支持函数式编程的特性,使得集合操作变得更加简洁和灵活。 2.创建 List和Set可以直接调用接口的steam方法转换为流 …

vue2+codemirror实现指定行背景染色(二 代码染色)

在做覆盖率统计时,我们需要给指定代码行染色高亮,这里使用vue2+codemirror实现代码的渲染和染色。效果图如下: 1、安装 vue-codemirror // 指定安装4.x版本 // 目前最新版本6.x,仅支持Vue3.0 npm i vue-codemirror@4.x --save// codemirror 需要与 vue-codemirror 同时安装…

JavaScript_语法--变量

1.4 变量 变量:一小块存储数据的内存空间 Java语言是强类型语言,而JavaScript是弱类型的语言 强类型: 在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据 弱类型: 在开辟变量存储空间…

Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发

相关文章: Ollama教程——入门:开启本地大型语言模型开发之旅 Ollama教程——模型:如何将模型高效导入到ollama框架 Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发 Ollama教程——兼容OpenAI API:高效利用…

我为什么选择成为程序员?

前言: 我选择成为程序员不是兴趣所在,也不是为了职业发展,全是生活所迫! 第一章:那年,我双手插兜,对外面的世界一无所知 时间回到2009年,时间过得真快啊,一下就是15年前…

基于小程序实现的校园失物招领系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…