主从模式

适用场景

MySQL 主从模式(Master-Slave Replication)是指数据可以从一个MySQL数据库服务器主节点复制到一个或者多个从节点的数据库架构模式。

1. 读写分离

主节点负责处理写操作(INSERT、UPDATE、DELETE等),而从节点可以分担读操作(SELECT)的负载。这种架构特别适用于读多写少的应用场景。

2. 数据备份

从节点可以作为主节点的实时数据备份,当主节点出现故障时,可以快速切换到从节点继续提供服务。

3. 数据分析

可以在不影响主库性能的情况下,使用从库进行数据分析和大数据处理。

4. 高可用性

通过配置多个从节点,可以构建高可用性系统架构。

主要用途

1. 实时灾备(高可用性保障)

  • 故障自动切换机制:当主库出现故障时,可以快速将业务切换到从库继续提供服务,实现业务连续性

2. 读写分离(读性能扩展)

  • 负载均衡:将读请求分发到多个从库,减轻主库压力

3. 数据备份(业务无感知备份)

  • 备份优势:不影响主库性能、备份时间灵活、备份一致性

必要条件

主从部署必要条件:

  1. 网络连接要求

    • 从库服务器必须能够通过TCP/IP协议访问主库服务器
    • 防火墙需要开放MySQL服务端口(默认3306)
  2. 主库配置要求

    • 必须启用二进制日志(binlog)
    • 需要创建具有复制权限的用户
  3. 服务器标识要求

    • 每台MySQL服务器必须有唯一的server-id

实现原理

主从复制

主从复制是MySQL数据库实现数据同步的核心机制,其整体工作流程可分为以下三个关键步骤:

  1. 主库Binlog日志记录阶段

    • 主库(Master)在执行任何会修改数据的操作时,会将这些变更事件按照顺序记录到二进制日志(Binary Log,简称Binlog)中
  2. 从库Relay Log写入阶段

    • 从库(Slave)的I/O Thread会建立与主库的连接,定期轮询请求新的binlog事件
    • 从库I/O Thread接收到数据后,会将这些变更事件写入到本地的中继日志(Relay Log)中
  3. 从库数据重放阶段

    • 从库的SQL Thread会实时监控Relay Log的变化
    • 解析Relay Log中的事件内容,按照事务顺序在从库上执行相同的SQL语句

核心线程功能说明

线程名称所属服务器主要职责
Binlog Dump ThreadMaster读取binlog内容并发送给从库
I/O ThreadSlave接收主库binlog并写入Relay Log
SQL ThreadSlave解析执行Relay Log中的事件

半同步复制

半同步复制(Semi-Synchronous Replication)是 MySQL 提供的一种介于异步复制和完全同步复制之间的复制机制。

背景与原理

在传统的异步复制模式下,主库执行完事务后立即返回给客户端,而不关心从库是否已经接收并应用了这些变更。

半同步复制通过引入 ACK 确认机制来解决这个问题:

  1. 主库执行事务并写入二进制日志(binlog)
  2. 主库等待至少一个从库确认已接收并写入中继日志(relay log)
  3. 收到确认后,主库才完成事务提交并返回客户端响应
  4. 如果超时未收到确认,会自动降级为异步复制模式
事务写入与复制流程

在启用半同步复制的情况下,主库事务写入的完整过程如下:

  1. InnoDB Redo File Write(Prepare Write)

    • 事务开始,写入 redo log(prepare 状态)
  2. Binlog File Flush & Sync to Binlog File

    • 生成 binlog 事件并刷盘
  3. 等待从库确认(半同步关键步骤)

    • 主库发送 binlog 给从库
    • 等待从库返回 ACK 确认
  4. InnoDB Redo File Commit(Commit Write)

    • 收到从库确认后,提交 redo log(commit 状态)
  5. 返回客户端响应

    • 向应用程序返回事务执行结果
应用场景与配置建议

典型应用场景:

  • 金融交易系统
  • 订单支付系统
  • 其他对数据一致性要求较高的业务

配置建议:

# 主库配置
plugin-load = "rpl_semi_sync_master=semisync_master.so"
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 10000 # 10秒超时

# 从库配置
plugin-load = "rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_slave_enabled = 1

“主从复制是MySQL数据库实现数据同步的核心机制。”

  • 微服务架构、容器编排

数据高可用

  • 数据库集群方案

扩展性

增加从库

  • 搭建数据库复制环境

分库分表

  • 垂直拆分
  • 水平拆分

一致性设计

同步延迟监控

  • 主从延迟时间
  • 复制线程状态
  • 网络延迟

主从模式概述

核心特点

  1. 角色划分明确
  2. 数据同步机制
  3. 故障处理

优缺点

优点

  • 提高系统可用性
  • 提升读性能
  • 实现数据冗余

缺点

  • 数据一致性难以保证
  • 主节点可能成为性能瓶颈