MySQL 主从复制原理
文章目录
- 1.主从复制方式
- 1.1 异步复制
- 1.2 半同步复制
- 1.3 全同步复制
- 2.主从复制原理
- 3.主从复制时推还是拉?
- 参考文献
主从复制是 MySQL 高可用(备份)和高性能(读写分离)的基础,有了这个基础,MySQL 的部署会变得简单、灵活并且具有多样性,从而可以根据不同的业务场景做出灵活的调整。
要实施复制,首先必须打开 master 端的 binlog 功能,否则无法实现。因为整个复制过程实际上就是 slave 从 master 获取该 binlog 然后再在自己身上完全顺序的执行 binlog 中所记录的各种更新操作。
1.主从复制方式
1.1 异步复制
MySQL 主从复制默认是异步复制。
MySQL 增删改操作会全部记录在 binlog 中。当发生数据更新后,master 会将 SQL 记录通过多 dump 线程写入到 binlog 并发送给 slave。slave 把 binlog 存储到本地的 relay log 中,然后去执行 relay log 的更新内容。

这种模式下,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理。这样就会有一个问题,主节点如果崩溃,此时主节点上已经提交的事务可能并没有传到从节点上,如果此时,强行将从提升为主,可能导致新主节点上的数据不完整。
1.2 半同步复制
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到 binlog 并写到 relay log 中才返回成功信息给客户端(只能保证主库的 binlog 至少传输到了一个从节点上)。

相对于异步复制,半同步复制提高了数据的安全性,一定程度上保证了数据能成功备份到从库,同时它也造成了一定程度的延迟,但是比全同步模式延迟要低,这个延迟最少是一个 TCP/IP 往返的时间。所以,半同步复制最好在低延时的网络中使用。
半同步模式不是 MySQL 内置的,从 MySQL 5.5 开始集成,需要 master 和 slave 安装插件开启半同步模式。
1.3 全同步复制
指当主库执行完一个事务,然后所有的从库都复制了该事务并成功执行完才返回成功信息给客户端。因为需要等待所有从库执行完该事务才能返回成功信息,所以全同步复制的性能必然会受到严重的影响。
2.主从复制原理
MySQL 主从复制涉及到三个线程:
- 一个在主节点的线程:binlog dump thread。
- 从库会生成两个线程:一个 I/O 线程,一个 SQL 线程。

