一文搞懂主从复制和读写分离

目录

  • 一:主从复制(Replication)和读写分离(Read/Write Splitting)的关系?
    • 1. 主从复制(Replication)
    • 2. 读写分离(Read/Write Splitting)
    • 3. 两者的关系
  • 二:基于 GTID vs 基于 Binlog 的区别?
    • 1. 核心区别
    • 2. 本质联系
  • 三:ProxySQL vs ShardingSphere 等中间件的区别?
    • 1. ProxySQL
    • 2. ShardingSphere 生态
      • Sharding-JDBC 和 Sharding-Proxy 的区别❓
        • ①定位与架构差异
        • ②功能侧重点
          • Sharding-JDBC 的核心优势
          • Sharding-Proxy 的核心优势
        • ③ 典型应用场景
          • 何时选择 Sharding-JDBC?
          • 何时选择 Sharding-Proxy?
    • 3. 关键区别
  • 总结:如何理清这些概念?
  • 实际应用场景示例

一:主从复制(Replication)和读写分离(Read/Write Splitting)的关系?

1. 主从复制(Replication)

  • 是什么?
    MySQL 内置的数据同步机制,通过将主库(Master)的数据变更异步/半同步复制到一个或多个从库(Slave),实现数据冗余和高可用。
  • 核心目标
    • 数据冗余:从库作为主库的备份。
    • 高可用:主库故障时,从库可切换为新主库。
    • 读扩展:从库可以分担读请求(但需额外设计)。

2. 读写分离(Read/Write Splitting)

  • 是什么?
    一种架构设计策略,将写操作(INSERT/UPDATE/DELETE)定向到主库,读操作(SELECT)分发到从库,从而降低主库压力。
  • 依赖前提
    必须基于主从复制实现数据同步,否则读写分离会导致数据不一致。
  • 实现方式
    • 应用层代码:手动在代码中区分读写数据源(如 Spring 的 @ReadOnly 注解)。
    • 中间件:通过代理(如 ProxySQL、MyCAT)自动路由读写请求。

3. 两者的关系

  • 主从复制是读写分离的基础:没有主从复制,读写分离无法实现数据一致性。
  • 读写分离是主从复制的扩展应用:利用主从复制的数据冗余能力,提升系统读性能。

二:基于 GTID vs 基于 Binlog 的区别?

1. 核心区别

特性 基于 Binlog Position 基于 GTID
事务标识 依赖二进制日志文件名和偏移量(MASTER_LOG_FILE, MASTER_LOG_POS 使用全局唯一事务ID(GTID=server_uuid:transaction_id

你可能感兴趣的:(分布式存储,数据库,数据库架构,中间件)