MySQL binlog日志详解

2019-01-02 14:14:24来源:cnblogs.com作者:Jia-Xin人点击

分享
 

简介

一系列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_EVENTROWS_EVENTWRITE_ROWS_EVENTUPDATE_ROWS_EVENTDELETE_ROWS_EVENTXID_EVENT
statement和row格式的binlog,都会添加一个XID_EVENT事件作为事物的结束该事件记录了该事务的id,崩溃恢复时,根据事务在binlog中的提交情况决定是否提交存储引擎中prepared的事务一个事务产生的所有event会被GTID_LOG_EVENT和XID_EVENT包住
ROTATE_EVENTSTOP_EVENTGTID模式
开启GTID模式下,会记录额外两种事件,Previous_gtids事件和Gtid事件Previous_gtids记录该binlog文件之前执行过的所有事务对应的GTID集合,在系统启动时,mysql读取该事件的内容来进行相应的初始化工作
Alt textAlt text非GTID模式
由GTID模式转化为非GTID模式
Alt textAlt text
每个gtid文件中会有一个Previous_gtids

清理binlog

手动清理binlog

purge {binary | master} logs to "binlog-file-name"purge {binary | master} logs before "datetime-expr"注意:动态关闭/开启GTID会连续Rotate 3次binlog文件Alt textAlt text

 

 

 

自动清理binlog

expire_logs_day=N(0<=N<=99)binlog发生切换或者mysql server启动时,遍历index文件找到第一个“最后修改时间”在N天内的binlog文件将该binlog之前的所有binlog文件删除掉

 参考

MariaDB原理与实现-二进制日志binlogMyFlash——美团点评的开源MySQL闪回工具 

相关文章

    无相关信息

微信扫一扫

第七城市微信公众平台