MySQL: MySQL主从复制与高可用架构

最后更新:2026-08-26

主从复制是 MySQL 高可用的基础——读写分离、故障切换都依赖它。

本课讲解主从复制原理和配置。

1. 你将学到


2. 一个真实的故事

(1) 痛点:单机扛不住读写压力

电商平台只有一台数据库服务器,大促时读写请求全压在一台机器上。查询订单慢了、写入排队了、CPU 满载了——数据库成了整个系统的瓶颈。更危险的是,这台机器一旦宕机,整个业务全线停摆。

(2) 主从复制+读写分离的解法

部署主从复制:写走主库,读走从库。主库宕机时从库提升为主库,业务不中断。

维度 单机 主从复制+读写分离
读性能 单机上限 水平扩展(加从库)
写性能 读写竞争 写独享主库
可用性 99% 99.9%
故障恢复 手动恢复(小时级) 自动切换(分钟级)

3. 复制原理

100%
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. 读写分离

100%
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 自动切换。

📖 小节


📝 作业

  1. 基础题(难度⭐):配置一主一从的复制环境。

  2. 进阶题(难度⭐⭐):验证主从数据同步。

  3. 挑战题(难度⭐⭐⭐):模拟主库故障,进行手动故障切换。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