MySQL binlog日志详解
简介
一系列binlog文件和一个index文件组成 binlog文件以一个4字节的常量作为开头(表示这是一个binlog文件) 后面跟着一系列binlog事件
作用
复制 备份恢复 崩溃恢复(启用binlog,采用事物的两阶段提交协议,事务在存储引擎中的可能为prepared和commit)
binlog使用
开启binlog
log_bin[=base-name] 绝对路径 不是绝对路径(以base-name作为前缀命令binlog文件)
binlog格式
三种格式
STATEMENT ROW MIXED
优缺点
statement STATEMENT占用空间较小 可以用mysqlbinlog读懂其中内容 不确定事件(USER、UUID、SYSDATE等)可能导致主从数据不一致 row row文件相对较大 不会存在数据不一致(最安全的数据库复制方式) DDL语句和FLUHS系列语句还是会以文本形式记录下来(事件类型为query_event)
binlog相关参数
max_binlog_size 单个binlog文件大小(binlog文件大小可能比max_binlog_size大) 同一个事务中产生的所有事件必须记录在同一个binlog中
binlog过滤器
set sql_log_bin=0 禁用当前会话binlog功能 binlog_do_db binlog_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文件删除掉
参考
MariaDB原理与实现-二进制日志binlog MyFlash——美团点评的开源MySQL闪回工具SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
更多精彩