MySQL 数据复制
MySQL数据复制(Replication)是一个将数据从一个MySQL数据库服务器(称为主服务器或源服务器)复制到一个或多个MySQL数据库服务器(称为从服务器或副本服务器)的过程。
复制的优势
- 可扩展性:通过将读操作分散到多个从服务器,提高系统性能
- 数据安全:通过复制提供数据备份
- 分析:可在从服务器上执行数据分析,不影响主服务器性能
- 长距离数据分发:可将数据复制到远程站点
复制方法与类型
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