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

MySQL binlog解析

目录

  • 1、binlog是什么?
  • 2、Binlog作用
  • 3、Binlog格式
    • 3.1、Statement(语句格式)
    • 3.2、Row(行格式)
    • 3.3、Mixed(混合格式)
  • 4、总结


1、binlog是什么?

Binlog(Binary Log),也叫二进制日志,是 MySQL 中记录“对数据库执行更改操作的事件日志”。

通俗点讲,只要你的 SQL 会改变数据库的内容,比如 INSERTUPDATEDELETECREATE TABLEDROP TABLE 等,MySQL 就会在 binlog 中记一笔,而 SELECTSHOW 等纯查询类操作,不会记录。

MySQLBinlog 是理解 MySQL 内部执行机制、实现高可用、数据恢复、审计分析等高级能力的核心之一。


2、Binlog作用

  • 主从复制的基础:主库将 binlog 发送给从库,从库重放 binlog,实现数据同步。

  • 数据恢复:比如误删了一行数据,你可以从 binlog 中“反推”出来,结合全量备份 + binlog 可恢复任意时间点的数据(PITR,Point In Time Recovery)。

  • 增量备份:只有变更的数据才记录,空间效率高。

  • 审计与分析:可查看操作历史、追踪问题。

  • 数据同步与中间件接入:如 Canal 等工具通过解析 binlog 实现实时数据流转。


3、Binlog格式

通过配置 binlog_format 参数,有三种格式:

  • Statement(语句格式)
  • Row(行格式)
  • Mixed(混合格式)

3.1、Statement(语句格式)

这是最原始的一种格式,binlog 记录的是 SQL 语句本身,比如:

UPDATE users SET score = score + 1 WHERE id = 10

Binlog 就直接记录这条 SQL 语句,从库执行相同 SQL 语句。


风险举例:

UPDATE users SET created_at = NOW();

如果主从库的时钟不同步,执行结果不同。


优点:

  • 日志体积小,效率高;
  • 不依赖表结构,简单直接。

缺点:

  • 一旦涉及“非确定性操作”,结果可能不一致;
  • 比如函数 UUID()、NOW()、RAND() ——主库和从库生成的值可能不同!

一句话总结语义不够精确,不适合数据强一致场景


3.2、Row(行格式)

Row 格式更“踏实”一点,它不记录 SQL 语句,而是记录执行后影响的每一行数据的变化

例如:

UPDATE users SET score = score + 1 WHERE id = 10

Binlog 记录的不是 SQL 语句,而是记录:

  • 旧数据:id=10, score=59
  • 新数据:id=10, score=60

优点:

  • 精确无误,不怕函数、触发器、存储过程搞鬼;
  • 保证主从一致性非常好。

缺点:

  • 日志体积大;
  • 一次更新一万条记录,那 binlog 就得写一万个变化记录!

一句话总结精确、安全,但对存储和性能要求高


3.3、Mixed(混合格式)

看到这名字你就知道,它是 StatementRow 的折中方案。

MySQL 会根据实际情况自动选择使用哪种格式:

  • 优先使用 Statement
  • SQL 存在副作用(如 UUID(), NOW() 等),自动切换为 Row

适合大部分生产环境的折中选择。


优点:

  • 尽量兼顾体积与一致性;
  • 程序员省心,不用每次手动切换格式。

缺点:

  • 对开发者来说是个“黑盒”,不容易预估日志内容;
  • 故障排查时可能比较麻烦。

一句话总结一刀切的折中选择,适合多数场景


4、总结

格式一致性日志大小可读性推荐
Statement较差银行系统,主从复制且对一致性要求极高的系统
Row最好日志系统,对性能要求极致的
Mixed较好不确定场景,建议默认使用 Mixed,也是 MySQL 8.x 默认推荐格式。



http://www.lryc.cn/news/596983.html

相关文章:

  • IDEA maven加载依赖失败不展示Dependencies项
  • 华为云数据库 GaussDB的 nvarchar2隐式类型转换的坑
  • Tomcat与JDK版本对照全解析:避坑指南与生产环境选型最佳实践
  • 【矩阵专题】Leetcode73.矩阵置零
  • 华为云开发者空间 × DeepSeek-R1 智能融合测评:云端开发与AI客服的协同进化
  • (46)elasticsearch-华为云CCE无状态负载部署
  • 基于Dapr Sidecar的微服务通信框架设计与性能优化实践
  • python学智能算法(二十九)|SVM-拉格朗日函数求解中-KKT条件
  • 华为云中,列表中的镜像无法删除可能由多种原因导致
  • MybatisPlus操作方法详细总结
  • CNN实战案例:从图像识别到医疗诊断
  • 19-动态路由
  • QEMU RISCV TCG 详解二 -- RISCV CPU Representation
  • Axios 响应拦截器
  • AI 搜索引擎:让信息“长脑子”而不是“堆数据”
  • 【Spring Cloud Gateway 实战系列】基础篇:路由、断言、过滤器、负载均衡深度解析
  • 【服务器】 MCTP Over PCIe 的内容、用途、工作原理及硬件设计注意事项
  • 基于php的校园招聘平台
  • SpringCloudGateWay 使用nacos网关自动负载均衡
  • 二分查找-162.寻找峰值-力扣(LeetCode)
  • 思路探索:当大型语言模型遇见数据分析的现实挑战
  • 统一服务入口——Spring Cloud Gateway
  • 高亮匹配关键词样式highLightMatchString、replaceHTMLChar
  • Effective Python 第15条 不要过分依赖给字典添加条目时所用的顺序
  • CodeBuddy IDE实战:用AI全栈能力快速搭建课程表网页
  • JavaScript HTTP 请求:从老古董到新潮流
  • 在线深凹槽深检测方法都有哪些 —— 激光频率梳 3D 轮廓检测
  • 如何在Pico等Android头显中实现无人机低延迟RTMP全景巡检画面播放
  • 2025年7月份实时最新获取地图边界数据方法,省市区县街道多级联动【文末附实时geoJson数据下载】
  • 从零开始学习Dify-Excel数据可视化(四)