Redis与MySQL主从复制原理解析

目录

1. 介绍

主从复制是一种常用的数据冗余和负载均衡技术。无论是缓存系统Redis还是关系型数据库MySQL,都广泛应用了主从复制技术。

MySQL的主从复制(Master-Slave Replication)是一种数据库同步技术,它允许将一个MySQL数据库服务器(称为主服务器或master)的数据复制到一个或多个MySQL数据库服务器(称为从服务器或slave)上。

2. Mysql主从复制的工作原理

MySQL的主从复制是一个异步的过程,主要涉及三个线程:

  1. Binlog dump线程(在主服务器上):将Binlog事件发送给从服务器
  2. I/O线程(在从服务器上):请求主服务器发送Binlog中的更改事件
  3. SQL线程(在从服务器上):将从主机读取到的事件重放到从服务器的数据库中

让我们通过一个详细的图表来说明这个过程:

详细步骤说明:

  1. 当主服务器上的事务提交时,所有的更改都会被记录到二进制日志(Binary Log,简称Binlog)中。
  2. 主服务器上的Binlog dump线程读取Binlog文件,并将Binlog事件发送给从服务器。
  3. 从服务器上的I/O线程连接到主服务器,请求主服务器发送Binlog中的更改事件。
  4. 主服务器的Binlog dump线程读取Binlog文件,将事件发送给从服务器的I/O线程。
  5. 从服务器的I/O线程接收到事件后,将其写入到中继日志(Relay Log)中。
  6. 从服务器上的SQL线程持续监控Relay Log,一旦发现新的事件就读取出来。
  7. SQL线程将读取到的事件重放到从服务器的数据库中,从而实现数据同步。

3. Mysql复制的类型

MySQL支持多种复制类型,每种类型都有其特定的用途和优势:

3.1 基于语句的复制(Statement-based Replication, SBR)

在这种模式下,主服务器记录修改数据的SQL语句,然后将这些语句传送给从服务器执行。

优点

  • 日志文件较小,节省存储空间和网络带宽。
  • 对于批量插入操作效率较高。

缺点

  • 某些函数(如RAND()、UUID()等)在主从服务器上可能产生不同结果。
  • 存在潜在的数据不一致风险。

3.2 基于行的复制(Row-based Replication, RBR)

这种模式下,主服务器记录每一行数据的变化,然后将这些变化传送给从服务器。

优点

  • 能够精确复制每一行的变化,保证数据一致性。
  • 对于使用RAND()、UUID()等函数的操作也能正确复制。

缺点

  • 产生的日志文件可能会非常大,特别是在大量行变更的情况下。
  • 对网络带宽要求较高。

3.3 混合复制(Mixed Replication)

这是MySQL 5.1之后引入的默认复制模式,它结合了SBR和RBR的优点。

  • 大多数情况下使用基于语句的复制。
  • 当遇到可能导致数据不一致的情况时,自动切换到基于行的复制。

4. Redis主从复制原理

Redis使用异步复制,这意味着主节点不需要等待从节点的确认就可以继续处理客户端请求。

4.1 复制过程

  1. 建立连接:从节点通过SLAVEOF命令连接到主节点。

SLAVEOF 是 Redis 中用于设置主从复制关系的命令。通过这个命令,可以将一个 Redis 实例配置为另一个 Redis 实例的从节点(Slave),从而实现数据的复制和备份。

SLAVEOF <masterip> <masterport>
  • <masterip>:主节点的 IP 地址。
  • <masterport>:主节点的端口号。
  1. 数据同步
  • 全量同步:主节点生成RDB文件,并发送给从节点。
  • 增量同步:主节点将新的写命令发送给从节点。

4.2 详细流程

从节点 主节点 连接请求 全量同步 RDB文件 加载RDB文件 增量同步 同步数据 从节点 主节点
  1. 全量同步

    主从节点第一次建立连接:

    1. 从节点发送PSYNC命令,同时携带一个id值和offset复制偏移量。当传来的id值与主节点的id值不同时认为是第一次连接,执行全量同步

    2. 主节点开始BGSAVE(会fork创建一个子线程来执行)生成RDB文件。

      redis有两种持久化机制:RDB和AOF

      • RDB:生成某时刻的数据快照来实现持久化,适用于数据备份
      • AOF:将写操作命令以追加的方式写入日志文件

      另外使用了Copy-On-Write (COW写时复制) 技术:在 fork 过程中,父进程和子进程共享相同的内存页面,如果在生成RDB文件时父进程需要修改数据,会复制对应的页面进行修改并将修改操作存入一个复制缓冲区,RDB文件依旧是存储生成时刻的数据,变更的数据在后续的连接中从缓冲区读取进行发送。

    3. 主节点将RDB文件发送给从节点。

    4. 从节点清空自身数据,加载RDB文件。

    5. 保持连接持续发送主节点的更新数据

  2. 增量同步

    当主从断开重连时,从节点的连接参数的id值与主节点的id值一致,就会执行增量同步

    1. 主节点会维护一个复制积压环形缓冲区用于记录写入命令(环形 -> 会发生数据覆盖)。
    2. 从节点断开重连后,告知主节点自己的复制偏移量offset和一个id值。
    3. 主节点判断如果偏移量在缓冲区内,主节点只发送复制缓冲区中从节点缺失的数据数据。
    4. 如果偏移量已经被覆盖了,就会触发进行全量同步

