跳到正文
Elaine Blog
返回

主从复制、延迟与读写分离

MyBatis、MySQL 与数据架构

复制副本可以分担读请求并提供故障恢复候选,但不会凭空增加写能力,也不保证刚写完就能从副本读到。读写分离首先是一致性产品设计问题。

Table of contents

Open Table of contents

复制链路

源库提交 → Binlog → 网络传输 → 副本接收日志 → 回放变更 → 副本可见

任何环节积压都会产生复制延迟。延迟指标不能只看秒数,还要看待回放事务量、字节量、最旧未应用位置和业务允许窗口。一个大事务可能在很长时间内看似“只差一件事”。

读写分离会出现什么

用户创建订单后立即刷新,若查询被路由到尚未回放的副本,就会看到“订单消失”。这叫缺少 read-your-writes(读己之写)保证。

常用策略包括:写后短时间粘到主库;关键流程始终读主库;携带提交位点并等待副本追上;只把可容忍陈旧的列表、报表路由到副本。没有一种策略对所有接口最好,必须为读模型标注最大陈旧时间。

故障切换不是改一个地址

切换前要判断候选副本是否追平、是否可能丢已确认事务;切换中要阻止双主写入;切换后要重建复制拓扑、回收旧主写权限并校验数据。网络分区时同时有两个可写主库会产生脑裂。

应用侧还要处理失效连接、事务重试和连接池 DNS/地址缓存。演练应包含真实写流量、延迟副本和回切,而不仅是关闭空闲主库。

参考 MySQL 8.4 复制与 InnoDB

下一步

继续阅读06-16 高可用集群、备份与恢复演练,把副本、备份和恢复目标组合成可验证方案。


分享这篇文章:

上一篇
MySQL 全局性能:Buffer Pool、连接与 I/O
下一篇
高可用集群、备份与恢复演练