Files
rikako-note/mysql/mysql文档/bin log.md
2024-09-18 12:48:25 +08:00

45 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# bin log
## Introduce
### binary log构成
binary log由一系列描述数据库变动的事件构成例如table creation操作或对table data进行的修改操作。
除上述对数据库造成修改的事件外binary log中还包含`可能会潜在对数据库造成修改的statement`所对应的事件例如一个没有匹配任何行的delete语句
binary log中还会包含每条statement更新数据所花费的时间。
### binary log用途
binary log用途主要用于如下方面
- `for replication`source replication server中的binary log提供了要发送给replicas的数据变动。source replication server会将binary log中包含的消息发送给replciasreplicas则是会重新执行这些变动。
- `for data recovery`某些data recovery操作需要使用binary log。当backup被恢复后需要对binary log中位于backup之后的时间进行重新执行操作
binary log不会记录`SELECT``SHOW`这些并不会对数据库数据进行修改的动作。如果想要对所有statement做记录需要使用general query log。
在运行mysql server时开启binary log通常会令性能有所降低但是能带来主从复制和数据恢复方面的好处。
binary log能兼容程序的意外中止只有已完成的event或transaction才能记录到binary log或从binary log中read back。
写入binary log中的statement如果包含密码密码将会被server重写binary log中不会出现密码的明文。
### binary log variable
#### binlog_encryption
binary log和relay log可以被加密用于保护这些日志文件的数据安全。可以通过`binlog_encryption`变量来设置binary log是否被加密。
#### log_bin
通过`log_bin`可以设置binary log是否被启用`log_bin`环境变量默认为`ON`,是启用的。
如果要在启动mysqld时禁用binary log可以在`my.cnf`中指定`skip-log-bin``disable-log-bin`
可以通过`--log-bin[=base_name]`来指定binary log file的base name。如果没有指定`--log-bin`选项那么base name默认为`binlog`binary log文件名为`binlog.xxxxx`
mysqld会在base name之后追加数字将其作为binlog的文件名称每次创建新的binlog文件时数字都会递增。mysqld会在如下场景下创建新的binlog文件
- mysql server执行`start``restart`操作
- server对log进行`flush`操作
- 当前log大小达到`max_binlog_size`的大小
如果在事务中写入大量数据那么binlog的大小可能会大于`max_binlog_size`因为同一个事务中的event只会被记录到一个binlog中不会写入到多个binlog中。