MySQL binlog日志详解
简介
一系列binlog文件和一个index文件组成binlog文件以一个4字节的常量作为开头(表示这是一个binlog文件)后面跟着一系列binlog事件
作用
复制备份恢复崩溃恢复(启用binlog,采用事物的两阶段提交协议,事务在存储引擎中的可能为prepared和commit)
binlog使用
开启binlog
log_bin[=base-name]绝对路径不是绝对路径(以base-name作为前缀命令binlog文件)
binlog格式
三种格式
STATEMENTROWMIXED
优缺点
statementSTATEMENT占用空间较小可以用mysqlbinlog读懂其中内容不确定事件(USER、UUID、SYSDATE等)可能导致主从数据不一致rowrow文件相对较大不会存在数据不一致(最安全的数据库复制方式)DDL语句和FLUHS系列语句还是会以文本形式记录下来(事件类型为query_event)
binlog相关参数
max_binlog_size单个binlog文件大小(binlog文件大小可能比max_binlog_size大)同一个事务中产生的所有事件必须记录在同一个binlog中
binlog过滤器
set sql_log_bin=0 禁用当前会话binlog功能binlog_do_dbbinlog_ignore_db
sync_binlog
sync_binlog=0(写入内容后持久化操作由操作系统来做)sync_binlog=1(写入内容后立即执行fsync操作同步到磁盘上)sync_binlog=N(写入N个事务才执行一次fsync操作)
binlog事件
查看事件
show binlog events in 'binlg-file' limit 10;
获取事件类型,事件在文件中的位置等
binlog格式为statement,还可以看到具体SQL语句
binlog事件格式
binlog事件
公有事件头(common-header / event header)
私有事件头(post-header 部分binlog事件包含)
事件体(body / event data)
所有binlog都以一个13或者19字节的公有事件头开始
binlog事件类型
- FORMAT_DESCRIPTION_EVENT
一个binlog文件中仅会出现一次
- GTID_LOG_EVENT
记录GTID事务号了,用于5.6版本之后基于GTID同步的方式
- QUERY_EVENT
1、事务开始时,在binlog中记录一个类型为query_event的begin事件2、statement格式binlog中,具体执行的SQL语句保留在query_event事件中3、row格式binlog,所有DDL操作以文本的格式记录在query_event事件中
- ROWS_QUERY_EVENT(默认无)
启用binlog_rows_query_log_events后,row格式binlog DML也会记录在Rows_query事件中
- TABLE_MAP_EVENT
- ROWS_EVENT
- WRITE_ROWS_EVENT
- UPDATE_ROWS_EVENT
- DELETE_ROWS_EVENT
- XID_EVENT
statement和row格式的binlog,都会添加一个XID_EVENT事件作为事物的结束该事件记录了该事务的id,崩溃恢复时,根据事务在binlog中的提交情况决定是否提交存储引擎中prepared的事务一个事务产生的所有event会被GTID_LOG_EVENT和XID_EVENT包住
- ROTATE_EVENT
- STOP_EVENT
GTID模式
开启GTID模式下,会记录额外两种事件,Previous_gtids事件和Gtid事件Previous_gtids记录该binlog文件之前执行过的所有事务对应的GTID集合,在系统启动时,mysql读取该事件的内容来进行相应的初始化工作
非GTID模式
由GTID模式转化为非GTID模式
每个gtid文件中会有一个Previous_gtids
清理binlog
手动清理binlog
purge {binary | master} logs to "binlog-file-name"
purge {binary | master} logs before "datetime-expr"
注意:
动态关闭/开启GTID会连续Rotate 3次binlog文件
自动清理binlog
expire_logs_day=N(0<=N<=99)binlog发生切换或者mysql server启动时,遍历index文件找到第一个“最后修改时间”在N天内的binlog文件将该binlog之前的所有binlog文件删除掉
参考