Yihui’s Blog

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

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

一句话答案

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

面试口语版

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

关键细节

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

面试官追问

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

学习清单

  • 列出必须读主的四类请求。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章

SQL与NoSQL有什么区别?MySQL和MongoDB如何选型?实际项目中如何选择?

日期:2026-09-27 标签:#面试 #MySQL #数据库 难度:简单 来源:牛面 MySQL 题库 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 MySQL与MongoDB的主要差异在数据模型、事务边界、查询方式和模式演化;按业务访问模式和一致性需求选型。 面试口语版(约 60…

阅读全文