MySQL: MySQL主从复制与高可用架构
最后更新:2026-08-26
主从复制是 MySQL 高可用的基础——读写分离、故障切换都依赖它。
本课讲解主从复制原理和配置。
1. 你将学到
- 主从复制原理
- 配置主从复制
- 读写分离
- 半同步复制
- MySQL Group Replication
2. 一个真实的故事
(1) 痛点:单机扛不住读写压力
电商平台只有一台数据库服务器,大促时读写请求全压在一台机器上。查询订单慢了、写入排队了、CPU 满载了——数据库成了整个系统的瓶颈。更危险的是,这台机器一旦宕机,整个业务全线停摆。
(2) 主从复制+读写分离的解法
部署主从复制:写走主库,读走从库。主库宕机时从库提升为主库,业务不中断。
| 维度 | 单机 | 主从复制+读写分离 |
|---|---|---|
| 读性能 | 单机上限 | 水平扩展(加从库) |
| 写性能 | 读写竞争 | 写独享主库 |
| 可用性 | 99% | 99.9% |
| 故障恢复 | 手动恢复(小时级) | 自动切换(分钟级) |
3. 复制原理
graph LR
A[Master<br/>主库] -->|binlog| B[Slave IO Thread]
B -->|relay log| C[Slave SQL Thread]
C -->|重放| D[Slave Data<br/>从库数据]
| 步骤 | 说明 |
|---|---|
| 1 | Master 写入 binlog |
| 2 | Slave IO Thread 拉取 binlog |
| 3 | 写入本地 relay log |
| 4 | Slave SQL Thread 重放 relay log |
4. 配置主从复制
▶ 示例:Master 配置
INI
# my.cnf
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
SQL
-- 创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'ReplPass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
-- 查看 Master 状态
SHOW MASTER STATUS;
▶ 示例:Slave 配置
INI
# my.cnf
[mysqld]
server-id = 2
relay_log = relay-bin
SQL
-- 配置主从关系
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass123!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
-- 启动从库
START SLAVE;
-- 查看从库状态
SHOW SLAVE STATUS\G
5. 读写分离
graph TB
A[应用] -->|写| B[Master]
A -->|读| C[Slave 1]
A -->|读| D[Slave 2]
B -->|复制| C
B -->|复制| D
6. 半同步复制
SQL
-- 安装半同步插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
| 复制方式 | 说明 |
|---|---|
| 异步复制 | Master 不等待 Slave 确认(默认) |
| 半同步复制 | 至少一个 Slave 确认收到才返回 |
| 全同步复制 | 所有 Slave 确认(性能差) |
7. MySQL Group Replication
SQL
-- 安装组复制插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
-- 启动组复制
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
❓ 常见问题
Q 主从延迟怎么办?
A 检查网络、优化大事务、使用并行复制。
Q 主库挂了怎么办?
A 手动或自动故障切换(MHA/Orchestrator/ProxySQL)。
Q 可以多主吗?
A Group Replication 支持多主模式,但建议单主模式。
Q 主从复制有延迟怎么办?
A 关键读走主库、用半同步复制、开启并行复制、优化大事务。
Q 主库宕机怎么办?
A 从库提升为主库,手动或用 MHA/Orchestrator 自动切换。
📖 小节
- 主从复制通过 binlog→relay log 实现数据同步
- 异步复制是默认方式,半同步复制更安全
- 读写分离分散负载,主写从读
- Group Replication 实现高可用集群
📝 作业
-
基础题(难度⭐):配置一主一从的复制环境。
-
进阶题(难度⭐⭐):验证主从数据同步。
-
挑战题(难度⭐⭐⭐):模拟主库故障,进行手动故障切换。