MySQL 主从复制涉及到了几个线程?

文章介绍了MySQL的主从同步原理,包括主从复制模式、主主复制模式、链式和环形复制模式。主从同步主要涉及三个线程:主库的BinlogDump线程,从库的I/O线程和SQL线程,通过二进制日志和中继日志实现数据同步。在主从复制过程中,从库的I/O线程读取主库的二进制日志内容,存储到中继日志,再由SQL线程重放事件以保持数据一致。
摘要由CSDN通过智能技术生成

ms-mysql



前言

说到主从,我相信大家在 MySQL 这一节面试经常被问到MySQL 的主从复制原理,而且大家背得滚瓜烂熟。但是在主从复制的过程中,是如何进程数据同步的,又涉及到了哪些线程呢?这些线程又是充当的什么角色呢?

首先,MySQL 有如下几种复制模式:

  • 主从复制模式:A - - > B
  • 主主复制模式:A < - - > B
  • 链式复制模式:A - - > B - - > C
  • 环形复制模式:A - - > B - - > C - - > A

生产环境中一般建议部署为主从模式,这也是比较稳健的一种 MySQL 复制方式,如果想实现一定程度上的高可用,可选择使用主主模式,但是主主模式必须确保任何一个时刻都只有一个数据库是 Active 状态(即读写状态),另一个数据库作为备用,否则就要解决自增键/主键的冲突问题。

一、主从同步原理

简单的主从复制基本原理如下:

  • 主库将更新写入二进制文件,并维护文件的一个索引来跟踪日志循环;
  • 从库复制主库的二进制日志事件到本地的中继日志(relay log);
  • 从库重放中继日志实现与主库的数据同步。

这里不进行深入的源码分析,有兴趣的自行查阅官方文档

二、主从同步分析

MySQL 使用 3 个线程来实现同步(复制)功能,一个线程在主库上,另两个线程在从库上。

当从库执行 start slave指令时,从库将创建一个 I/O 线程,该线程用于连接主库并让主库发送记录在其二进制日志(主库二进制日志)中的语句。此时,主库会创建一个线程将其二进制日志的内容发送到从库,如下图,就是其创建的线程,有两个线程,是因为我的 MySQL 复制是双主双从架构(关于如何部署双主,可看看我前面的博文《基于 Docker 的 MySQL GTID 主从复制与测试》),下图是在某个一个主库上查询的,因此它有两个从库,所有就会生成两个 Binlog Dump 线程,该线程会发送更新的二进制内容到从库,并等待新的二进制日志更新,有更新就会推送。

show processlist\G

image-20230505182639729

然后从库的 I/O 线程读取主库 Binlog Dump 线程发送的内容并将读取的数据存储到从库的中继日志文件中,最后从库的 SQL 线程会将中继日志中的事件重演并最终落盘。I/O 线程与 SQL 线程位于从库上,如下图:

image-20230508095040342

而且要确保这两个线程均处于 Yes 状态,才能实现主从复制。

以上就是 MySQL 主从复制过程涉及到的三个线程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值