一、现象
凌晨对线上一张表添加索引,表数据量太大(1亿+数据,数据量50G以上),造成主从延迟几个小时,各个依赖从库的系统无法查询数据,最终影响业务。
现在就梳理下主从延迟的原理。
二、原理
根据 MySQL 官方文档 MySQL Replication Implementation Details 中的描述,MySQL 主从复制依赖于三个线程:master
一个线程(Binlog dump thread
),slave
两个线程(I/O thread
和 SQL thread
)。主从复制流程如下图:

master 服务器和 slave 服务器连接时,创建 Binlog dump thread
以发送 bin log
数据:
- 一个
Binlog dump thread
对应一个 slave 服务器; Binlog dump thread
从bin log
获取数据时会加锁,获取到数据后,立即释放锁。