在分布式数据库架构中,MySQL 主从复制是支撑业务高可用、高并发的核心技术。它通过 "一份数据,多份副本" 的模式,解决了单库架构的单点故障、性能瓶颈等痛点。本文将从定义、核心作用、工作原理到具体实现方法,全面拆解 MySQL 主从复制技术。
1 什么是 MySQL 主从复制?
MySQL 主从复制(Master-Slave Replication)是指将主库(Master) 的所有数据变更,实时或近实时同步到一个或多个从库(Slave) 的分布式架构方案。
-
主库:专注处理写操作(
INSERT/UPDATE/DELETE),是数据变更的 "源头"; -
从库:专注处理读操作(
SELECT),是主库的完整数据副本; -
核心目标:保持主从数据一致性,支持 "一主多从" 或 "多主多从" 扩展。
简单来说,主从复制让数据具备 "冗余备份" 和 "分布式访问" 能力,是数据库架构升级的基础。
2 主从复制的核心作用:不止是数据备份
主从复制并非单纯的备份工具,而是业务稳定运行的 "压舱石",核心作用可概括为三点:
2.1 数据备份与灾难恢复
-
无侵入备份:从库作为数据副本,可离线备份从库数据,避免备份操作占用主库资源;
-
快速灾备:主库宕机时,可直接使用从库恢复数据,或切换从库为主库,大幅缩短业务中断时间。
2.2 提升系统高可用性
-
解决单点故障:多实例冗余架构,避免单库宕机导致整个业务瘫痪;
-
自动故障切换:结合 MHA、Orchestrator 等工具,主库故障时可自动将从库 "升级" 为新主库,实现业务无感知切换(常见方案:双主 + Keepalived)。
2.3 读写分离与负载均衡
-
分流主库压力:主库写、从库读,适用于 "读多写少" 场景(如电商详情页、新闻平台),可降低主库负载 50% 以上;
-
水平扩展读能力:通过增加从库数量(如 "一主五从")分摊读请求,无需升级主库硬件,降低扩容成本。
3 工作原理:日志同步 + 事务回放
主从复制的核心是 "二进制日志(Binlog)" 和从库的两个关键线程,整个流程分 4 步:
3.1 前提条件
主库必须开启 Binlog(二进制日志),用于记录所有写事务。配置方法:
在 my.cnf(Linux)或 my.ini(Windows)中添加:
conf
log-bin=mysql-bin # Binlog 文件名前缀
server-id=1 # 主库唯一ID(需与从库不同)
重启 MySQL 生效。
3.2 核心流程(4 步)
-
主库记录 Binlog:应用程序执行写操作后,主库先执行事务,再将操作记录写入 Binlog;
-
从库 IO 线程拉取 Binlog:从库启动 IO 线程,连接主库并请求未同步的 Binlog;
-
主库 Dump 线程推送 Binlog:主库启动 Dump 线程,将 Binlog 未同步部分推送给从库 IO 线程;
-
从库 SQL 线程回放事务:从库 IO 线程将接收的 Binlog 写入本地中继日志(Relay Log),SQL 线程实时解析中继日志,在从库重新执行事务,实现数据同步。
关键特点:IO 线程与 SQL 线程独立工作,避免因慢查询导致同步阻塞。
4 两种实现方法:位点复制 vs GTID 复制
根据 "同步位置标识" 的不同,主从复制分为两种实现方式,适用于不同场景:
4.1 基于位点(Position)的复制(传统方案)
核心原理
通过 "主库 Binlog 文件名 + 文件内位置" 确定同步起点。例如:从 mysql-bin.000003 的第 156 个字节开始同步。
查看主库位点信息
在主库执行命令:
sql
show master status\G
执行结果(关键字段):
text
File: mysql-bin.000003 # 当前写入的 Binlog 文件名
Position: 156 # 最新事务位置
Binlog_Do_DB: test # 仅同步指定数据库(可选)
Binlog_Ignore_DB: mysql # 忽略同步的数据库(可选)
优缺点
-
✅ 优点:实现简单、兼容性强(支持 MySQL 5.6 以下版本);
-
❌ 缺点:需手动记录位点,Binlog 轮转后易出错;主从切换时需手动确认新位点,运维成本高。
适用场景
单主库、从库数量少的简单架构,或低版本 MySQL 环境。
4.2 基于 GTID 的复制(推荐方案)
核心原理
GTID(Global Transaction Identifier)是全局唯一事务 ID,格式为 uuid:sequence_number(如 3E11FA47-71CA-11E1-9E33-C80AA9429562:123)。
-
主库每个写事务自动分配唯一 GTID;
-
从库通过 "是否已执行该 GTID" 判断是否同步,无需手动指定位点。
核心优势
-
自动定位同步起点,简化配置;
-
故障切换高效,无需人工干预;
-
避免重复执行事务,防止数据不一致。
优缺点
-
✅ 优点:自动化程度高、运维成本低,支持多主库架构;
-
❌ 缺点:不支持非事务性操作(如
CREATE TABLE ... SELECT),对 SQL 语句有一定限制(如不能使用自定义变量SET @a=1)。
适用场景
MySQL 5.6+ 版本、多主库架构、从库数量多且需频繁切换的复杂场景。
总结
MySQL 主从复制是分布式数据库架构的基础,通过 "数据冗余" 实现灾备、高可用和负载均衡。选择实现方案时:
-
简单架构或低版本 MySQL:优先基于位点的复制;
-
复杂架构或高可用需求:优先基于 GTID 的复制(自动化程度高、运维更高效)。
后续将分享主从复制的具体配置步骤、常见问题排查及高可用方案实践,敬请关注!