一张图让你牢记MySQL主从复制原理|原创

news2024/9/20 22:50:31

本文深入浅出的讲解了MySQL面试中的必考内容——主从同步原理,牢记文中的主从同步流程图即可!

点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达

为什么需要主从复制?

1、读写分离,增强MySQL数据库的可用性。

2、做数据的热备。

3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

什么是mysql的主从复制?

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

f72c63328fe0b3c10263c5a68523ed83.png

主从复制搭建

主从复制的搭建我已经写过了,详细可以看这篇文章:

da2553d86d6ae69565b545736ae83275.jpeg

快速入门Mycat及主从搭建指南


MySQL 主从复制原理

在多个源的复制中,每一个复制源都会打开一个复制通道,这是一个长链接。并且每个复制源都有自己的 IO线程、一个或者多个点 SQL 线程以及 realy log。复制源接收到事务时会将其添加到relay log 中,然后通过SQL thread执行。相关官方文档如下:

In MySQL multi-source replication, a replica opens multiple replication channels, one for each replication source server. The replication channels represent the path of transactions flowing from a source to the replica. Each replication channel has its own receiver (I/O) thread, one or more applier (SQL) threads, and relay log. When transactions from a source are received by a channel's receiver thread, they are added to the channel's relay log file and passed through to the channel's applier threads. This enables each channel to function independently.

主从复制应该是分为第一次建立连接增量数据同步过程。

第一次建立连接

备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个io_thread线程,专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的:

1.在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。

CHANGE MASTER TO MASTER_HOST='192.168.56.104',MASTER_USER='root',MASTER_PASSWORD='qwer_123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

2.在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。

3.主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给备库 B。

4.备库 B 拿到 binlog 后,写到relay log(中继日志)中。

5.备库的 sql_thread 读取 relay log,解析出日志里的命令,并且回放执行。

增量同步详细流程

详细过程如下:158c9efb18bb79733764f7da7f06e91c.png

1.客户端发起 update 请求,MySQL server 端收到请求。

2.生成被修改数据行对应的 unodo log。

3.执行update成功写入内存。

4.InnboDB 生成 redo log ,此时处于 prepare阶段。

5.server 层生成binlog,事务提交时binlog做持久化,此时binlog便可以开始被同步到从库了。

6.redo log 做磁盘持久化,同时向客户端返回update的执行新结果(默认异步复制,以后会讲)。

7.主库发送生成的 binlog 数据。

8.从库的io_thread处理Maste传输过来的数据,保存为relay log。从库服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件

9.SQL thread 读取relay log,解析并且在从库中重放执行,数据同步完成。最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。

MySQL 如何知道 binlog 是完整的?

从库在解析的时候如何知道一个事务是完整的?因为一个事务的 binlog 是有完整格式的:statement 格式的 binlog,最后会有 COMMIT 标记;row 格式的 binlog,最后会有一个 XID event。

如果觉得对你有帮助,欢迎评论分享,感谢阅读!

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

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

相关文章

前端面试题合集

UDP和TCP有什么区别 TCP协议在传送数据段的时候要给段标号;UDP协议不TCP协议可靠;UDP协议不可靠TCP协议是面向连接;UDP协议采用无连接TCP协议负载较高,采用虚电路;UDP采用无连接TCP协议的发送方要确认接收方是否收到数…

[附源码]Python计算机毕业设计Django心理健康系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【Rasa+Pycharm+Tensorflow】控制台实现智能客服问答实战(附源码和数据集 超详细)

需要源码和数据集请点赞关注收藏后评论区留言~~~ 一、数据准备 1:下面以pychar为环境介绍操作步骤,选择file-new project 创建一个新项目 new environment using 选择 Virtualenv 命名虚拟环境的名称,这里假定虚拟环境的名称为venv&#xff…

uniapp获得某个元素的高度并移动到该高度【伸手党福利】

uniapp获得某个元素的高度并移动到该高度 <view class"scrolls"> ... </view>//等view加载完了才取高度setTimeout(()>{const query uni.createSelectorQuery().in(this);query.select(.scrolls).boundingClientRect(data > {console.log("…

20221207英语学习

今日新词&#xff1a; work v.劳动, 干活; 工作; 起作用, 奏效; 运行 mentality n.〈常贬〉心态&#xff0c;心性&#xff1b;思想方法 copyright n.版权, 著作权 turkey n.火鸡&#xff1b;火鸡肉&#xff1b;&#xff08;Turkey&#xff09;土耳其 best-selling adj.最畅…

知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2022):基于异构图GCN和GAT的DTI预测

(2022.4.16)Briefings-DTI-HETA&#xff1a;基于异构图GCN和GAT的DTI预测 目录 (2022.4.16)Briefings-DTI-HETA&#xff1a;基于异构图GCN和GAT的DTI预测 摘要1.引言2.模型方法 2.1 定义3.1 异构图上的GCN3.2 图注意机制3.3 链接预测 4.实验 4.1 案例分析 论文题目&#xff1…

