MySQL 主从复制与一主多从架构实战详解

文章目录

[一、MySQL 主从复制的本质原理](#一、MySQL 主从复制的本质原理)

数据同步流程:

主从复制三大线程:

二、主从复制的三种模式

三、一主多从架构设计与应用

应用场景:

优势:

四、单机模拟主从复制(实战配置)

环境准备:

示例配置片段(my.cnf):

设置主从关系:

五、主主复制(双主复制)配置

原理:

关键注意事项:

[示例配置(主 A):](#示例配置(主 A):)

使用场景:

六、项目中常见主从实践方案

七、故障应对与运维建议

结语


主从原理 + 多种复制场景 + 实战配置,一次讲清!


一、MySQL 主从复制的本质原理

MySQL 主从复制是通过 二进制日志(binlog)+ 中继日志(relay log) 机制实现的。

数据同步流程:

复制代码
1. 主库开启 binlog,记录所有写操作
2. 从库的 I/O 线程向主库请求 binlog
3. 主库的 dump 线程将 binlog 发送给从库
4. 从库的 I/O 线程写入 relay log
5. 从库的 SQL 线程读取 relay log 并执行

主从复制三大线程:

名称 角色 功能
Dump 线程 主库 向从库推送 binlog 内容
I/O 线程 从库 拉取 binlog 并写入中继日志
SQL 线程 从库 读取中继日志并执行 SQL

二、主从复制的三种模式

模式 特点 延迟 一致性
异步复制(默认) 主库执行完即返回 低 可能丢数据
半同步复制 至少一个从库确认才返回 中 提高可靠性
GTID复制(基于事务ID) 支持 failover 自动切换 更强一致性 更好容灾支持

三、一主多从架构设计与应用

一主多从是 MySQL 构建读写分离的常见架构:

复制代码
           +-----------+
           |           |
           |  Master   |
           |           |
           +-----------+
             /    |    \
            /     |     \
    +--------+ +--------+ +--------+
    | Slave1 | | Slave2 | | Slave3 |
    +--------+ +--------+ +--------+

应用场景:

  • 主库处理写操作(INSERT/UPDATE/DELETE)

  • 从库处理读请求(SELECT)

  • 配合中间件(如 MyCAT、ShardingSphere、ProxySQL)实现自动读写分离

优势:

  • 提升系统并发能力(读写分离)

  • 降低主库压力

  • 增加容灾能力,主挂后可快速切换为从


四、单机模拟主从复制(实战配置)

环境准备:

  • 同一台主机运行多个 MySQL 实例(如 3306、3307)

  • 修改配置文件以区分实例

示例配置片段(my.cnf):

复制代码
[mysqld]
server-id=1              # 主从必须唯一
log-bin=mysql-bin        # 主库需开启binlog
port=3306

[mysqld2]
server-id=2
relay-log=mysql-relay
port=3307

设置主从关系:

复制代码
-- 从库配置
CHANGE MASTER TO
  MASTER_HOST='127.0.0.1',
  MASTER_PORT=3306,
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_pass',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=  154;

START SLAVE;
SHOW SLAVE STATUS\G;

五、主主复制(双主复制)配置

原理:

两台 MySQL 互为主从,都开启 binlog 与 relay log。

复制代码
        +-----------+         +-----------+
        |  Master A | <-----> |  Master B |
        +-----------+         +-----------+

关键注意事项:

  • 两边写入不能写相同主键或数据 → 否则数据冲突

  • 通常搭配 auto_increment_offset 和 auto_increment_increment 避免主键冲突

示例配置(主 A):

复制代码
server-id=1
log-bin=mysql-bin
auto_increment_offset=1
auto_increment_increment=2

主 B:

复制代码
server-id=2
log-bin=mysql-bin
auto_increment_offset=2
auto_increment_increment=2

使用场景:

  • 多活读写(慎用,建议仅读活)

  • 高可用自动切换(结合 MHA、Orchestrator 使用)


六、项目中常见主从实践方案

项目场景 推荐方案 说明
中小型系统 一主两从 读写分离 + 冗余
高并发大读量 一主多从(>3) 配合 ProxySQL 或 LVS 负载
容灾架构 主主复制 + keepalived 主库故障时自动切换
单机模拟开发 3306 + 3307 模拟主从 便于学习测试复制流程

七、故障应对与运维建议

  • 定期监控 Slave_IO_Running/Slave_SQL_Running

  • 配置 slave_skip_errors 时慎重使用

  • 使用 pt-table-checksum 保证主从一致

  • 设置从库只读:read_only=ON


结语

MySQL 的主从复制为分布式架构提供了坚实的基础。不论是一主多从、主主复制,还是读写分离,在不同规模和业务需求下都能灵活组合构建高可用、高性能的数据库架构。


相关推荐
微三云生态系统架构师-彭丹14 分钟前
抖店OPC智能选品与铺货架构:多店差异化与频率风控设计
架构
集智飞行28 分钟前
无人机集群通信架构剖析,以及对未来发展的几点判断
架构·无人机
想要打 Acm 的小周同学呀30 分钟前
无需自己设计Agent架构的业务系统,依赖第三方Agent,基于SKILL和MCP服务实现企业级内部提效工具开发
架构·agent
OnlineProxy40 分钟前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋2012 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
Dawson Zhu2 小时前
《Agentic Design Patterns》第 4 章导读:反思(Reflection)
人工智能·语言模型·架构·aigc·agi
可乐鸡翅yeah_3 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼3 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川4 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路4 小时前
zap扩展生态与总结
java·前端·数据库