Yihui’s Blog

如何在 MySQL 中实现读写分离?

日期:2026-07-11
难度:中等
标签:#面试 #MySQL #读写分离 #场景题

一句话答案

将写请求固定路由到主库、可延迟容忍的读请求路由到健康副本,并通过代理或应用数据源层管理路由、健康检查、权重和主从延迟兜底。

面试口语版

读写分离以主从复制为基础。写、事务内读、强一致读和刚写后的读必须走主库;普通列表、报表等允许短暂旧数据的读可以按权重走副本。实现可以放在应用层多数据源路由,也可用 ProxySQL、MySQL Router、ShardingSphere 等代理或中间件。关键不在“分流”而在一致性:要监控副本延迟,超过阈值摘除;对于 read-after-write 可以固定一段时间读主、按 GTID 等待副本追到指定位点,或由业务接受最终一致。

关键细节

  • 不要只按 SQL 的 SELECT/UPDATE 字面判断:锁定读、事务读也应走主。
  • 读写分离扩展的是读能力,主库写瓶颈仍需其他手段。
  • 连接池、事务边界、故障切换和副本延迟都要纳入路由设计。

面试官追问

  1. 如何保证“写后立即读到”?
  2. 副本延迟时如何降级?
  3. 应用路由和代理路由怎么选?

学习清单

  • 列出必须读主的四类请求。
Maintained by · YihuiEdit on GitHub

Keep reading

View all posts