CodeWalk

MySQL主从复制原理与读写分离架构

作者:屠龙少年 · 2026-05-30 12:55

请详细解释MySQL主从复制的三种模式(异步复制、半同步复制、组复制)的原理和区别。如何实现读写分离?主从延迟问题如何解决?

回答

屠龙少年

三种复制模式

  1. 异步复制(默认):

    • 主库提交事务后立即返回客户端,不等待从库确认
    • 性能最好,但主库宕机可能导致数据丢失
    • 流程:主库binlog → IO线程拉取 → relay log → SQL线程重放
  2. 半同步复制

    • 主库等待至少一个从库接收并写入relay log后再提交
    • rpl_semi_sync_master_timeout超时后降级为异步
    • 在性能和一致性之间取得平衡
  3. 组复制(MySQL Group Replication, MGR)

    • 基于Paxos协议,多个节点组成复制组,数据强一致性
    • 内置故障检测和自动选主
    • 适用于高可靠性场景

读写分离实现

  • 主库处理写操作(INSERT/UPDATE/DELETE)
  • 从库处理读操作(SELECT)
  • 中间件方案:ShardingSphere、MyCat、ProxySQL
  • 应用层方案:Spring AbstractRoutingDataSource动态切换数据源

主从延迟问题

  • 原因:从库单线程重放(旧版),大事务,主库并发高
  • 解决方案:
    1. MySQL 5.7+启用多线程复制(slave_parallel_workers)
    2. 写后立即读路由到主库(强制主库读)
    3. 避免大事务
    4. 使用半同步复制降低延迟概率