订阅更新

Binlog是什么?它和大数据有什么关系?

MySQL手册 第 9 题 约 3 分钟读完

本文目录
  1. 先说结论
  2. Binlog的三种格式
  3. 大数据场景:用Binlog同步MySQL数据到数据湖
  4. 实战踩坑:大事务导致Binlog堆积
  5. 面试加分:Binlog和Redo Log的区别
  6. 总结

先说结论

Binlog是MySQL的二进制日志,记录所有对数据的修改操作。它有三个核心用途:主从复制、数据恢复、数据同步到大数据平台。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

Binlog是MySQL里最被低估的功能。很多人只知道它用于主从复制,但实际上它是连接MySQL和大数据世界的桥梁。我做的几乎所有实时数据同步项目,都是基于Binlog的。

Binlog的三种格式

格式记录内容优点缺点
STATEMENT原始SQL语句日志量小某些SQL结果不确定(如NOW())
ROW每行数据的变更前后值精确可靠日志量大
MIXED混合模式兼顾两者复杂度高

生产环境推荐ROW格式。 原因:数据同步工具(Canal、Debezium、Maxwell)都依赖ROW格式,因为它能精确知道每行数据变了什么。

大数据场景:用Binlog同步MySQL数据到数据湖

这是我作为大数据开发最常做的事情之一。业务数据在MySQL里,但数据分析在Hive/Spark里。怎么把MySQL的数据实时同步过去?

常见架构: MySQL → Canal/Debezium(解析Binlog)→ Kafka → Flink/Spark → Hive/Doris

这个架构我在元宇宙社交App和出海硬件公司都用过。本质就是“监听MySQL的Binlog,把每一次数据变更实时同步到大数据平台”。

实战踩坑:大事务导致Binlog堆积

我在元宇宙社交App遇到过一个问题:某个运营活动一次性更新了200万用户的状态,生成了一条巨大的Binlog。下游的Canal解析这条Binlog时卡了20分钟,导致数据同步延迟。

解决方案:把大事务拆成小批次(每次更新1000条),避免生成超大的Binlog。这个经验对做数据同步的同学非常有用。

面试加分:Binlog和Redo Log的区别

维度BinlogRedo Log
层次MySQL Server层InnoDB引擎层
记录内容逻辑变更(SQL或行变更)物理变更(页的修改)
作用复制、数据同步、备份崩溃恢复(crash recovery)
写入时机事务提交时事务执行过程中

总结

Binlog的三大用途:主从复制、数据恢复、数据同步到大数据平台。生产环境用ROW格式。大数据开发要熟悉“MySQL → Canal → Kafka → Flink”的同步架构。面试时能抋Binlog和Redo Log区分清楚,再加一个大事务导致同步延迟的踩坑,就很完整。

下一篇聊读写分离架构——一主多从怎么设计?什么时候该加从库,什么时候该加缓存?

你们用Binlog做过什么?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器