【圣诞节限定】教你用Python画圣诞树,做个浪漫的程序员

最近在各大社交平台看到好多圣诞树&#xff0c;看到大佬们画的圣诞树一个比一个精致&#xff0c;我也特别想尝试画一棵特别的圣诞树。下面是我画的一棵简易的圣诞树&#xff0c;虽然和网络上大佬们的圣诞树相比不是很精致&#xff0c;但是对于萌新们来说&#xff0c;画这样一棵…

Access denied for user ‘root‘ @‘123.233.244.218‘(using password:YES)的解决方法

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 在我们新买了个服务器之后&#xff0c;数据库我觉得是比不可少的吧&#xff0c;任何一个项目&#xff0c;只要是动态的&#xff0c;都需要数据做数据的服务于支撑&#xff0c;目前我…

JUC并发编程第八篇,谈谈你对CAS的理解?自旋锁,CAS底层原理和存在的问题?

JUC并发编程第八篇&#xff0c;谈谈你对CAS的理解?自旋锁&#xff0c;CAS底层原理和存在的问题&#xff1f;一、CAS是什么&#xff1f;二、CAS的底层原理&#xff0c;如何理解UnSafe类&#xff1f;比较&#xff1a;i线程不安全&#xff0c;那 atomicInteger.getAndIncrement()…

笔记本电脑有必要分盘吗?电脑是分盘好还是不分盘好

电脑分区是指把电脑磁盘划分成多个磁盘分区&#xff0c;不同的磁盘分区用于存储相应类型的数据。许多用户新购置的电脑&#xff0c;打开一看&#xff0c;都会发现&#xff1a;“电脑只有一个C盘&#xff0c;没有其他的磁盘。那么&#xff0c;要不要对电脑分区呢&#xff1f;”笔…

共享车位|基于SpringBoot+vue+node共享车位平台的设计与实现

作者主页&#xff1a;编程千纸鹤 作者简介&#xff1a;Java、前端、Pythone开发多年&#xff0c;做过高程&#xff0c;项目经理&#xff0c;架构师 主要内容&#xff1a;Java项目开发、毕业设计开发、面试技术整理、最新技术分享 收藏点赞不迷路 关注作者有好处 文末获得源码 …

2022-12-6-Cmake工程转VS环境开发

新建工程后目录有 .vs 执行文件目录 x64 baseline.sln 首先新建一个目录&#xff0c;下面分为四个目录分别是dll&#xff0c;idl&#xff0c;include&#xff0c;lib 在include目录下面把所有Cmake工程中的include目录下的文件夹拷过来 在x64的debug下面把所有的dll动态库拷…

数据比较器,对比数据前后变化细节

前言 在开发的过程中&#xff0c;有时候需要对数据进行比对&#xff0c;来判断是否发生变化。如果一个字段一个字段比较&#xff0c;就太麻烦了。所以通过整合注解与反射的方式&#xff0c;实现一个通用的实体数据比较框架。 设计 使用注解&#xff0c;确定需要比较的属性。…

进程管理笔记

查看进程详情 命令&#xff1a;ps -aux 查看进程 能够观察所有系统的数据 命令&#xff1a;ps la | head -5 命令&#xff1a;ps axjf | head -20 仅查看自己的bash相关的进程 命令&#xff1a;ps l 观察系统所有进程 命令&#xff1a;ps aux 观察进程变化命令 - top …

微服务框架 SpringCloud微服务架构 21 RestClient 操作文档 21.3 更新文档

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构21 RestClient 操作文档21.3 更新文档21.3.1 更新文档21 RestClient 操作文…

Python:函数进阶

目录 一、Python中的推导式 需求一 需求二 二、Python的全局作用域 三、Python的多参数传递 四、Python的装饰器 被装饰的方法不带参数 被装饰的方法带参数 带参数的装饰器 一、Python中的推导式 列表生成式是python内置的一种创建列表的方法&#xff0c;通过在[ ]内部执…

会话跟踪技术(Cookie和Session)

目录概述Cookie基本使用Cookie原理Cookie 存活时间Session基本使用Session原理Session使用细节Seesion 销毁&#xff1a;Cookie和Session的对比最后概述 会话&#xff1a; 用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&…

Mac系统安装Kafka 3.x及可视化工具

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

网络工程师备考3章

注&#xff1a;本章考察较少&#xff0c;冲刺阶段可直接跳过 最常考点&#xff1a;帧中继&#xff0c;HDLC 3.1 公共交换电话网 英文&#xff1a;Public Switched Telephone Network ,PSTN 这种主网架构已经被淘汰了&#xff0c;现在的电话骨干网都是数字信号&#xff0c;目…

web课程设计网页规划与设计 基于HTML+CSS+JavaScript制作智能停车系统公司网站静态模板

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…