From cfc2c162dfa4691c3a01bcfc24036beb2a76cb88 Mon Sep 17 00:00:00 2001 From: asahi Date: Fri, 20 Sep 2024 20:07:38 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=85=E8=AF=BBbinary=20log=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql/mysql文档/bin log.md | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/mysql/mysql文档/bin log.md b/mysql/mysql文档/bin log.md index 50d11fd..9aaf987 100644 --- a/mysql/mysql文档/bin log.md +++ b/mysql/mysql文档/bin log.md @@ -1,3 +1,21 @@ +- [bin log](#bin-log) + - [Introduce](#introduce) + - [binary log构成](#binary-log构成) + - [binary log用途](#binary-log用途) + - [binary log variable](#binary-log-variable) + - [binlog\_encryption](#binlog_encryption) + - [log\_bin](#log_bin) + - [binlog\_checksum](#binlog_checksum) + - [binary log format](#binary-log-format) + - [mysqlbinlog](#mysqlbinlog) + - [sync\_binlog](#sync_binlog) + - [Binary Logging Format](#binary-logging-format) + - [STATEMENT](#statement) + - [ROW](#row) + - [MIXED](#mixed) + - [mysql表更新操作的binary log记录格式](#mysql表更新操作的binary-log记录格式) + + # bin log ## Introduce ### binary log构成 @@ -80,3 +98,31 @@ binary logging操作会在statement或transaction执行完成后立马被执行 Innodb在XA事务中对两阶段提交的支持确保了binary log和innodb data files的一致性。在innodb隐式支持了XA两阶段事务之后,如果sync_binlog被设置,那么当server崩溃后重启时,会对未提交事务做回滚,同时会扫描binlog中最后的部分来收集`xid`,从而计算出binary log file中的`最后有效位置`。mysql server会告知innodb完成所有写入到binary log中的prepared transactions,并且将binary log file截取到最后有效位置。这将会保证table content和binary log的一致性。 +## Binary Logging Format +在binary log中,会采用如下集中格式来记录消息: +### STATEMENT +mysql中的复制功能最初是基于sql statement的传播,sql statement将会从source实例发送到replica实例。这种行为被称作`statement-based logging`。 + +在启动server时,可以通过指定`--binlog-format=STATEMENT`来使用`statement-based logging`。 + +### ROW +默认情况下,使用的是`row-based logging`。source实例会在`行数据如何被修改`的维度,向binary log中写入事件。 + +在启动server时,可以通过指定`--binlog-format=ROW`来使用`row-based logging`。 + +### MIXED +在使用mixed-based logging时,`statement-based logging`会被默认使用,但是遇到下列描述的场景时,会自动切换到`row-based-logging`。 + +在启动server时,可以通过指定`--binlog-format=MIXED`来使用`mixed-based logging`。 + +随着使用的存储引擎不同,logging format也会收到影响和限制。 + +### mysql表更新操作的binary log记录格式 +对数据库中表数据的更改可以通过直接或间接的方式完成: +- 直接: `INSERT, UPDATE, DELETE, REPLACE, DO, LOAD DATA, SELECT, and TRUNCATE TABLE` +- 间接:`GRANT, REVOKE, SET PASSWORD, RENAME USER` + +对于直接修改mysql表内容的语句,`log format`将会基于`binlog_format`配置。 + +对于间接修改表内容的语句,将会忽略`binlog_format`配置,直接以`STATEMENT`的形式写入到binary log中。 +