返回
Binlog 简介:记录 MySQL 变更的日志文件,深入了解记录规则
后端
2023-10-16 18:16:45
在 MySQL 中,Binlog(Binary Log)扮演着重要角色,它充当日志文件,记录着数据库中所发生的变化。Binlog 不仅对数据库的复制和恢复起着关键作用,也为用户提供了数据库操作的记录和审计依据。了解 Binlog 的记录规则对于掌握 MySQL 的操作至关重要。
操作影响行数为 0 时是否记录 Binlog?
在深入了解 Binlog 记录规则之前,我们首先要回答一个基本问题:当操作影响行数为 0 时,Binlog 是否会记录该操作?答案是否定的,不会记录。
这是因为 Binlog 是一种基于行的日志,它只记录那些真正影响数据库中数据的操作。当操作不影响任何行时,例如执行一个不符合条件的 DELETE 或 UPDATE 语句,Binlog 就不会记录该操作。
Binlog 记录规则
MySQL 的 Binlog 记录规则主要受两个因素影响:
- 操作类型 :并非所有数据库操作都会记录至 Binlog。一般来说,只记录那些会改变数据库数据的操作,例如 INSERT、UPDATE、DELETE 等。而那些不会改变数据库数据的操作,例如 SELECT、SHOW 等,通常不会记录至 Binlog。
- InnoDB 存储引擎 :在 MySQL 中,默认的存储引擎是 InnoDB。InnoDB 存储引擎有自己的日志系统,称为 InnoDB redo log。InnoDB redo log 主要用于记录 InnoDB 表的操作,而 Binlog 则主要记录其他存储引擎(如 MyISAM)的操作。
因此,当满足以下条件时,Binlog 将记录该操作:
- 操作类型属于 INSERT、UPDATE、DELETE 等会改变数据库数据的操作。
- 操作影响的行数大于 0。
- 操作涉及的表是除 InnoDB 之外的其他存储引擎(如 MyISAM)。
MIXED 模式下的记录行为
在 MySQL 中,Binlog 模式有三种:
- STATEMENT :在这种模式下,Binlog 将记录每个 SQL 语句的完整文本。
- ROW :在这种模式下,Binlog 将记录每行数据被修改前后的内容。
- MIXED :在这种模式下,Binlog 将根据实际情况,既记录 SQL 语句的完整文本,也记录每行数据被修改前后的内容。
在 MIXED 模式下,Binlog 的记录行为如下:
- 当执行 DDL(数据定义语言)操作时,Binlog 将记录该操作的完整文本。
- 当执行 DML(数据操作语言)操作时,如果该操作影响的行数大于 0,则 Binlog 将记录该操作的完整文本和每行数据被修改前后的内容。
- 当执行 DML 操作时,如果该操作影响的行数为 0,则 Binlog 将不会记录该操作。
总结
MySQL 的 Binlog 记录规则是一个复杂而细致的体系。了解这些规则对于掌握 MySQL 的操作至关重要。通过深入了解 Binlog 的记录规则,用户可以更好地利用 Binlog 进行数据库复制、恢复和审计工作。