4.3 Redis复制的特点

  • 异步复制
  • 一个主节点可以有多个从节点
  • 从节点可以有自己的从节点
  • 复制功能不会阻塞主节点
  • 从节点默认只读

5. Redis与MySQL主从复制对比

特性RedisMySQL
复制方式异步异步(默认),半同步,同步
数据格式RDB文件 + 命令流Binlog事件
全量同步RDB文件传输Dump整个数据库
增量同步命令传播Binlog事件
复制粒度命令级行级,语句级,混合
复制延迟通常较小可能较大,取决于负载
数据一致性最终一致性可配置(异步/半同步/同步)
故障恢复哨兵或集群模式手动或自动故障转移
  1. 数据模型

    1. Redis是键值存储,复制整个数据集相对简单。
    2. MySQL是关系型数据库,复制涉及表结构和数据。
  2. 复制粒度

    1. Redis复制以命令为单位。
    2. MySQL可以选择行级,语句级或混合复制。
  3. 全量同步

    1. Redis通过传输RDB文件实现。
    2. MySQL需要dump整个数据库或表。
  4. 增量同步机制

    1. Redis使用复制积压缓冲区。
    2. MySQL使用binlog位置。
  5. 一致性保证

    1. Redis提供最终一致性。
    2. MySQL可以通过配置提供更强的一致性保证。
  6. 应用场景

    1. Redis主要用于缓存和简单数据结构存储。
    2. MySQL用于持久化存储和复杂查询。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一步到位Python Django部署,浅谈Python Django框架

Django是一个使用Python开发的Web应用程序框架&#xff0c;它遵循MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;旨在帮助开发人员更快、更轻松地构建和维护高质量的Web应用程序。Django提供了强大的基础设施和工具&#xff0c;以便于处理复杂的业务逻…

迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统-编写 bundle.json文件

bundle.json 文件内容如下所示&#xff1a; 下面是对各个字段的解释&#xff1a; 1. name: "ohos/demos" - 这是组件或项目的名称&#xff0c;这里表示它属于 OHOS&#xff08;OpenHarmony OS&#xff09;生态系统下的一个名为"demos"的组件。 2. descri…

STM32 物联网智能家居 (三) 输入子系统

STM32 物联网智能家居 (三) 输入子系统 下面是物联网智能家居的输入子系统&#xff0c;见下图&#xff0c;在输入子系统中会实现按键输入、网络输入、标准输入Scanf&#xff0c;其中的网络输入放入到网络子系统中进行讲解。 一、输入子系统核心功能 STM32 物联网智能家居输入…

Windows 正确配置android adb调试的方法

下载适用于 Windows 的 SDK Platform-Tools https://developer.android.google.cn/tools/releases/platform-tools?hlzh-cn 设置系统变量&#xff0c;路径为platform-tools文件夹的绝对路径 点击Path添加环境变量 %adb%打开终端输入adb shell 这就成功了&#xff01;

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理 项目背景项目实现推理过程训练过程 项目展望写在最后项目下载链接 本文为原创文章&#xff0c;若需要转载&#xff0c;请注明出处。 原文地址&#xff1a;https://blog.csdn.net/qq_30270773/article…

线性回归超详解

目录 一、回归问题 vs 分类问题 二、线性回归 1、一句话理解 2、数学推导 2.1 线性函数表示 2.2 损失函数 2.3 梯度下降 2.3.1 什么是梯度 2.3.2 梯度下降目标 2.3.3 过程 2.3.4 迭代公式 3、特征预处理 3.1 为什么要预处理 3.2 数据归一化方法 1&#xff09;最小…

docker 部署 Kafka 单机和集群

一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装&#xff1a;docker --version如果未安装&#xff0c;可以访问 Docker 官网下载并安装 Docker Desktop&#xff08;Windows 和 Mac&#xff09;或使用包管理器安装&#xff08;Linux&…

