详细介绍:Mysql 主从复制。

目录

一,主从复制原理

1.1主要原理

1.1.1 阶段 1:主服务器记录变更(二进制日志)

1.1.2 阶段 2:从服务器拉取日志(I/O 线程)

1.1.3  阶段 3:从服务器重放日志(SQL 线程)

1.2 核心角色与文件

1.2.1、MySQL 主从复制的核心工作过程

二,两日志、三线程、

2.1、两日志(同步的数据载体,核心作用与关联)

1. 二进制日志(Binary Log)

2. 中继日志(Relay Log)

2.2、三线程(同步的执行主体,分工与协作)

1. Dump 线程(主服务器侧)

2. I/O 线程(从服务器侧)

3. SQL 线程(从服务器侧)

2.3、日志与线程的联动逻辑

三,MySQL 有几种同步方式: 三种

3.1、三种核心同步方式(含适用场景)

四,主从复制实验

设置副机,流程差别不大


一,主从复制原理

1.1关键原理

MySQL 主从复制的核心原理是主服务器将信息变更记录到二进制日志,从服务器依据 I/O 线程拉取日志并通过 SQL 线程重放,实现数据同步,具体流程分 3 个阶段:

1.1.1 阶段 1:主服务器记录变更(二进制日志)

主服务器执行写操作(增 / 删 / 改)后,会将执行以 “事件” 的形式写入二进制日志(Binary Log),日志包含操作的时间、内容、位置等信息,是主从同步的 “数据源”。

1.1.2 阶段 2:从服务器拉取日志(I/O 线程)

从服务器启动后,会创建I/O 线程,主动连接主服务器,请求主服务器的二进制日志:

  1. 主服务器创建Dump 线程,与从服务器的 I/O 线程建立连接;
  2. 主服务器将二进制日志中 “从服务器未同步的部分” 发送给 I/O 线程;
  3. 从服务器的 I/O 线程将接收到的日志写入本地的中继日志(Relay Log)

1.1.3  阶段 3:从服务器重放日志(SQL 线程)

从服务器的SQL 线程读取中继日志,解析其中的事件,在从服务器上重复执行这些操作,最终实现与主服务器的数据一致。

1.2 核心角色与记录

角色 / 资料作用
主服务器 Binary Log记录主服务器的所有数据变更执行
从服务器 I/O 线程拉取主服务器 Binary Log,写入本地 Relay Log
从服务器 Relay Log存储从主服务器拉取的日志(临时中转)
从服务器 SQL 线程解析 Relay Log,重放操作实现资料同步

1.2.1、MySQL 主从复制的核心工作过程

  1. 主服务器记录变更:Master(主服务器)执行增 / 删 / 改管理后,会把操作详情以 “事件” 形式写入自身的二进制日志(Binary Log)
  2. 从服务器拉取日志:Slave(从服务器)启动 I/O 线程,连接 Master 并请求二进制日志,Master 通过 Dump 线程将日志发送给 Slave,Slave 将接收的日志存入本地中继日志(Relay Log)
  3. 从服务器重放日志:Slave 的 SQL 线程读取中继日志,解析并重复执行日志中的执行,最终实现与 Master 的材料一致。
  4. 为什么复制?核心目的是 保证数据完整性与高可用性:Master 故障时,Slave 可作为备用服务器切换,避免内容丢失;同时支持读写分离(Master 写、Slave 读),减轻 Master 压力,提升系统性能。
  5. 谁复制谁?由 Slave(从服务器)主动复制 Master(主服务器)的数据,Master 仅负责记录日志和发送日志,不主动推送资料。
  6. 资料变更记录放在哪?主服务器的 二进制日志(Binary Log)是核心存储档案,所有内容变更操作都记录在此,是 Slave 同步的 “数据源”。

二,两日志、三线程、

2.1、两日志(同步的数据载体,核心作用与关联)

1. 二进制日志(Binary Log)

它位于主服务器(Master),是主从同步的 “数据源核心”—— 主服务器执行任何增、删、改数据操作后,都会把操作的详细信息(比如执行的 SQL 语句、操作时间、日志位置)以 “事件” 的形式记录到这份日志里,没有它,从服务器就没有可同步的 “数据依据”。

2. 中继日志(Relay Log)

它位于从服务器(Slave),是临时的 “日志中转站”—— 从服务器不会直接读取主服务器的二进制日志,而是通过专属线程把日志拉取到本地后,先存入这份中继日志,避免直接操作原日志导致的冲突或损坏,后续再由另一个线程从这里读取日志进行材料重放。

2.2、三线程(同步的执行主体,分工与协作)

1. Dump 线程(主服务器侧)

