MySQL 数据复制

MySQL数据复制(Replication)是一个将数据从一个MySQL数据库服务器(称为主服务器或源服务器)复制到一个或多个MySQL数据库服务器(称为从服务器或副本服务器)的过程。

复制的优势

  1. 可扩展性:通过将读操作分散到多个从服务器,提高系统性能
  2. 数据安全:通过复制提供数据备份
  3. 分析:可在从服务器上执行数据分析,不影响主服务器性能
  4. 长距离数据分发:可将数据复制到远程站点

复制方法与类型

MySQL 8.0 支持多种的复制方法

  • 传统方法:基于二进制日志(binlog)的复制,主服务器记录所有数据变更事件,副本服务器通过追踪日志文件位置来同步这些事件
  • 基于 GTID(全局事务标识符):每个事务都有全局唯一的标识符,使复制配置更简单可靠,无需手动管理日志文件位置

异步复制

  • 默认的复制类型
  • 主服务器执行事务而不等待从服务器响应
  • 从服务器可能落后于主服务器

半同步复制

  • 主服务器等待至少一个从服务器确认接收事务
  • 提供更好的数据一致性保证
  • 可能影响性能

延迟复制

  • 从服务器有意延迟复制主服务器的更改
  • 可配置延迟时间(如一小时或更长)
  • 用途:
    • 防止人为操作错误(如误删数据)
    • 在灾难恢复时回滚到特定时间点
    • 测试环境中验证更改影响
  • 通过 CHANGE MASTER TO MASTER_DELAY 命令配置延迟时间

复制格式

被写入二进制日志的事件,会从主服务器读取,然后在副本服务器进行处理。根据事件的类型,事件会以不同的格式记录在 binlog 中。

  • SBR(Statement Based Replication):基于SQL语句的二进制记录,主服务器将 SQL 语句写入到 binlog 中
  • RBR(Row Based Replication):基于行的复制,主服务器将事件写入到 binlog 中,用以指示各个表的行如何更改数据
  • MBR (Mixed Based Replication):混合复制模式,默认情况下使用 SBR,基于某些特定的语句以及正在使用的存储引擎,使用 RBR。

binlog_format 系统变量控制着 MySQL 服务器的二进制日志记录格式。你可以在会话(session)或全局(global)范围内设置此变量,以决定使用
SBR、RBR 或 MBR 复制模式。

变量设置规则与其他MySQL服务器系统变量相同:

  • 会话级别设置:

    • 仅对当前会话有效
    • 会话结束后失效
    • 不影响其他会话
  • 全局级别设置:

    • 对所有新连接的客户端生效
    • 不影响当前已连接的会话
    • 需要在配置文件中修改才能永久生效

MySQL 数据复制
https://blog.zhangliangliang.cc/post/mysql-replication.html
作者
Bobby Zhang
发布于
2025年5月21日
许可协议