Uniapp开发安卓App,配置第一次打开软件出现的弹窗-隐私政策提示框

这里是直接使用的uniapp官方所提供的“原生隐私政策提示框”&#xff0c;废话不多说&#xff0c;直接上教程&#xff01; 1.manifest.json—>安卓/IOS启动界面配置—>勾选“使用原生隐私政策提示框”2.勾选后&#xff0c;在你的项目下就会出现一个文件&#xff0c;andro…

微信小程序:播放音频

在小程序开发中&#xff0c;音频播放是一个重要的功能。本文将详细介绍小程序音频播放的相关知识点&#xff0c;帮助开发者更好地掌握小程序音频播放的实现方法。 一、小程序音频播放的基本流程 在小程序中&#xff0c;音频播放的基本流程如下&#xff1a; 获取音频数据&#…

Unity解决滑动条的value值的滑动条消失问题

在这里我们看到原本的value的滑动条消失了 解决办法 把编辑器的边框往外面拉一下就可以了&#xff08;之前遇到这个问题还重启了几次unity没想到居然是这个问题&#xff09;

Mac上安装Label Studio

在Mac上安装Anaconda并随后安装Label Studio&#xff0c;可以按照以下步骤进行&#xff1a; 1. 在Mac上安装Anaconda 首先&#xff0c;你需要从Anaconda的官方网站下载适用于Mac的安装程序。访问Anaconda官网&#xff0c;点击“Download Anaconda”按钮&#xff0c;选择适合M…

微软震撼发布:Phi-4语言模型登陆Hugging Face

近日&#xff0c;微软公司在Hugging Face平台上正式发布了其最新的语言模型Phi-4&#xff0c;这一发布标志着人工智能技术的又一重要进步。Phi-4模型以其140亿参数的高效配置&#xff0c;在复杂推理任务中表现出色&#xff0c;特别是在数学领域&#xff0c;更是展现出了卓越的能…

使用WebdriverIO和Appium测试App

1.新建项目 打开Webstorm新建项目 打开终端输入命令 npm init -y npm install wdio/cli allure-commandline --save-dev npx wdio config 然后在终端依次选择如下&#xff1a; 然后在终端输入命令&#xff1a; npm install wdio/local-runnerlatest wdio/mocha-frameworkla…

【opencv】第7章 图像变换

7.1 基 于OpenCV 的 边 缘 检 测 本节中&#xff0c;我们将一起学习OpenCV 中边缘检测的各种算子和滤波器——Canny 算子、Sobel 算 子 、Laplacian 算子以及Scharr 滤波器。 7.1.1 边缘检测的一般步骤 在具体介绍之前&#xff0c;先来一起看看边缘检测的一般步骤。 1.【第…

浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索

安科瑞吕梦怡 18706162527 摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活…

Linux检查磁盘占用情况

1.检查使用情况 df -h发现是/dev/vda1占用很高 2.查看/dev/vda1文件夹 cd /dev/vda1发现不是文件夹 3.继续查看使用情况 df -h *4.原因可能是文件已经删除但是进程还在&#xff0c;没有释放空间 5.查看删除操作的进程 lsof -n | grep deleted6.杀死进程 kill -9 PID

向量数据库Milvus详解

向量数据库Milvus详解 0. 什么是向量数据库? 在现实世界中,并非所有数据都可以整齐地放到行和列中。在处理图像、视频和自然语言等复杂的非结构化数据时尤其如此。这就是向量数据库的用武之地。 向量数据库是一种以高维向量的形式来存储数据的数据库,这些向量本质上是表示…

海豚调度DolphinScheduler-3.1.9配置windows本地开发环境

源代码下载地址https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 1.Zookeeper安装与使用 如图下载解压zookeeper安装包&#xff0c;并创建data和log目录 下载地址 https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 进入…

springCloudGateway+nacos自定义负载均衡-通过IP隔离开发环境

先说一下想法&#xff0c;小公司开发项目&#xff0c;参考若依框架使用的spring-cloud-starter-gateway和spring-cloud-starter-alibaba-nacos, 用到了nacos的配置中心和注册中心&#xff0c;有多个模块&#xff08;每个模块都是一个服务&#xff09;。 想本地开发&#xff0c;…

大模型训练_硬件微调知识增强

目录 关键硬件 大模型类型 垂域训练技术 微调技术 领域大模型训练trick 知识增强 关键硬件 GPU GPU擅长处理图形渲染和数据并行任务&#xff0c;可以同时处理大量的矩阵运算&#xff0c;在科学计算、人工智能、游戏开发等领域应用广泛。 显卡 显卡是一种完整的硬件设…