主库会生成一个 log dump 线程,用来给从库 I/O 线程传 binlog。
从库 I/O 线程将得到的 binlog 写到本地的 relay log(中继日志)。
SQL 线程会读取 relay log,解析成 SQL 语句逐一执行。
3.主从复制时推还是拉?
MySQL 的复制是“推”的,而不是“拉”的。
“拉”是指 MySQL 的从库不断地循环询问主库是否有数据更新,这种方式资源消耗多,并且效率低。
“推”是指MySQL的主库在自己有数据更新的时候推送这个变更给备库,这种方式只有在数据有变更的时候才会发生交互,资源消耗少。
显而易见,“推”的方式更加符合程序运行的节能原则。
那么 MySQL 具体是怎么“推”的呢?
实际上从库在向主库申请数据变更记录的时候,需要指定从主库 Binlog 的哪个文件(MASTER_LOG_FILE)的具体偏移位置(MASTER_LOG_POS)。对应的,主库会启动一个 binlog dump 线程,将变更的记录从这个位置开始一条一条地发给从库。从库一直监听主库过来的变更,接收到一条,就会在本地应用这个数据变更。
参考文献
MySQL 主从复制原理不再难- rickiyang - 博客园
相关文章:
MySQL 主从复制原理
文章目录 1.主从复制方式1.1 异步复制1.2 半同步复制1.3 全同步复制 2.主从复制原理3.主从复制时推还是拉?参考文献 主从复制是 MySQL 高可用(备份)和高性能(读写分离)的基础,有了这个基础,MySQ…...
构建嵌入式Linux rootfs根文件系统
创建根文件系统涉及选择系统运行所需的文件。在本节中,我们将介绍如何构建压缩的根文件系统。不太常见的选择是在直接作为 root 挂载的本地驱动器上构建未压缩的文件系统。 转载请注明来源,谢谢。构建嵌入式Linux rootfs根文件系统-CSDN博客创建根文件系…...
高速电路设计----第三章
一、数字信号需要上拉的情况 1、 一般信号上拉接多大的电阻要看对于芯片的电流要求。看芯片datasheet的I(BHLO)和I(BHHO)两个参数。平时的话: 3.3V的上拉为1K~3.3k即可 5V的上拉电阻为4.7K到10K即可。 2、数字信号的逻辑控制&a…...
【微信小程序】6天精准入门(第4天:自定义组件及案例界面)附源码
一、自定义组件 1、介绍 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。 开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用;也可以将复杂的页…...
pragma once与ifndef的区别
概要 代码编译过程中,为了防止同一份代码被重复引用,通常有两种实现方式 方式一 #pragma once 方式二 #ifndef _TEST_H_ #define _TEST_H_ #endif // !TEST_H 通常情况下,使用上述两种方式中的任意一种都是可以的。最近工作中,代…...
52单片机独立键盘控制数码管计数
前言 使用52单片机实现独立键盘控制数码管计数 代码 #include<reg52.h> #define uchar unsigned char #define uint unsigned intsbit key2 P3^4; sbit key3 P3^5; sbit key4 P3^6; sbit key5 P3^7;char code smg[] {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x…...
完美解决 在将最终稿件上传到 IEEE PDF eXpress进行格式检查是出现“font not embedded“的问题 (不会出现自动压缩图像的现象)
最近中了一篇IEEE的论文,在校稿阶段,final paper是需要通过IEEE PDF eXpress网站的格式检查,然后出现一下问题: Errors: Font TimesNewRomanPS-BoldMT, TimesNewRomanPS-ItalicMT, TimesNewRomanPSMT is not embedded 用人话说就…...
零基础学习CSS
01-CSS初体验 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容)。 书写位置:title 标签下方添加 style 双标签,style 标签…...
基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(五)FineBI可视化
文章目录 22:FineBI配置数据集23:FineBI构建报表24:FineBI实时配置测试附录二:离线消费者完整代码 22:FineBI配置数据集 目标:实现FineBI访问MySQL结果数据集的配置 实施 安装FineBI 参考《FineBI Windows…...
Python逆向爬虫案例: 某网站AES逆向解密
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了࿰…...
ONNX runtime本地终端部署
1、class_index.csv文件: ID,English,Chinese 0,A,你 1,B,我 2,C,他 3,D,她2、classification.onnx 3、单张图像处理代码如下: import onnxruntime import torch import torch.nn.functional as F import pandas as pd from PIL import Image from tor…...
Linux性能优化--性能工具:特定进程CPU
4.0 概述 在用系统级性能工具找出是哪个进程降低了系统速度之后,你需要用特定进程性能工具来发现这个进程的行为。对此,Linux提供了丰富的工具用于追踪一个进程和应用程序性能的重要统计信息。 阅读本章后,你将能够: 确定应用程…...
技术人员转岗产品经理,有优势吗?
产品经理是一个非技术型的岗位,但是懂一些技术相关的知识会更好的和技术部门沟通,能更好的从技术部门的角度理解需求的可行性。所以这么说来,技术转产品经理相对来说更加有优势。 任何事情不可能都是只有好处没有坏处的,同样的&a…...
使用IDEA2022.1创建Maven工程出现卡死问题
使用IDEA创建Maven工程出现卡死问题,这个是一个bug 这里是别人和官方提供这个bug,大家可以参考一下 话不多说,上教程 解决方案: 方案1:更新idea版本 方案2:关闭工程,再新建,看图...
Nuttx Syscall
在Nuttx系统中,mksyscall工具用于根据syscall/syscall.csv文件生成供用户调用的接口和内核中对应的接口。具体来说,mksyscall -p system.csv生成供用户调用的接口,而mksyscall -s system.csv生成内核中调用的接口。 在syscall/syscall.csv文…...
HTTP协议中GET请求和POST请求的区别
1. 形式上: GET请求:参数包含在URL中,意味着参数的长度是有限的,并且参数只能是ASCII码的形式。 POST请求:参数包含在请求体中,参数的长度是不受限,并且参数支持多种数据类型。 2.安全性 GET请…...
【广州华锐互动】利用VR开展施工现场安全培训,提高员工安全意识水平
随着科技的不断发展,虚拟现实(VR)技术已经逐渐渗透到各个领域,为我们带来了前所未有的沉浸式体验。在建筑施工行业,VR技术的应用也日益广泛,从设计、施工到管理,都可以看到VR技术的身影。而在这…...
Cornerstone for Mac:高效SVN管理的黄金标准
在当今的软件开发领域,版本控制系统是不可或缺的一部分。其中,Subversion(SVN)是一个广泛使用的版本控制系统,有助于团队协同工作,实现代码的版本管理和追踪。对于Mac用户来说,Cornerstone是一款…...
数据结构之顺序表的模拟实现
💕"世事犹如书籍,一页页被翻过去。人要向前看,少翻历史旧账。"💕 作者:Mylvzi 文章主要内容:数据结构之顺序表的模拟实现 /*** Created with IntelliJ IDEA.* Description:* User: 绿字* Date:…...
R6G azide, 5-isomer具有良好的水溶性,2135330-71-9
试剂 | 基础知识概述(部分): 英文名称:R6G azide, 5-isomer CAS:2135330-71-9 分子式:C30H32N6O4 分子量:540.61 规格标准:10mg,25mg,50mg,可提供mg级以…...
深圳清关代理口碑爆棚,不找它你就亏大啦!
事件经过某外贸公司近期有一批从国外进口的电子产品要在深圳口岸清关。该公司原本以为按照常规流程操作即可顺利完成清关,便自行准备了相关单证资料。然而,当货物到达深圳口岸进行报关时,却遭遇了清关受阻的情况。海关在合规审核过程中发现&a…...
基于FONA808与Adafruit IO的实时GPS追踪系统实战
1. 项目概述与核心价值又到了一年一度的万圣节,孩子们最兴奋的“不给糖就捣蛋”活动即将上演。作为一个技术爱好者兼“鸡娃”家长,我每年都在琢磨怎么让这个传统活动变得更有趣、更高效。去年,我儿子抱怨说走了半天路,拿到的糖果却…...
【麒麟系统-解释器错误:权限不足】
执行脚本后发现无法执行权限不足查看发现当前是有执行权限的;最后发现可能是有安全限制: 执行命令getstatus 执行这个命令即可:sudo setstatus softmode...
对比直接使用官方API,体验通过Taotoken进行多模型选型与切换的便捷性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用官方API,体验通过Taotoken进行多模型选型与切换的便捷性 在实际的开发工作中,我们常常需要根据…...
数据分析师简历封神指南:数据可视化 + 业务洞察双重点
引言:别让你的简历,死在6秒筛选期 “熟练使用Python、SQL、Tableau,擅长数据分析与可视化”——当HR第101次看到这句千篇一律的技能描述时,手指已经悬在“删除”键上。2026年数据分析师岗位竞争有多卷?某招聘平台数据显示,平均每个岗位收到250份简历,HR平均花6秒扫描一…...
RocketMQ 源码解析——Controller 高可用切换架构
延伸阅读:🔍「RocketMQ 中文社区」 持续更新源码解析/最佳实践,提供 RocketMQ 专家 AI 答疑服务 一、原理及核心概念浅述 1.1 核心架构 1.2 核心概念 controller:负责管理broker间的主备关系,可以挂在namesrv中&…...
生物 --- 免疫力
1、免疫的概念免疫是人体的一种生理功能。识别“自己”和“非己”。破坏和排斥进入人体内的抗原物质,如病原体。指机体识别和清除外来入侵抗原及体内突变或衰老细胞,并维持自身内环境稳定的生理功能。2、免疫系统的构成免疫系统主要由免疫器官、免疫细胞…...
YOLOv8改进策略【卷积层】| TGRS2024 小波变换特征分解器(WTFD)双频互补提精度 + 轻量分解保空间[特殊字符]
一、本文介绍 本文记录的是利用WTFD小波变换特征分解器优化YOLOv8的目标检测网络模型。 WTFD(小波变换特征分解器)通过Haar小波变换双迭代分解与分通道轻量化特征映射结合,为纯空间域分割网络引入互补的频域特征分支。本文利用WTFD模块,先通过点卷积增强输入空间特征的非…...
Spring AI + Ollama 深度实战:从 RAG 问答到 Graph Agent 全流程指南
场景 Spring AI RAG 检索增强生成:概念、实战与完整代码: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/161055108 基于上面的基础,实现Graph工作流编排的简单示例。 大语言模型(LLM)在实际应用中面…...
基于MCP协议为Gemini模型构建安全可控的外部工具链
1. 项目概述:当MCP遇上Gemini,一个AI代理的“瑞士军刀”诞生了如果你最近在折腾AI Agent(智能体)或者RAG(检索增强生成)应用,大概率听说过“Model Context Protocol”,也就是MCP。简…...
