主从数据同步原理

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与自己的数据差异在哪里呢?

相关推荐
计算机毕设指导61 分钟前
基于微信小程序的水上警务通系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
明月心9521 分钟前
创建Mysql 用户 并赋权
mysql
他是龙5515 分钟前
46:SQLMap实战全攻略(猜解/权限/绕过/调试)
数据库·oracle
chenyuhao20249 分钟前
Linux系统编程:线程概念与控制
linux·服务器·开发语言·c++·后端
一位代码12 分钟前
mysql | 环境变量问题及其配置方法详解
数据库·mysql
煎蛋学姐19 分钟前
SSM校企协同育人平台j670k(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·ssm 框架开发
cws20040123 分钟前
HeidiSQL 使用操作说明书
运维·数据库·windows·mysql·heidisql
Pyeako28 分钟前
MySQL基础知识&Linux导入导出数据
linux·数据库·mysql·sql查询·sql分类
山沐与山29 分钟前
【数据库】PostgreSQL中JSONB的使用与踩坑记录
数据库·postgresql
prettyxian29 分钟前
【linux】进程概念(1)PCB、系统调用与 proc 目录全解析
linux·运维·服务器