深入浅出 MySQL 主从模式下 读写分离全流程详解:原理、实现与优化方案

引入时机

在典型的互联网业务场景中,读写比例可以达到8:2甚至更高。

引入条件

  • 读请求QPS持续高于数据库单实例处理能力
  • 读操作导致数据库CPU使用率长期高位
  • 高峰期出现大量读请求超时

读写分离架构

  1. 主库(Master):负责处理所有写操作
  2. 从库(Slave):专门处理读操作

主从同步延迟解决方案

方案一:写后立刻读

  • 在数据写入后一段时间内,所有读操作都定向到主库

方案二:二次查询

  • 先在从库查询,若查询不到则降级到主库查询

方案三:业务特殊处理

  • 对业务进行分级处理

读写分离落地

基于编程和配置(应用端)

spring:
  datasource:
    master:
      url: jdbc:mysql://master-host:3306/db
    slave:
      url: jdbc:mysql://slave-host:3306/db

事务处理

  • 事务中的操作建议强制路由到主库

数据库中间件代理

主流产品

产品特点
MySQL Proxy官方提供
ShardingSphereApache顶级项目
Atlas奇虎360开发
Amoeba早期开源方案

常见问题与解决

主从延迟问题

  1. 强制走主库
  2. 半同步复制
  3. 应用层延迟处理

读写一致性

  • 关键业务配置强制走主库
  • 分级查询策略
  • 延迟补偿机制