主库和从库
- 主库是处理所有写操作的数据库,负责将数据变更记录到二进制日志中,并通过复制机制同步到从库
- 从库则主要用于处理读请求,分担主库的负载,同时作为数据备份,在主库故障时可以接管服务,提高可用性
- 主从架构的核心优势包括读写分离、负载均衡、数据冗余和高可用性
主库与从库的核心区别
| 特性 | 主库(Master) | 从库(Slave) |
|---|---|---|
| 读写权限 | 处理所有写操作(INSERT/UPDATE/DELETE),部分支持读操作 [18][6] | 仅支持读操作(SELECT),不处理写操作 [6] |
| 数据同步机制 | 通过二进制日志(Binlog)记录写操作,并同步到从库 [8][5] | 通过I/O线程接收主库的Binlog,并重放SQL线程实现数据同步 [8][6] |
| 数据一致性 | 数据源头,保证最终一致性 | 存在主从延迟,可能短时间不一致 [5][164] |
| 高可用性角色 | 单点写入,需通过主从切换实现故障恢复 [5][157] | 作为热备节点,主库故障时可提升为新主库 [5][36] |
| 性能优化方向 | 优化写性能(如减少索引、事务拆分) | 优化读性能(如增加索引、负载均衡) [168] |
主库的使用场景
| 场景 | 描述 | 技术实现 | 引用 |
|---|---|---|---|
| 写操作集中处理 | 所有数据更新(如订单支付、用户注册)必须通过主库,保障数据强一致性 | 主库作为唯一写入节点,通过Binlog同步到从库 | |
| 事务型业务 | 高频事务处理场景(如金融交易),需保证ACID特性 | 主库处理事务提交,从库异步复制数据 | |
| 数据归档 | 存储长期保留的规范化数据,通过管理平台提供数据接口 | 主库永久保存归档数据,不直接支持应用软件存取 | |
| 强制读主库 | 对数据实时性要求极高的场景(如库存查询),需直接读取主库 | 使用HintManager或中间件强制路由到主库 |
从库的使用场景
| 场景 | 描述 | 技术实现 | 引用 |
|---|---|---|---|
| 读写分离 | 读操作远多于写操作时,从库分担主库负载(如内容管理系统) | 中间件(如ShardingSphere)根据请求类型路由读操作到从库 | |
| 数据分析与报表 | 复杂查询(如大数据分析)在从库执行,避免影响主库性能 | 从库添加额外索引,优化查询性能 | |
| 灾备与容灾 | 主库故障时,从库自动切换为主库,保障服务连续性 | 通过Keepalived+HAProxy实现自动故障转移 | |
| 地理分布优化 | 跨地域部署从库,减少访问延迟(如全球业务系统) | 数据通过级联复制分发到不同区域的从库 |
主从架构的优缺点
| 优点 | 缺点 |
|---|---|
| 1. 读写分离:提升并发处理能力(读操作负载均衡) | 1. 数据延迟:异步复制导致从库数据滞后 |
| 2. 高可用:主库故障时快速切换从库 | 2. 复杂度:需处理主从同步、故障切换等逻辑 |
| 3. 数据冗余:实时备份降低数据丢失风险 | 3. 资源消耗:主从同步占用网络带宽和存储资源 |
| 4. 扩展性:通过增加从库横向扩展读性能 | 4. 一致性风险:强一致性场景需牺牲性能(如半同步复制) |