MySQL 异步复制与半同步复制的区别及选型建议

文章导读
MySQL 异步复制默认开启,主库提交事务后立即响应,性能最好但主库故障时可能丢失未同步数据;半同步复制要求至少一个从库写入中继日志并返回 ACK 后才提交,数据更安全但会增加事务延迟。选型核心取决于业务对数据丢失(RPO)的容忍度。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

MySQL 异步复制默认开启,主库提交事务后立即响应,性能最好但主库故障时可能丢失未同步数据;半同步复制要求至少一个从库写入中继日志并返回 ACK 后才提交,数据更安全但会增加事务延迟。选型核心取决于业务对数据丢失(RPO)的容忍度。

先说结论:核心业务且不能容忍数据丢失时选半同步,读多写少或允许秒级延迟场景选异步。

  • 适合:电商订单、支付流水等要求 RPO=0 的核心写业务
  • 重点看:网络 RTT 和从库 I/O 能力,半同步会增加毫秒级延迟
  • 别忽略:从库必须安装插件并开启半同步,否则主库会静默降级为异步

命令速用版

以下命令基于 MySQL 5.7+ 环境,需在主从库分别执行:

MySQL 异步复制与半同步复制的区别及选型建议

主库配置:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 10000;

从库配置:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

为什么会这样

异步复制是“发后即忘”,主库写完 binlog 就返回成功,不等待从库确认,因此主库宕机时未同步的 binlog 会丢失。半同步复制是“确认制”,主库需等待至少一个从库将 binlog 写入 relay log 并返回 ACK 才提交事务,确保已提交事务至少存在于一个从库的中继日志中。

MySQL 异步复制与半同步复制的区别及选型建议

分步处理

  1. 确认版本:MySQL 5.5+ 支持半同步,5.7+ 推荐使用 AFTER_SYNC 模式。
  2. 安装插件:主库加载 semisync_master.so,从库加载 semisync_slave.so。
  3. 修改配置:主库设置 rpl_semi_sync_master_enabled=1,从库设置 rpl_semi_sync_slave_enabled=1。
  4. 调整超时:根据网络情况设置 rpl_semi_sync_master_timeout,默认 10 秒,超时后自动降级为异步。

怎么验证是否生效

在主库执行 SHOW STATUS LIKE 'Rpl_semi_sync_master_status';,值为 ON 表示生效。执行 SELECT @@rpl_semi_sync_master_wait_point;,返回 AFTER_SYNC 表示为增强半同步模式。

常见坑

  • 从库未开启 rpl_semi_sync_slave_enabled=1,主库会静默退化为异步。
  • max_allowed_packet 主从不一致,导致握手失败,插件加载成功但实际不生效。
  • 从库启用并行复制时,ACK 可能滞后于事务写入顺序,影响一致性语义。
  • 超时参数设得太小,导致频繁降级为异步复制。

常见问题

半同步复制会影响多少性能?

单次事务 RT 通常增加约 10–50ms,具体取决于网络延迟和从库 I/O,核心业务 TPS 可能下降约 15%。

MySQL 异步复制与半同步复制的区别及选型建议

主库宕机后数据会丢吗?

异步复制可能丢失未同步 binlog,半同步复制在 ACK 成功后可确保数据至少存在于某个从库的 relay log 中。

如何判断当前是异步还是半同步?

查看主库状态变量 Rpl_semi_sync_master_status,OFF 为异步,ON 为半同步。

参考来源

  • mysql 主从复制模式选哪种更好_对比异步复制与半同步复制性能
  • mysql 主从复制中的异步和半同步有什么区别_同步模式说明
  • 深入浅出 MySQL 复制三剑客:同步、异步、半同步复制到底怎么选?-CSDN 博客
  • MySQL 复制三剑客全面剖析:同步、异步、半同步,哪种最适合你?
  • MySQL 半同步复制原理与配置详解