主从复制
约 707 字大约 2 分钟
2025-08-30
MySQL 主从复制是一种数据同步机制,通过将主数据库的 DDL(数据定义语言)和 DML(数据操作语言)操作记录到二进制日志(BinLog)中,并将这些日志传输到从服务器。从服务器重放这些日志,以保持与主服务器的数据一致性。
复制过程
MySQL 主从复制的核心步骤如下:
- 从服务器线程初始化:从服务器启动复制时,创建两个线程:
- I/O 线程:负责与主服务器通信。
- SQL 线程:负责在从服务器本地执行操作。
- 主从连接建立:
- 从服务器的 I/O 线程主动连接主服务器。
- 主服务器响应连接后,启动一个 BinLog Dump 线程,专门处理与从服务器 I/O 线程的交互。
- BinLog 位置同步:
- 从服务器的 I/O 线程向主服务器指定起始位置(例如 BinLog 文件名和偏移量),请求传输 BinLog。
- 主服务器在数据更新过程中,将更改操作记录到 BinLog 中。
- BinLog 数据传输与中继:
- BinLog Dump 线程检测 BinLog 变化后,从指定位置读取内容,并推送给从服务器的 I/O 线程(基于拉取模式,允许从库管理同步进度和处理延迟)。
- I/O 线程接收数据后,写入从服务器的 中继日志(Relay Log)。
- 日志重放与数据应用:SQL 线程持续读取 Relay Log 内容,解析为 SQL 操作,并应用到从服务器的数据表中,确保数据同步。

复制方式
MySQL 支持多种复制方式,以平衡数据一致性和性能:
- 异步复制(默认方式):主库执行完事务后立即返回客户端,不等待从库完成同步。
- 缺点:主库故障时可能导致数据丢失(未同步的变更在从库升级为主库后缺失)。
- 适用场景:高性能需求但对数据一致性要求较低的环境。
- 全同步复制:主库执行事务后,等待所有从库完成数据同步才返回客户端。
- 缺点:性能显著下降(尤其从库数量多时,延迟增加)。
- 优点:数据安全性最高,确保零丢失。
- 半同步复制:主库执行事务后,等待至少一个从库确认接收事件(无需等待所有从库完成执行),再返回客户端。
- 优点:平衡安全性和性能(减少数据丢失风险,同时避免全同步的高延迟)。
- 适用场景:对数据一致性有中等要求的环境。