MySQL 主从同步的基本原理

news/2024/10/11 10:09:20

1、简介

  • MySQL 主从同步主要通过 二进制日志(binlog) 来实现。以下是主从同步的工作流程
1、主库记录 binlog:当主库执行数据更新操作(如 INSERT、UPDATE、DELETE)时,会将这些数据变更写入 二进制日志(binlog) 中。这个日志文件记录了所有影响数据的 SQL 操作。
2、从库请求 binlog:从库通过一个 I/O 线程 向主库请求其 binlog 文件。主库将这些 binlog 文件发送给从库。
3、从库接收 binlog 并存储到 relay log:从库的 I/O 线程将从主库接收到的 binlog 数据存储在本地的 中继日志(relay log) 中。
4、从库应用 relay log:从库的 SQL 线程,它会读取中继日志中的内容,并执行相应的 SQL 操作,从而将主库的数据变更应用到从库中,保持数据同步。这种流程的核心是 MySQL binlog 日志的复制与重放。

2、详解

  • 主从同步的详细流程
1、主库开启 binlog 日志:
- 当主库执行更新操作(如增删改),这些操作首先会被记录到 binlog 日志文件中。
2、从库启动复制进程
- 在从库上,使用change master to命令配置主库的连接信息,并执行start slave启动从库的复制进程
- 从库开启两个线程:一个I/O线程和一个SQL线程- I/O线程负责从主库上请求并接受binlog文件,并写入relay log文件中- SQL线程负责解析relay log文件中的内容为sql语句,并逐条执行sql语句
3、I/O线程请求biglog
- 从库的I/O线程会通过网络连接主库,发送一个binlog dump请求。这个请求告诉主库“从某个具体的binglog文件及位置(如binlog文件名及位置)开始,发送binlog内容给我”
- 主库收到请求后,从相应的biglog文件的指定位置开始,逐条日志数据发送给从库的I/O线程
4、从库I/O线程写入relay log
- 从库的IO线程将主库发送过来的binlog数据保存到本地的中继日志(relay log)中
5、SQL线程执行中继日志
- 从库的SQL线程不断读取中继日志中的内容,将其当做普通SQL语句执行,应用在从库数据库中
- 当SQL线程执行完所有的relay log后,从库的数据状态就与主库保持一致

3、主从同步的类型

3.1、异步复制:

	默认情况下,MySQL使用异步复制,既主库在执行事务时不会等待从库确认收到binlog并应用该日志。只要主库完成操作,会立即返回给客户端。这种模式下,如果主库发生崩溃,可能会导致部分事务没有传输到从库

3.2、半同步复制

	MySQL5.5引入了半同步复制。在这种模式下,主库在提交事务时,至少会等到一个从库确认收到该事物的binlog日志后才会返回给客户端。因此,它比异步复制提供了更高的数据安全性,但也可能影响主库的性能

3.3、延迟复制

	从库可以设置一个固定的延迟时间来应用relay log中的更改,这成为延迟复制。这种的好处是:当发现主库上的错误操作后,可以通过延迟的从库找回来未被错误操作影响的数据

4、MySQL主从复制的优点

4.1、高可用性

	从库可以用作主库的备份,在主库发生故障时,可以迅速将从库提升为主库,保证业务的连续性

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

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

相关文章

kafka基础学习

Kafka 系列的阶段性总结(万字长文,做好准备)这是 Java 极客技术的第 265 篇原创文章 初识 Kafka 什么是 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎…

降低数据平台成本 ,Apache Airflow迁移上云案例分享

本文介绍了X集团将开源工作流平台Airflow迁移上华为云的案例,重点展示了开源专业服务中的云服务集成适配服务以及能力定制化服务,为此类型企业提供了一个可参考的范例。本文分享自华为云社区《华为云DTSE团队通过开源专业服务,助力马来西亚X集团平滑迁移上云》,作者:华为云…

maven-jar包管理

覆盖更新导致的问题 背景 快速接入sentinel-starter的包。团队80多个服务已经接入<dependency><artifactId>yxt-sentinel-spring-boot-starter</artifactId><groupId>com.yxt</groupId><version>1.0.0</version></dependency>…

[编程笔记] 未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程序

未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程序使用IIS部署站点,指向代码根目录,启动时报“未能加载文件或程序集“...”或它的某一个依赖项。试图加载格式不正确的程序。”     直接启动项目是可以的,解决上述错误很简单,看下项目属性:  …

高效使用AI,一文掌握提示词的编写原则

ChatGPT问世以后就引爆全网热议,它除了能够聊天,还可以根据所提出的要求进行文字翻译、文案撰写、代码撰写等工作。ChatGPT问世以后就引爆全网热议,它除了能够聊天,还可以根据所提出的要求进行文字翻译、文案撰写、代码撰写等工作。在《探秘爆火的ChatGPT:大语言模型是个啥…

mathtype中嵌入数学公式导致行距变大的解决方法

原因是绝大多数情况下使用的是单倍行距,插入公式后撑大了,可以将字体大小换算成行距,然后改成固定值, 1、但是,有些毕业论文可能会 对齐到网格,那固定的值就不是行距大小,而是网格大小,来这儿看看你的网格是多大。 2、创建的新样式,后续用,修改字体位置:标准 3、修改…

Java 接口缓存(Redis + 注解)

为了提升用户体验并优化那些因数据量庞大而导致响应缓慢的统计类接口,我们可以采用以下策略来实现接口数据的缓存机制: 实现步骤:引入缓存机制:利用 Redis 作为缓存存储,因其速度快且支持高并发访问。前端请求处理:在前端请求到达后端之前,通过拦截器(Interceptor)进行…

使用云服务器访问内网NAS

接上回 ZeroTier 搭建Moon节点服务器加速访问速度 , 通过申请的3丰云免费云主机打通内外网之后,我们在终端上使用zerotier客户端来组网,然后访问nas的zerotier内网IP,来访问nas服务。但是这样还是不够方便,每次都需要安装或打开zerotier的客户端才可以,为了解决这个问题,…