0、前言
binlog作为二进制日志,重要且应用广泛,本文主要介绍binlog的具体使用。此外,binlog与redo log都有类似“恢复”的功能,本文将介绍两种日志具体有何区别。
1、binlog梗概
binlog即binary log,二进制日志文件,也叫作变更日志(update log)。
它记录了数据库所有执行的 DDL 和 DML 等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句select、 show等)。
binlog主要应用场景:
一是用于 数据恢复
二是用于 数据复制
2、如何使用
我们知道,binlog是用于恢复数据的,实际上,binlog日志里记录的是具体的sql命令,恢复的时候是通过具体的Pos标号来进行恢复的:例如
此外,binlog的写入机制,类似于redo log的刷盘策略。
3、redo log与binlog的对比
- redo log是属于innoDB层面,binlog属于MySQL Server层面的,这样在数据库用别的存储引擎时可以达到一致性的要求。
- redo log是物理日志,记录该数据页更新的内容;binlog是逻辑日志,记录的是这个更新语句的原始逻辑
- redo log是循环写,日志空间大小固定;binlog是追加写,是指一份写到一定大小的时候会更换下一个文件,不会覆盖。
- binlog可以作为恢复数据使用,主从复制搭建,redo log作为异常宕机或者介质故障后的数据恢复使用。
解释: binlog记录的是SQL语句,是逻辑日志;而redo log实际记录的是修改操作对数据的影响,包括对哪些数据进行了什么样的修改,而不是直接记录数据本身或 SQL 语句。
比如,当执行一个 INSERT 操作时,redo log 记录的就是这个操作所对应的修改信息,包括被插入的表、插入的数据、行号等。当 MySQL 服务器在执行 COMMIT 操作时,会将 redo log 中此事务对应的修改信息同步到磁盘中的数据文件中,这样就能保证数据的完整性和一致性。
通常来讲,redo log 组成部分包括事务 ID、操作类型(插入、更新、删除)、操作对象(表名、行号)、操作前后的数据值等。这些信息可以用于在出现异常情况时,恢复所有已经提交的事务,并使恢复之后的数据库与宕机前的数据库保持一致。因此,redo log是物理日志。