它是主服务器专门对接从服务器的 “日志发送线程”—— 当从服务器发起日志请求时,它会主动读取主服务器二进制日志中 “未同步的部分”,接着把这些日志数据准确发送给从服务器,全程只负责日志读取和传输,不参与信息操作。

2. I/O 线程(从服务器侧)

它是从服务器的 “日志拉取线程”—— 会主动连接主服务器的 Dump 线程,发起日志同步请求,接收主服务器发送的二进制日志数据,再把这些信息完整写入到从服务器本地的中继日志中,相当于 “搬运工”,只负责日志的传输和存储,不解析、不执行。

3. SQL 线程(从服务器侧)

它是从服务器的 “数据重放线程”—— 会持续读取中继日志中的 “事件”,逐一解析这些事件对应的操作(比如当初主服务器执行的增删改 SQL),接着在从服务器上重复执行这些管理,最终让从服务器的资料和主服务器保持一致,相当于 “执行者”,只负责日志解析和数据同步。

2.3、日志与线程的联动逻辑

主服务器执行数据变更→写入二进制日志→从服务器 I/O 线程连接主服务器 Dump 线程→Dump 线程发送二进制日志→I/O 线程将日志写入中继日志→SQL 线程读取中继日志并重放执行→数据同步结束。

三,MySQL有几种同步方式: 三种

MySQL 核心的三种同步方式(按数据一致性、性能优先级分类),具体说明如下:

3.1、三种核心同步方式(含适用场景)

3.1.1、异步复制(MySQL 默认同步方式)

核心原理是主服务器(Master)执行完增删改数据操作后,直接向客户端返回成功结果,完全不等待从服务器(Slave)的任何确认 —— 既不用等从服务器接收日志,也不用等从服务器重放数据。它的优势是性能最高,主服务器无需额外等待,能快捷响应写请求,但数据一致性相对较低:如果主服务器突然故障,可能存在部分已返回给客户端的操作,还没来得及同步到从服务器,导致少量数据丢失。此种方式适合多数互联网场景(比如电商商品展示、博客发布),优先保证写入性能,对少量数据丢失有容忍度。

3.1.2、半同步复制(Semi-Sync)

它是异步复制的优化版,核心逻辑是主服务器执行完数据操作后,不会立刻返回结果,而是需要等待至少 1 个从服务器确认 “已接收二进制日志并写入本地中继日志”,才会向客户端返回成功。相比异步复制,它的数据一致性更高 —— 能确保已返回给客户端的操作,至少有一个从服务器拿到了日志,即便主服务器故障,也能从这个从服务器恢复数据,不会丢失已确认的操作;但性能会略受影响,主服务器得等待从服务器的确认响应,不过影响程度可控。适合对资料一致性有一定要求的场景(比如支付记录、订单信息),需要兼顾可靠性和性能,无法接受关键数据丢失。

3.1.3、全同步复制

说,只有所有从服务器的数据都和主服务器完全一致,主服务器才会告知客户端处理成功,几乎不会出现数据丢失的情况,但性能损耗也最大 —— 主服务器的响应速度完全依赖所有从服务器的同步效率,从服务器越多、网络越慢,主服务器的写入延迟就越明显。这种方式仅适用于对数据一致性要求极高的核心场景(比如核心金融交易、医疗数据记录),允许牺牲性能来换取绝对的数据安全,不能接受任何材料不一致。就是这是数据一致性最高的同步方式,核心规则是主服务器执行完数据执行后,必须等待所有从服务器都确认 “已搞定日志重放,数据同步完成”,才能向客户端返回成功。也就

主服务器等待从服务器确认的 “阶段” 不同:异步不等待、半同步等 “日志接收”、全同步等 “素材同步完成”,由此决定了一致性和性能的取舍。就是三种方式的核心区别,本质

四,主从复制实验

环境部署cetos7.9
虚拟机服务环境
Master服务器:192.168.100.14 mysql5.7
slave1服务器:192.168.100.17 mysql5.7
Slave2服务器:192.168.100.20 mysql5.7

关闭安全服务

主从服务器时间同步
ntpdate ntp.aliyun.com #时间同步

两台SLAVE服务器
跟着上述步骤安装时间同步服务
、部署主从同步
master服务器修改配置文件

编辑完重启

登录mysql

编辑

刷新权限

查看master数据库状态

以上可见产生了master-bin.000001日志文档,定位为604

设置副机,流程差别不大

vi /etc/my.cnf    编辑以下内容

进入mysql编辑  mysql -uroot -p

在从服务器 MySQL 中执行:

执行以下命令检查是否成功

show slave status\G

第二台副机

在主机创建数据库

在俩台副机查看结果

posted @ 2026-01-06 09:10  clnchanpin  阅读(31)  评论(0)    收藏  举报