当前位置: 首页 > news >正文

【MySQL】MySQL主从复制原理解析:从二进制日志到数据一致性

本专栏文章持续更新,新增内容使用蓝色表示。

一、MySQL复制基础

MySQL的主从复制采用异步单向架构,支持两种核心复制方式:

  • 基于语句的复制(Statement-Based Replication, SBR)

  • 基于行的复制(Row-Based Replication, RBR)

两种方式均基于主库的二进制日志(Binary Log)和从库的中继日志(Relay Log)实现数据同步。

主要应用场景

  • 读写分离:主库处理写操作,从库承担读请求

  • 负载均衡:分散数据库访问压力

  • 数据安全:提供数据备份能力(需注意:复制≠备份)

  • 高可用性:避免单点故障,实现故障转移

  • 滚动升级:在不中断服务的情况下进行版本升级

二、二进制日志

二进制日志记录所有对数据库的更改事件(注意:SELECT等读操作不会被记录)。通过设置log-bin系统变量开启(默认已开启)。

2.1 核心作用

  • 数据复制的基础

  • 数据恢复:还原备份后,重新执行后续的二进制日志事件

2.1 二进制日志格式对比

格式类型工作原理优点缺点
STATEMENT记录修改数据的SQL语句日志量小,性能优秀非确定性函数(如NOW()、RAND())可能导致主从不一致
ROW记录每行数据的修改细节数据准确性高,复制可靠日志量庞大,可能影响性能
MIXED混合模式,智能切换兼顾性能与准确性切换逻辑复杂,需MySQL自动判断

MIXED格式:默认采用STATEMENT格式,在检测到可能引发不一致的操作时自动切换为ROW格式。

三、MySQL复制流程

3.1 五步复制流程

1)主库日志记录

主库开启二进制日志,记录所有数据更改事件

2)从库请求事件

从库I/O线程向主库发起二进制日志事件查询

3)事件传输

主库Binlog Dump线程向从库I/O线程发送二进制日志事件

4)中继日志写入

从库I/O线程将接收的事件写入本地中继日志

5)事件重放

从库SQL线程读取中继日志并重放事件到从库

3.2 复制流程特点

1)异步设计优势

事件获取与重放解耦,支持异步执行

主从网络中断不影响主库性能

2)性能瓶颈

​​​​​​默认配置下,主库并发更新在从库上串行执行(单SQL线程)

解决方案:配置slave_parallel_workers启用并行复制

3)级联复制

通过log_slave_updates系统变量控制从库是否记录二进制日志

支持多级复制架构

3.3 异步复制的优缺点

优点

  • 性能优秀,对主库影响小

缺点

  • 数据一致性:无法保证主从实时一致

  • 数据丢失风险:主库宕机时,已提交事务可能未传输到从库

  • 切换风险:强制主从切换可能导致数据丢失

3.4 解决方案:半同步复制

针对异步复制的缺陷,MySQL提供了半同步复制(Semisynchronous Replication)

  • 确保事务至少传输到一个从库后才向客户端返回成功

  • 显著降低数据丢失风险

  • 在数据一致性与性能之间取得平衡

四、InnoDB的重做日志

4.1 重做日志的作用

InnoDB存储引擎维护重做日志(Redo Log),具有以下特点:

  • 记录所有对InnoDB表的修改操作

  • 解决"脏页"未刷盘时的数据丢失问题

  • 支持数据库实例异常关闭后的数据恢复

4.2 MySQL三层架构与日志关系

连接层:客户端连接管理、认证授权。

服务器层:SQL解析、优化、缓存、内置功能。二进制日志在此层实现。

存储引擎层:数据存储与提取。重做日志在此层实现(InnoDB)。

五、数据一致性保障机制

5.1 日志协同工作要求

在主从复制环境中,确保数据一致性需要满足:

  1. 存在性保证:二进制日志中的事件必须在重做日志中存在

  2. 顺序一致性:两种日志中的事务顺序必须一致

因此,MySQL以二进制日志的写入作为事务提交成功的最终标志。

5.2 关键技术:两阶段提交

InnoDB通过XA事务的两阶段提交机制协调二进制日志与重做日志:

  • Prepare阶段:重做日志写入完成

  • Commit阶段:二进制日志写入完成

5.3 安全配置推荐

# 最安全的数据持久化配置
innodb_flush_log_at_trx_commit = 1  # 每次事务提交都刷盘
sync_binlog = 1                     # 每次事务都同步二进制日志

六、复制配置

6.1 备份方式对比

备份工具类型优点缺点适用场景
mysqldump逻辑备份支持部分复制、表级过滤速度慢、锁表影响业务中小型数据库、特定表复制
XtraBackup物理备份性能优秀、热备份、影响小不支持部分复制、工具依赖大数据量、全实例复制

部分复制配置示例

replicate-do-table=db_name.table_name

6.2 【实验】后期有时间会出


如有问题或建议,欢迎在评论区中留言~

http://www.dtcms.com/a/474398.html

相关文章:

  • 数据库设计_理论部分_需求分析
  • 做网站的如何增加电话量2020网络营销推广方式
  • 【人工智能】一文解读什么是ACN,ACN新在哪里?(附思维导图总结)
  • 语言实现基本区块链模型
  • 网站用哪种语言手机照片制作成相册
  • ipad mini第一代现在能做什么
  • 美妆企业网站模板网站推广计划书怎么写
  • openharmony之location位置服务模块核心功能解析与实现原理解读
  • 端口复用技术详解与应用场景
  • 6.1中断的概念
  • 学员作业:探索锁屏、桌面壁纸相关差异显示原理
  • 南通做网站多少钱有专业制作网站的公司吗
  • AI辅助故障自愈:从告警到恢复的4级自动化水平
  • DS题目汇编
  • 前端学习 JavaScript (dom操作)(04)
  • 深圳网站创建公司主页不是wordpress
  • FPGA自学笔记(正点原子ZYNQ7020):2.IP核与组成
  • Ninja 的基本使用方法
  • 定制建站网站建设wordpress 4.7.5 漏洞
  • Consua WordPress Theme — Business Consulting Sites That Convert With Clarity
  • 网站如何设置关键词网络工程二本最好的出路
  • 重生之我在大学自学鸿蒙开发第一天-《基础篇》
  • 51单片机智能鱼缸氧气调节系统
  • 做中英文游戏门户网站关键词怎么弄高清海报素材网
  • 学校网站建设要点那个网站专门做幽默视频的
  • Java 11与Java 8有什么区别?
  • 【Golang】--- Map
  • 网站制作多少费用2345网址导航桌面版
  • i18n语言表查询性能优化实战:从8秒到0.1秒的蜕变
  • 从Java的Map到Redis数据结构迁移的性能优化实践