暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从 SBR 到 GTID|MySQL 复制功能的四次关键进化

Bytebase 2025-06-03
106
原文地址:https://altmannmarcelo.medium.com/a-brief-history-of-mysql-replication-85f057922800
复制功能自 MySQL 早期(甚至早于外键和子查询的出现)便已成为其最强大、最受依赖的特性之一,是 MySQL 适用于大规模生产环境的基础。本文将介绍复制功能的演进历程,并探讨为何它至今仍是 MySQL 生态中最强大的特性之一。
起源(MySQL 3.23 — 2000 年代初)‍‍
MySQL 在 2000 年 5 月发布的 3.23.15 版本中首次引入了 SBR(statement-based replication)。这是一个重要的里程碑:它允许用户记录主服务器(当时称为 master)上执行的 SQL 语句,并在从服务器(当时称为 slave)上重放,从而实现数据复制。
当时这个功能的情况是:
  • 没有 GTID(全局事务标识符),也没有全局事务排序机制  
  • 二进制日志(binlog)设计简单,仅记录更改数据的 SQL 语句序列 
  • 已足够健壮,支撑了早期一些大型网络平台的运行
这一模型尽管简单,却有效扩展了读取流量,并迅速成为 MySQL 生产可用性的基础。
演进:混合复制与 RBR(MySQL 5.1 — 2006)‍‍

随着 MySQL 的广泛应用,SBR 的局限性逐渐显现:

  • 非确定性查询(如 NOW()UUID())会导致主从数据不一致

  • 触发器处理困难

  • 复杂更新操作无法在从服务器上完全复现

为此,MySQL 5.1 引入了 RBR(row-based replication)混合模式复制(根据查询动态选择 SBR 或 RBR),并新增了 binlog_format 设置,用以调整复制风格:

  • STATEMENT(语句模式)

  • ROW(行模式)

  • MIXED(混合模式)

RBR 显著提升了数据一致性,尤其适用于逻辑复杂或写入负载高的系统。

现代化:GTID 与崩溃安全(MySQL 5.6 — 2013)

到了 MySQL 5.6,复制功能趋于成熟:

  • 引入全局事务标识符(GTID),跨服务器的复制进度跟踪与协调成为可能

  • 半同步复制确保主服务器至少等待一个从服务器确认事务

  • 更安全的复制崩溃恢复,通过 relay_log_info_repository=TABLE 和 relay_log_recovery=ON 实现

这些改进为自动故障转移拓扑重构以及大规模 MySQL 部署管理奠定了基础。

现今:多源复制与组复制(MySQL 8.x+)

现代 MySQL 版本(8.x 及以上)新增了以下功能:

  • 多线程复制:支持基于 schema 或写入集(组提交)的并行事务应用,大幅降低高吞吐系统的复制延迟

  • 多源复制:允许单个从服务器从多个主服务器同步数据

  • 精细化崩溃恢复延迟副本二进制日志压缩基于行的最小化复制等功能

  • 深度集成 MySQL 组复制(Group Replication),这一高可用性插件基于二进制日志和 GTID 构建。

展望未来,MySQL 9.x 系列预计将移除对 STATEMENT 和 MIXED 日志格式的支持,并为了更高的确定性和可靠性而全面转向基于行的复制(ROW)。


Bytebase 3.6.2 - 提升 SQL 编辑器使用体验

微软动真格:VS Code + Postgres 硬刚 Cursor

Cursor 如何快速索引代码库

开发者前沿 #9|基于 HTTP 协议的 x402 支付标准

文章转载自Bytebase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论