主从复制 - 概述与原理
主从复制把主库的 DDL / DML 通过 binlog 传到从库,从库重做这些日志,从而保持数据同步。核心价值是故障切换、读写分离、从库备份。
一、概述
- 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(重做),从而使得从库和主库的数据保持同步。
- MySQL 支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。
Master(主库) ──binlog──▶ Slave(从库)
└── 也可作为其他从库的 Master(链状复制)
优点
| 优点 | 说明 |
|---|---|
| 故障切换 | 主库出现问题,可以快速切换到从库提供服务 |
| 读写分离 | 降低主库的访问压力 |
| 从库备份 | 可以在从库中执行备份,避免备份期间影响主库服务 |
二、原理
复制分成三步:
- Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。
- 从库读取主库的二进制日志文件 Binlog,写入到从库的中继日志 Relay Log。
- Slave 重做中继日志中的事件,将改变反映到自己的数据。
master:data change → binlog
│ read
▼
slave: IO thread ──write──▶ Relay log ──read──▶ SQL thread ──replay──▶ 数据
| 线程 | 所在位置 | 职责 |
|---|---|---|
| IO thread | 从库 | 读取主库 binlog,写入从库的 relay log |
| SQL thread | 从库 | 读取 relay log 并在从库重放 |
复制是异步的:主库提交事务后不等从库确认,因此存在主从延迟;
SHOW REPLICA STATUS中的Seconds_Behind_Source可观察延迟。
三、与 binlog 的关系
- 主从复制依赖二进制日志,主库必须开启
log_bin。 binlog_format影响复制可靠性:ROW记录行变更,最可靠;STATEMENT日志小,但部分语句可能主从不一致;MIXED自动切换。
binlog 的格式、查看与清理见 错误日志与二进制日志。
速查
-- 主库:确认 binlog 已开启(ON)
SHOW VARIABLES LIKE 'log_bin';
-- 主库:查看当前 binlog 坐标(搭建从库时要用)
SHOW MASTER STATUS;
-- 从库:查看复制状态(关注两个 Yes 与延迟)
SHOW REPLICA STATUS\G
| 关注点 | 预期 |
|---|---|
主库 log_bin | ON |
SHOW MASTER STATUS | 有 File(如 binlog.000002)与 Position |
Replica_IO_Running | Yes |
Replica_SQL_Running | Yes |
相关
- 主从复制 - 搭建:主库 / 从库配置与验证
- 错误日志与二进制日志:binlog 格式与
mysqlbinlog - MySQL 常用工具:
mysqlbinlog查看日志 - 事务原理(redo log 与 undo log):事务提交与日志