456 字
2 分钟
MySQL 主从延迟和读写分离如何处理
主从延迟是副本尚未应用主库已提交事务造成的可见性差异。可能原因包括大事务、单线程应用瓶颈、热点行冲突、主库写入突增、网络拥塞、磁盘性能或副本资源不足。先区分接收延迟与应用延迟:检查副本状态、Relay Log 积压、GTID/日志位置以及 Performance Schema 复制工作线程指标。Seconds_Behind_Source 不是所有场景下都精确代表真实数据新鲜度,需结合日志位置和业务观测。
读写分离将写请求发主库、部分读请求发副本,可扩展读吞吐,但读己之写和跨请求一致性要设计。刚写后必须读到新值的请求可短时间粘滞主库,或等待副本追上对应 GTID/位置再读;超时应有回退策略。不能仅凭固定等待几毫秒保证追平,也不能把半同步确认当作副本已应用。
减小延迟可评估缩短事务、优化热点写、使用并行复制、提升副本 I/O 与 CPU、避免不必要大查询,并监控队列增长。并行度增加有资源和顺序约束,不能保证所有工作负载都加速。故障切换前还需确认候选副本数据完整及复制状态。
追问
- 如何满足写后立即读? 路由主库,或以事务 GTID/位置为屏障等待副本应用后再读。
- 半同步能消除读延迟吗? 不能,它通常保障事件被副本接收记录,不保证已经应用可查询。
- 延迟指标为零就绝对一致吗? 不宜仅依赖单一指标;还应结合 GTID/日志位置、事务状态和业务一致性校验。
MySQL 主从延迟和读写分离如何处理
https://blog.xqcherry.top/posts/interview/mysql/replication-lag-and-read-write-splitting/ 目录