MySQL--主从复制--原理

在这里插入图片描述

MySQL 主从复制原理

这张图片清晰展示了 MySQL 主从复制的工作流程,主库(Master)与从库(Slave)之间如何通过日志文件与线程协同完成数据同步。下面结合图片中的关键流程和组件进行详细讲解。


1. 主库的数据变更记录

在主库(Master)上:

  • 数据变更(data change)
    当主库执行写操作(如 INSERTUPDATEDELETE)时,这些操作不仅会修改主库的数据库数据,还会被**记录到二进制日志(binlog)**文件中。

    二进制日志(binlog) 是主从复制的核心数据来源,它记录了所有对数据库造成更改的 SQL 语句(不包含 SELECT 读操作)。主库只负责写入 binlog,复制时从库会读取这些日志。


2. 从库的复制线程(Slave)

在从库(Slave)上,复制主要依赖两个线程:

  • I/O 线程(IOThread)

    • 从库的 I/O 线程连接主库,并从主库的 binlog 文件中读取日志内容,将其写入到从库的**中继日志(Relay log)**中。
    • 这一过程如图所示,主库的 binlog 被 I/O 线程读出并写入到中继日志文件中。
  • SQL 线程(SQLThread)

    • SQL 线程从中继日志中读取日志内容,并重放日志中的 SQL 语句,将变更应用到从库的数据中,完成数据同步。
    • 这一重放过程是将从主库同步来的日志按顺序执行,确保从库的数据与主库保持一致。

3. 工作流程总结

主从复制过程可概括为以下几个步骤:

  1. 主库执行写操作,将数据更改记录到 binlog(如图中的 “data change”)。
  2. 从库的 I/O 线程连接主库,从主库读取 binlog 日志,并将日志保存到从库的中继日志(Relay log)。
  3. 从库的 SQL 线程从中继日志中读取日志内容,重放日志中的 SQL 语句,将主库的变更同步到从库。

4. 线程之间的配合

从库通过两个线程并行处理日志:

  • I/O 线程负责读写主库的 binlog 并写入 Relay log
  • SQL 线程负责从 Relay log 中读取并重放 SQL 语句
    这两者并行运行,可以减少同步延迟,提升复制效率。

5. 复制过程中的几个关键日志

  • binlog(主库的二进制日志):记录主库上的数据更改。
  • Relay log(从库的中继日志):I/O 线程从主库读取 binlog 后写入中继日志,供 SQL 线程执行重放操作。

6. 数据同步与延迟

由于从库要依次拉取主库的 binlog,并重放日志中记录的 SQL 语句,可能存在短暂延迟。如果主库写入频繁、网络不稳定或从库性能较低,从库的数据可能会滞后于主库。这种现象在监控 SHOW SLAVE STATUS\G 中可以通过 Seconds_Behind_Master 字段体现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值