阅读binary log文档

This commit is contained in:
asahi
2024-09-20 20:07:38 +08:00
parent db8d2ddeb5
commit cfc2c162df

View File

@@ -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 # bin log
## Introduce ## Introduce
### binary log构成 ### 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的一致性。 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中。