面试官:binLog是什么?

338 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 13 天,点击查看活动详情

哈喽,大家好,我是二毛。

上篇文章,我们一起了解了 redoLog 的概念,以及作用。在今天的这篇文章里,我将介绍下 binLog 的相关知识。

是什么

我们先来看下字面的意思,bin 就是二进制的意思,那么结合起来就是 二进制日志。没错,这个日志里面存的内容就是二进制,而其作用就是用来记录所有数据库表结构变更,比如 CREATE、ALTER 语句以及表数据修改:INSERT、UPDATE、DELETE等语句。

SELECT和SHOW这类操作,对数据本身并没有修改,所以binlog不会记录。

作用

主要作用有两个:

  1. 主从复制:用来做读写分离,做多机备份,监听主库的binlog日志,同步其所有更改到从库。
  2. 数据恢复: binlog 记录了所有修改数据的 SQL,当数据库宕机数据丢失,则可以根据 Binlog 来回放历史数据。

日志格式

考虑到各种不同的场景,binlog提供了三种格式的日志形式。

Row 模式

基于行的复制,英文叫:row-based replication-RBR

记录具体被修改的信息。

比如一条 update 语句更新50条数据,如果是 Statement 模式那就保存一条 SQL 就够,但是 Row 模式会保存每一行分别更新了什么,有50条数据。

Row 模式的优缺点就很明显了。保存每一个更改的详细信息必然会带来存储空间的快速膨胀,换来的是事件操作的详细记录。所以要求越高代价越高。

Statement 模式

基于 SQL 语句的复制,英文叫:statement-based replication-SBR

只保存一条普通的SQL语句,不涉及到执行的上下文信息。

具体例子上面也提到了。

Mixed 模式

就是上面两种模式的混合。

Row 模式走详细风格, Statement 模式走极简风。

套用官方的话,大概意思就是:

在 Mixed 模式中,一般的更新语句使用 Statement 模式来保存 Binlog,但是遇到一些函数操作,可能会影响数据准确性的操作则使用 Row 模式来保存。这种方式需要根据每一条具体的 SQL 语句来区分选择哪种模式。

最后

今天介绍了什么是 binLog,及其作用、日志格式,希望对大家有帮助。

我是二毛,我们下期再见~