当前位置: 首页 > news >正文

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理

MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器(主服务器,Master)复制到一个或多个 MySQL 数据库服务器(从服务器,Slave)的技术。以下简述其原理,主要包含三个核心组件和三个主要步骤:

核心组件

  • 二进制日志(Binary Log):位于主服务器上,主服务器会将所有对数据库进行更改的操作(如 INSERT、UPDATE、DELETE 等)以二进制的形式记录到二进制日志文件中。这些日志记录了数据修改的具体内容和执行顺序,是主从复制的基础数据来源。

  • 中继日志(Relay Log):存在于从服务器上,从服务器通过 I/O 线程从主服务器的二进制日志中读取更新事件,并将这些事件写入到本地的中继日志文件中。中继日志起到了缓存和中转的作用,确保从服务器能够按顺序处理主服务器的更新。

  • SQL 线程:从服务器上的 SQL 线程负责读取中继日志中的事件,并将这些事件在从服务器上重新执行一遍,从而实现主从数据的同步。

工作步骤

1. 主服务器记录二进制日志

  • 当主服务器上发生数据更改操作(如插入、更新、删除数据)时,MySQL 会将这些更改操作记录到二进制日志中。二进制日志以事件(Event)的形式存储,每个事件对应一个具体的数据库更改操作。例如,当执行一条 INSERT 语句向表中插入数据时,主服务器会将该 INSERT 操作作为一个事件记录到二进制日志中。

2. 从服务器读取主服务器二进制日志

  • 从服务器上有一个 I/O 线程,它会与主服务器建立连接,并请求主服务器发送其二进制日志。主服务器接收到请求后,会将二进制日志中的更新事件发送给从服务器的 I/O 线程。从服务器的 I/O 线程将接收到的更新事件写入到本地的中继日志中。

3. 从服务器执行中继日志中的事件

  • 从服务器上的 SQL 线程会不断地监控中继日志,当发现中继日志中有新的事件时,会按照事件的顺序依次读取并执行这些事件。例如,如果中继日志中记录了一个 INSERT 事件,SQL 线程会在从服务器的相应表中执行相同的 INSERT 操作,从而保证从服务器的数据与主服务器的数据一致。

二、MySQL主从复制步骤

注意:firewall-cmd和getenforce处于关闭状态

1、基于binlog的主从同步

Master配置

[root@openEuler-1 ~]# yum install -y mysql-server#配置文件(主机克隆),注意://三台主从库的id必须不同
#查看命令 vim /var/lib/mysql/auto.cnf[root@openEuler-1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=1
[root@openEuler-1 ~]# systemctl restart mysqld#授权用户
mysql> create user rep@'192.168.159.%' identified with mysql_native_password by 'MySQL@123';
mysql> grant replication slave on *.* to rep@'192.168.159.%';
mysql> show master status;  //查看主服务器状态,日志用于从服务器同步,position是当前定位

Slave配置

#配置文件
[root@openEuler-2 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[root@openEuler-2 ~]# systemctl restart mysqld[root@openEuler-3 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[root@openEuler-3 ~]# systemctl restart mysqld
[root@openEuler-3 ~]##设置复制参数,两个Slave一样的配置
mysql> change master to-> master_host='192.168.159.133',-> master_user='rep',-> master_password='MySQL@123',-> master_log_file='binlog.000004',->  master_log_pos=1565;
Query OK, 0 rows affected, 9 warnings (0.03 sec)#启动复制进程,两个Slave都启动
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)

 检查从库状态

mysql> show slave status \G

 

2、 基于gtid的主从同步配置

准备工作,停止从库的复制

stop slave

 Master配置

#修改配置文件
[root@Master ~]# vim /etc/my.cnf.d/mysql-server.cnf
#在最后添加
gtid_mode=ON
enforce-gtid-consistency=ON#重启MySQL服务
[root@Master ~]# systemctl restart mysqld.service#重置二进制日志和GTID
mysql> reset master;#创建用户授予权限
mysql> create user rep@'192.168.159.%' identified with mysql_native_password by 'MySQL@123'; 
mysql> grant replication slave on *.* to rep@'192.168.159.%';#重新加载授权表
mysql> flush privileges;

Slave配置

#修改配置文件
[root@Slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
gtid_mode=ON
enforce-gtid-consistency=ON#重启服务
[root@Slave1 ~]# systemctl restart mysqld.service#配置连接到主库
mysql> change replication source to-> source_host='192.168.159.133',-> source_port=3306,-> source_user='rep',-> source_password='MySQL@123',-> source_auto_position=1;mysql> start replica;

  检查从库状态

mysql> show slave status \G

相关文章:

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器(主服务器,Master)复制到一个或多个 MySQL 数据库服务器(从服务器,Slave)的技术。以下简述其原理,主要包含三个核…...

计算机网络抄手 运输层

一、运输层协议概述 1. 进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&…...

字符串函数和结构题内存对齐

图下为函数使用&#xff1a; #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }...

【嵌入式Linux应用开发基础】特殊进程

目录 一、守护进程&#xff08;Daemon Process&#xff09; 1.1. 概念 1.2. 特点 1.3. 守护进程的命名 1.4. 创建守护进程的步骤 1.5. 守护进程的实例 1.6. 守护进程的管理 1.7. 影响与处理 二、僵尸进程&#xff08;Zombie Process&#xff09; 2.1. 僵尸进程的定义…...

深度学习pytorch之19种优化算法(optimizer)解析

提示&#xff1a;有谬误请指正 摘要 本博客详细介绍了多种常见的深度学习优化算法&#xff0c;包括经典的LBFGS 、Rprop 、Adagrad、RMSprop 、Adadelta 、ASGD 、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等&#xff0c;通过对这些算法的公式和参数说明进行详细解析…...

rust笔记5-derive属性2

在 Rust 中,derive 是一种自动为结构体或枚举实现特定 trait 的机制。通过 #[derive(...)] 属性,Rust 编译器可以自动生成一些常见 trait 的实现代码,从而减少手动编写重复代码的工作量。 以下是对 Copy、Clone、Hash 和 Default 这几个常用 trait 的详细介绍和示例: 1. C…...

DeepSeek、微信、硅基流动、纳米搜索、秘塔搜索……十种不同方法实现DeepSeek使用自由

为了让大家实现 DeepSeek 使用自由&#xff0c;今天分享 10 个畅用 DeepSeek 的平台。 一、官方满血版&#xff1a;DeepSeek官网与APP 首推&#xff0c;肯定是 DeepSeek 的官网和 APP&#xff0c;可以使用满血版 R1 和 V3 模型&#xff0c;以及联网功能。 网址&#xff1a; htt…...

介绍cherrypick

git cherry-pick 是 Git 中的一个强大命令&#xff0c;用于将一个或多个提交&#xff08;commit&#xff09;从一个分支应用到另一个分支。它允许你选择性地将特定的变更引入到当前分支&#xff0c;而无需合并整个分支。以下是对 git cherry-pick 操作的详细介绍&#xff1a; 1…...

HTTP、HTTPS区别可靠性及POST为什么比GET安全的探讨

一、简述HTTP协议 HTTP底层是TCP实现&#xff0c;TCP是一个可靠的传输层网络协议&#xff0c;但是可靠性不是安全性——可靠但不安全 1、为什么TCP可靠&#xff1f;UDP不可靠&#xff1f; 可靠指的是源和目标可以相互访问以及确保数据的传输顺序&#xff0c;我能通过IP端口访…...

从零到一:Spring Boot 与 RocketMQ 的完美集成指南

1.Rocket的概念与原理 RocketMQ 是一款由阿里巴巴开源的分布式消息中间件&#xff0c;最初用于支持阿里巴巴的海量业务。它基于发布-订阅模型&#xff0c;具备高吞吐、低延迟、高可用和强一致性的特点&#xff0c;适用于消息队列、大规模数据流处理等场景。以下是对 RocketMQ …...

AIGC:开启内容创作新纪元,我们如何看待它的影响与前景?

AIGC的概念 AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;的概念主要是指人工智能生成内容。 这是一种新的人工智能技术&#xff0c;它利用人工智能模型&#xff0c;根据给定的主题、关键词、格式、风格等条件&#xff0c;自动生成各种类型的文本、图…...

10分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统

作者&#xff1a;后端小肥肠 目录 1. 前言 为什么选择DeepSeek&#xff1f; 本文技术栈 2. 环境准备 2.1. 后端项目初始化 2.2. 前端项目初始化 3. 后端服务开发 3.1. 配置文件 3.2. 核心服务实现 4. 前端服务开发 4.1. 聊天组件ChatWindow.vue开发 5. 效果展示及源…...

mac安装Pyspark并连接Mysql

安装Scala, apache-spark, Hadoop brew install scala brew install apache-spark brew install hadoop pip install pyspark注意不要自己另外安装jdk, 会造成版本对不上报错。因为安装apache-spark的过程中会自动安装openjdk。 配置环境变量 JAVA_HOME/opt/homebrew/Cellar…...

深入理解Python多进程编程 multiprocessing

深入理解Python多进程编程 multiprocessing flyfish Python 的 multiprocessing 模块允许创建多个进程&#xff0c;从而可以利用多核处理器的能力来并行执行任务。这意味着程序的不同部分可以在不同的CPU核心上同时运行&#xff0c;极大地提高了处理效率&#xff0c;特别是在…...

jQuery AJAX 方法详解

jQuery AJAX 方法详解 引言 随着互联网技术的不断发展,前端开发领域的技术也在不断更新迭代。jQuery 作为一种广泛使用的前端JavaScript库,极大地简化了DOM操作和事件处理。在众多jQuery功能中,AJAX(Asynchronous JavaScript and XML)方法尤为突出,它允许我们在不重新加…...

青少年编程都有哪些比赛可以参加

Python小学生可参加的赛事&#xff1a; 电子学会青少年编程考级、中国计算机学会编程能力等级认证、蓝桥杯、 信奥赛CSP-J/S初赛/NOIP(推荐C)、编程设计、信息素养、科技创新赛&#xff1b; 升学助力(科技特长生、大学)、企业、出国留学&#xff1b; python比赛&am…...

sql server 数据库 锁教程及锁操作

SQL Server数据库 锁的教程 SQL Server 的数据库锁是为了保证数据库的并发性和数据一致性而设计的。锁机制能够确保多个事务不会同时修改同一数据&#xff0c;从而避免数据冲突和不一致的发生。理解 SQL Server 的锁机制对于开发高效、并发性强的数据库应用非常重要。 1. 锁的…...

存储结构 分类

存储结构 1&#xff0c;顺序存储结构 用一组地址连续的存储单元依次存储线性表的各个数据元素, 适用于频繁查询时使用。 2&#xff0c;链式存储结构 在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)&#xff0c;适用于在较…...

VSCode 中 Git 添加了多个远端,如何设置默认远端

VSCode 中 Git 添加了多个远端&#xff0c;如何设置默认远端 查看分支&#xff1a;设置默认远端手动指定远端 查看分支&#xff1a; * 表示当前默认远端 git branch -vv* master a1b2c3d [origin/main] Fix typo dev d4e5f6g [upstream/dev] Add feature设置默认远端 将本…...

项目中一些不理解的问题

1.Mybatis是干啥的 他是用来帮我们操作数据库的&#xff0c;相当于是我们的一个助手&#xff1a; 我们想要得到数据库中的什么数据&#xff0c;就可以告诉mybatis&#xff0c;他会给我们想要的结果&#xff0c;同时&#xff0c;我们想要对数据库做出什么操作&#xff0c;也可…...

微型制造工厂(SmolFactory)的核心技术与应用实践

1. 项目概述&#xff1a;微型制造工厂的崛起 在工业制造领域&#xff0c;一个名为SmolFactory的新概念正在悄然兴起。这个看似俏皮的名称背后&#xff0c;代表着制造业向小型化、模块化和高度自动化发展的趋势。与传统的大型工厂不同&#xff0c;SmolFactory强调的是"小而…...

ARM710T调试接口与JTAG技术深度解析

1. ARM710T调试接口架构解析ARM710T作为早期ARM7系列处理器的重要成员&#xff0c;其调试接口设计奠定了后续ARM处理器调试架构的基础。该调试系统基于IEEE 1149.1标准&#xff08;即JTAG标准&#xff09;构建&#xff0c;但进行了针对处理器调试的特殊扩展。1.1 核心调试组件A…...

AI图像理解的自我调用机制与思维链技术

1. 项目概述这个项目探索了一种让AI系统通过自我调用机制来处理和理解图像的新方法。不同于传统的图像识别流程&#xff0c;我们尝试构建一个能够主动"思考"图像内容的AI框架&#xff0c;通过递归式的自我调用不断深化对图像的理解。我在计算机视觉领域工作多年&…...

深度解析专业心理咨询数据集:20,000条中文对话语料实战指南

深度解析专业心理咨询数据集&#xff1a;20,000条中文对话语料实战指南 【免费下载链接】efaqa-corpus-zh ❤️Emotional First Aid Dataset, 心理咨询问答、聊天机器人语料库 项目地址: https://gitcode.com/gh_mirrors/ef/efaqa-corpus-zh Emotional First Aid Datase…...

华硕笔记本终极性能优化指南:G-Helper开源控制工具完全手册

华硕笔记本终极性能优化指南&#xff1a;G-Helper开源控制工具完全手册 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Stri…...

Docker AI Toolkit 2026配置仅需117秒?实测Kubernetes Operator集成、Wasm边缘推理支持与CI/CD流水线嵌入全流程

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker AI Toolkit 2026核心特性概览与版本演进分析 Docker AI Toolkit 2026 是 Docker 官方联合 PyTorch、ONNX Runtime 与 Hugging Face 社区推出的首个面向生产级 AI 工作流的原生容器化工具套件。它…...

Excel/CSV分割工具使用指南

在日常办公中&#xff0c;将大型Excel或CSV文件按需求拆分成多个小文件是一个常见需求。本文介绍一款支持批量处理的表格分割工具&#xff0c;提供4种分割模式&#xff0c;适用于不同场景的数据拆分需求。工具简介这是一款Windows桌面端工具&#xff0c;可以批量将Excel&#x…...

如何用PyTorch Image Models实现少样本学习:ProtoNet终极指南

如何用PyTorch Image Models实现少样本学习&#xff1a;ProtoNet终极指南 【免费下载链接】pytorch-image-models The largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResN…...

令牌管理革命:Tiktokenizer如何实现AI成本精准控制

令牌管理革命&#xff1a;Tiktokenizer如何实现AI成本精准控制 【免费下载链接】tiktokenizer Online playground for OpenAPI tokenizers 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokenizer 在AI应用开发实践中&#xff0c;技术团队面临着一个看似简单却影响深…...

别再只会调库了!手把手教你用C语言为51单片机写一个抢答器状态机

从状态机视角重构51单片机抢答器&#xff1a;告别面条代码的实战指南 在嵌入式开发领域&#xff0c;51单片机因其经典架构和丰富生态至今仍活跃在教学和工业控制场景中。但许多开发者在面对稍复杂的逻辑控制时&#xff0c;依然深陷if-else嵌套地狱——标志位满天飞、函数调用关…...