持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第 13 天,点击查看活动详情
哈喽,大家好,我是二毛。
上篇文章,我们一起了解了 redoLog 的概念,以及作用。在今天的这篇文章里,我将介绍下 binLog 的相关知识。
是什么
我们先来看下字面的意思,bin 就是二进制的意思,那么结合起来就是 二进制日志。没错,这个日志里面存的内容就是二进制,而其作用就是用来记录所有数据库表结构变更,比如 CREATE、ALTER 语句以及表数据修改:INSERT、UPDATE、DELETE等语句。
SELECT和SHOW这类操作,对数据本身并没有修改,所以binlog不会记录。
作用
主要作用有两个:
- 主从复制:用来做读写分离,做多机备份,监听主库的binlog日志,同步其所有更改到从库。
- 数据恢复: 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,及其作用、日志格式,希望对大家有帮助。
我是二毛,我们下期再见~