嘿,大家好,我是小米,那个年过三十却依然在代码世界里蹦跶的程序员。
今天咱来聊个我最近刚“翻车”过的面试题,主打一个真诚分享、血泪经验。
被面试官“干懵”的一天
那天是个周五下午,我去面试一家中型互联网公司,岗位是资深 Java 工程师。聊得还挺顺,直到 DBA 出场。他一上来就抛了个问题:
“你知道 MySQL 8.x 的 binlog 有几种格式吗?分别适用于什么场景?说说区别吧。”
我当场脑子嗡嗡的。
binlog?知道啊,就是记录数据变更的日志嘛。
格式……Row、Statement,还有个混合的 Mixed。
区别?好像记得一点……但突然让我展开说,我竟然结巴了。
是的,一个写过 N 个分布式服务的老 Java 工程师,在这个问题面前,卡壳了!
binlog 是个什么东东?
为了不让大家像我一样“踩雷”,咱们从头梳理一下:
Binlog,也叫二进制日志,是 MySQL 中记录“对数据库执行更改操作的事件日志”。通俗点讲,只要你的 SQL 会改变数据库的内容(比如 INSERT、UPDATE、DELETE),MySQL 就会在 binlog 中记一笔。
那它是干啥用的?
- 主从复制的基础:从库根据主库的 binlog 进行数据同步;
- 数据恢复神器:比如误删了一行数据,你可以从 binlog 中“反推”出来;
- 增量备份:只有变更的数据才记录,空间效率高。
关键是,MySQL 提供了三种 binlog 格式: