MySQL 开源主从复制实战指南(SRE 可靠性优先版)

核心原则

  • 异步复制是默认,但不是底线;
  • 半同步是生产核心库的最低要求;
  • 强一致场景必须上 Group Replication(开源方案)。

一、主从复制三步流程(开源环境标准实现)

步骤 1:主库将变更写入 Binary Log(Binlog)
  • 关键进程
    • Binlog Dump 线程(由从库 I/O 线程连接时动态创建)
  • 关键文件
    • mysql-bin.000001(Binlog 文件)
    • mysql-bin.index(Binlog 索引)
  • 过程细节
    • 所有修改操作在 事务提交阶段 ,先写入 binlog(逻辑日志),再提交 InnoDB 事务(通过 两阶段提交 2PC 保证 binlog 与 redo log 一致性)。

    • 关键配置 (主库):

      复制代码
      [mysqld]
      server-id = 1
      log-bin = /var/log/mysql/mysql-bin
      binlog_format = ROW
      sync_binlog = 1              # 每次事务刷 binlog 到磁盘
      innodb_flush_log_at_trx_commit = 1  # redo log 同步刷盘("双1"保一致)

原理补充 :若主库 crash,InnoDB 通过 redo log 恢复未刷盘数据,binlog 通过 sync_binlog=1 保证不丢,二者通过 2PC 对齐。


步骤 2:从库 I/O 线程复制 binlog → 写入 Relay Log
  • 关键进程
    • Slave I/O Thread(从库常驻线程)
  • 关键文件
    • relay-log.000001(中继日志)
    • mysql.slave_master_info(MySQL 5.7+,InnoDB 表存储主库连接信息)
  • 过程细节
    • I/O 线程向主库请求从 MASTER_LOG_FILE + MASTER_LOG_POS 开始的日志;
    • 主库 Binlog Dump 线程读取 binlog 并发送;
    • I/O 线程将内容写入 relay log,并更新 slave_master_info

步骤 3:从库 SQL 线程执行 Relay Log
  • 关键进程
    • Slave SQL Thread (MySQL 5.6+ 支持多线程:slave_parallel_workers
  • 关键文件
    • mysql.slave_relay_log_info(记录已执行位置)
  • 过程细节
    • SQL 线程顺序读取 relay log 并重放;

    • 并行复制 (MySQL 5.7+ 推荐):

      复制代码
      slave_parallel_type = LOGICAL_CLOCK
      slave_parallel_workers = 8

二、复制架构对比(开源场景适用性)

架构 特点 适用场景 关键风险
一主多从 从库直连主库 读写分离、备份 主库网络压力大
级联复制 主 → 中继 → 叶子 跨机房分发 延迟叠加,故障链长
多主复制(原生 Circular) A→B, B→A 双活写入(理论) 无冲突检测 ❌ 主键冲突高发 ✅ 社区不推荐 → 改用 Galera Cluster
半同步复制 主库等至少1从 ACK 核心交易库 增加 RTT 延迟,超时降级异步
Group Replication(同步) Paxos 协议多数派提交 金融级强一致 网络分区时不可用

术语澄清

  • "半同步" ≠ "同步":半同步只要求 relay log 落盘,不要求 APPLY;
  • 真同步 = Group Replication(MySQL 5.7.17+ 开源内置)。

三、半同步 vs 异步:优势与不足

维度 异步复制 半同步复制
数据安全性 主库 crash 可能丢事务 至少一从有 relay log,可恢复
写入延迟 最低(主库 COMMIT 即返回) 增加 1 RTT(等从库 ACK)
可用性 高(主库独立) 依赖从库存活(超时降级)
配置 默认开启 需安装插件 + 配置 timeout
适用场景 日志、分析库 订单、库存、支付等核心库

重要限制

半同步 不能保证从库已执行事务 ,仅保证 relay log 落盘。若需"执行完成才返回",必须用 Group Replication

相关推荐
计算机学姐8 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
Microsoft Word12 小时前
向量数据库与RAG
数据库·人工智能·向量数据库·rag
位步13 小时前
在linux系统中使用通用包安装 Mysql
android·linux·mysql
隐语SecretFlow13 小时前
开源隐私计算框架SecretFlow | 基于隐语的金融全链路场景介绍和应用实践
金融·开源
艾德金的溪13 小时前
redis-7.4.6部署安装
前端·数据库·redis·缓存
小光学长13 小时前
基于Vue的2025年哈尔滨亚冬会志愿者管理系统5zqg6m36(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
小陈永不服输14 小时前
MySQL覆盖索引深度解析:从原理到实践的性能优化之道
mysql
魔猴疯猿14 小时前
无人机地面站中不同的飞行模式具体含义释义(开源飞控常用的5种模式)
开源·无人机·mavlink·飞行模式