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级以…...
B0505S-2WR3 适配优选 DB2-05S05LS,DC-DC 电源模块参数与场景深度解析
在工业控制、仪器仪表、通信接口等标准化电路设计中,2W 级 5V 转 5V 隔离 DC-DC 模块是高频应用的核心器件。DB2-05S05LS 和 B0505S-2WR3 作为该功率段的主流型号,在电气规格、物理规格与场景适配性上呈现高度契合,为硬件工程师的标准化选型提…...
从顺序图反推代码:如何设计一个高内聚低耦合的网上书城后端服务?
从顺序图到高内聚低耦合架构:网上书城后端设计实战 当我们在白板上画完一张精美的顺序图时,真正的挑战才刚刚开始——如何将这些交互箭头转化为可维护、易扩展的代码结构?我曾参与过一个日均订单量超过5万单的图书电商平台重构,深…...
别再写重复代码了!微信小程序分页加载与下拉刷新,一个通用组件就搞定
微信小程序分页加载与下拉刷新的工程化实践 每次开发新页面时,你是否还在重复编写分页加载和下拉刷新的逻辑?作为一个有追求的小程序开发者,我们需要思考如何将这些通用功能抽象成可复用的组件或Mixin。本文将带你从工程化角度,设…...
SenseVoicecpp ggml-vulkan.cpp大模型[AI人工智能(七十八)]—东方仙盟
ggml-vulkan.cpp核心代码ggml-vulkan 里负责【矩阵乘法 量化模型推理 GPU 调度】的核心代码。1. 核心功能支持所有量化类型:Q4_K、Q5_K、Q8_0、IQ2/3/4、F16、F32 等自动选择最优计算管线:根据数据类型选 FP16/FP32 精度管理 GPU 内存:显存…...
嵌入式开发中的MVC模型应用与实践
1. 嵌入式开发中的MVC模型概述在嵌入式系统开发领域,我们常常面临一个关键挑战:如何组织复杂项目中的代码结构?作为一名有十年经验的嵌入式开发者,我发现很多新手工程师习惯想到哪写到哪,结果项目稍具规模就陷入难以维…...
Ubuntu18.04下Gazebo加载DEM高程图踩坑实录(附完整解决方案)
Ubuntu 18.04下Gazebo加载DEM高程图的完整实践指南 在机器人仿真和地理信息系统研究中,数字高程模型(DEM)是构建真实地形环境的关键数据。Gazebo作为一款功能强大的机器人仿真平台,支持DEM高程图的加载与渲染,但在实际…...
生成历史场景数据(实际应用替换为真实数据)
电热冷氢综合能源系统分布式鲁棒优化运行,基于Wasserstein 距离,包含结果绘图和随机优化和鲁棒优化对比场景,代码备注详细最近在搞综合能源系统的兄弟肯定对"不确定性"这词深恶痛绝——电力负荷说变就变,氢能价格跟过山…...
使用vue3+ts构建企业级文件传输管理系统:状态管理、性能优化与用户体验的深度实践
使用vue3+ts构建企业级文件传输管理系统:状态管理、性能优化与用户体验的深度实践 在现代企业应用中,文件传输是核心功能之一。一个高效的传输管理系统不仅需要处理大量文件,还需提供直观的状态反馈、灵活的操作选项和流畅的用户体验。今天,我将分享一个基于Vue 3和TypeSc…...
当多智能体遇上频域干扰:一场代码与策略的华尔兹
[1]2024IEEE《基于分层多智能体强化学习的协同干扰智能策略决策方法》(代码文献) MATLAB 多智能体 协同 学习资料 [2]使用PettingZoo和Gymnasium创建的用于干扰任务的多智能体ParallelEnv。 [3]单一转换的优先体验重放的代码,以及转换序列的序…...
Javase(三)三大特性之封装
封装现实生活中,比如鼠标,我们知道它是全部装在一个装置里面,只暴露出一个接口能够我们充电或连接电脑,里面的设计、电路等都不暴露给我们这些使用者看,这样子能很好的保护里面的东西不被破坏。在Java中也是如此&#…...
