456 字
2 分钟
MySQL 主从延迟和读写分离如何处理
  1. 1MySQL 面试复习导读:知识地图与阅读路线
  2. 2MySQL 存储引擎怎么选:InnoDB、MyISAM 与 MEMORY
  3. 3MySQL 索引类型与 B+ 树:结构、分类和失效场景
  4. 4MySQL B+ 树查询全过程:从根节点到页目录
  5. 5InnoDB 聚簇索引与二级索引:什么是回表
  6. 6MySQL 覆盖索引:如何避免回表
  7. 7MySQL 联合索引的最左前缀匹配原则
  8. 8MySQL 索引下推:把过滤提前到存储引擎
  9. 9MySQL 事务异常读:脏读、不可重复读与幻读
  10. 10MySQL 四种事务隔离级别与选型取舍
  11. 11MySQL MVCC:Undo Log、版本链与 ReadView
  12. 12MySQL InnoDB 锁的分类:行锁、表锁与意向锁
  13. 13MySQL 乐观锁与悲观锁:冲突少时重试,冲突多时排队
  14. 14MySQL 发生死锁怎么办:检测、定位与处理
  15. 15MySQL 事务的 ACID 特性分别是什么
  16. 16InnoDB Redo Log 如何保证崩溃恢复
  17. 17InnoDB Undo Log 的回滚与 MVCC 作用
  18. 18MySQL Binlog 是什么,和 Redo Log 有什么区别
  19. 19一条 MySQL 查询从连接到返回结果经历什么
  20. 20如何用 EXPLAIN 读懂 MySQL 执行计划
  21. 21MySQL 为什么需要 Redo Log 与 Binlog 两阶段提交
  22. 22MySQL 崩溃后如何恢复已提交事务
  23. 23InnoDB Buffer Pool 如何提升查询与写入性能
  24. 24联合索引应该如何设计
  25. 25InnoDB 快照读与当前读如何处理幻读
  26. 26联合索引范围条件之后的列还能使用吗
  27. 27MySQL 索引看起来失效了,如何判断优化器的选择
  28. 28MySQL 8.0 如何定位并处理 InnoDB 死锁
  29. 29MySQL 慢查询如何定位和优化
  30. 30MySQL 的 ORDER BY、GROUP BY 与 filesort
  31. 31MySQL 普通索引和唯一索引如何选择
  32. 32MySQL 主从复制的基本流程是什么
  33. 33MySQL 主从延迟和读写分离如何处理本文
  34. 34MySQL 深分页为什么慢,如何改写
  35. 35InnoDB 主键应该如何设计
  36. 36MySQL 字符集与排序规则有什么区别
  37. 37数据库范式与反范式如何取舍

主从延迟是副本尚未应用主库已提交事务造成的可见性差异。可能原因包括大事务、单线程应用瓶颈、热点行冲突、主库写入突增、网络拥塞、磁盘性能或副本资源不足。先区分接收延迟与应用延迟:检查副本状态、Relay Log 积压、GTID/日志位置以及 Performance Schema 复制工作线程指标。Seconds_Behind_Source 不是所有场景下都精确代表真实数据新鲜度,需结合日志位置和业务观测。

读写分离将写请求发主库、部分读请求发副本,可扩展读吞吐,但读己之写和跨请求一致性要设计。刚写后必须读到新值的请求可短时间粘滞主库,或等待副本追上对应 GTID/位置再读;超时应有回退策略。不能仅凭固定等待几毫秒保证追平,也不能把半同步确认当作副本已应用。

减小延迟可评估缩短事务、优化热点写、使用并行复制、提升副本 I/O 与 CPU、避免不必要大查询,并监控队列增长。并行度增加有资源和顺序约束,不能保证所有工作负载都加速。故障切换前还需确认候选副本数据完整及复制状态。

追问#

  1. 如何满足写后立即读? 路由主库,或以事务 GTID/位置为屏障等待副本应用后再读。
  2. 半同步能消除读延迟吗? 不能,它通常保障事件被副本接收记录,不保证已经应用可查询。
  3. 延迟指标为零就绝对一致吗? 不宜仅依赖单一指标;还应结合 GTID/日志位置、事务状态和业务一致性校验。
MySQL 主从延迟和读写分离如何处理
https://blog.xqcherry.top/posts/interview/mysql/replication-lag-and-read-write-splitting/
作者
xqcherry
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0