一、MySQL主从复制架构
常见拓扑
-
基础一主一从
-
主库(Master)处理写操作,从库(Slave)同步数据并处理读请求。
-
适用场景:读写分离、数据备份。
-
-
一主多从
-
一个主库对应多个从库,显著提升读性能。
-
风险:主库单点故障(需配合MHA或集群解决)。
-
-
链式复制(级联复制)
-
主 → 从库A → 从库B
-
减轻主库推送压力,但延迟可能累积。
-
-
双主复制(互为主从)
-
两台服务器互为主从,需避免循环复制(
auto_increment_offset
配置)。 -
适用场景:高可用架构(如配合Keepalived)。
-
sequenceDiagramMaster->>Slave: 1. 二进制日志(binlog)Slave->>Master: 2. 连接请求Master->>Slave: 3. 发送binlog事件Slave->>Slave: 4. 写入中继日志(relay log)Slave->>Slave: 5. SQL线程执行relay log
-
主库Binlog
-
所有写操作以事件形式记录到二进制日志(
binlog
)。 -
格式:
STATEMENT
(SQL语句)、ROW
(行数据变更)、MIXED
(混合模式)。
-
-
从库I/O线程
-
连接主库,请求binlog的位置信息(如
master_log_file
+master_log_pos
)。 -
接收binlog事件并写入中继日志(Relay Log)。
-
-
从库SQL线程
-
读取Relay Log中的事件,在从库上重放SQL语句。
-
关键点:异步执行导致主从延迟的可能。
-