MySQL 8.0文档阅读: binlog文件格式

本文档介绍了MySQL 8.0的binlog文件格式,包括binlog文件分析、mysqlbinlog主程序的工作原理以及Log_event_type的详细内容。通过对官方文档的阅读和实际binlog文件的解析,揭示了binlog在数据库复制和恢复中的关键作用。
摘要由CSDN通过智能技术生成

前言

官方文档
https://dev.mysql.com/doc/internals/en/replication-protocol.html
但是文档似乎没有写全, 有些事件的定义找不到文档

binlog文件分析

以下是某个binlog文件的分析结果 (貌似都是小端字节序)

FE 62 69 6E           // magic FE 'bin'

35 37 8F 5C           // 事件创建的时间, 秒, 0x5C8F3735, 即2019/3/18 14:14:13
0F                    // event type, 15表示binlog描述事件
01 00 00 00           // server id, 01
78 00 00 00           // event size, 事件大小, 120字节. 包括header, post-header, body
7C 00 00 00           // 下一个事件的位置, 
01 00                 // flag, 即0x0001. LOG_EVENT_BINLOG_IN_USE_F, 
                      // 如果当前文件正在被mysql使用, 则置成1, 否则, 置为0
04 00                 // binlog-version, 0x0004, 
38 2E 30 2E 31 35 00  // mysql-server版本, 50个字节, 本处为字符串"8.0.15"
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 
35 37 8F 5C           // binlog创建时间
13                    // Binlog Event Header的消息头大小, 固定值19
00 0D 00 08 00 00 00 00 04 00 04 00 00 00 60 00  // 以下三行是为各种类型的Header所对应的长度大小
04 1A 08 00 00 00 08 08 08 02 00 00 00 0A 0A 0A  // 源代码中有40种type定义 
2A 2A 00 12 34 00 0A 
01 F7 B8 86 9B  // 这一段不知道是什么东西, 可能是检验和之类的东西

35 37 8F 5C // 时间
23 //事件类型35, 表示PREVIOUS_GTIDS_LOG_EVENT
01 00 00 00 
47 00 00 00       // 事件长度71字节
C3 00 00 00       // 下一个事件的位置
80 00             // flag 
01 00 00 00 00 00 00 00 6F 16 6D 02 44 84 11 E9  //这段数据我也不知道怎么解析, 文档上没有. 估计得看源代码了
8A 8E 00 16 3E 10 05 86 01 00 00 00 00 00 00 00 
01 00 00 00 00 00 00 00 09 00 00 00 00 00 00 00 BA
09 A9 48 

AA 37 8F 5C  // 时间
21  //事件类型33, 表示GTID_LOG_EVENT
01 00 00 00 
4F 00 00 00
12 01 00 00 
00 00 
00 6F 16 6D 02 44 84 11 E9 8A
8E 00 16 3E 10 05 86 09 00 00 00 00 00 00 00 02
00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
15 07 24 53 58 84 05 FC 11 01 8F 38 01 00 20 9E
37 7F 

AA 37 8F 5C 
02    //QUERY_EVENT
01 00 00 00 
4B 00 00 00 
5D 01 00 00 
08 00 
0B 00 00 00  // slave_proxy_id
00 00 00 00  // execution time
04           // schema length
00 00        // error-code
1D 00        //status-vars length, 29,  官网上似乎没写完整
00 00 00 00 00 01 20 00 A0 45 00 00 00 00
06 03 73 74 64 04 FF 00 FF 00 FF 00 12 FF 00 

74 65 73 74 00  //schema, "test"
42 45 47 49 4E  4B 0E 6C  //字符串 BEGIN K l,  不清楚这是什么语句.
A5 //估计是校验和

AA 37 8F 5C 
13   //TABLE_MAP_EVENT, 官网上没写. 不知道这该如何定义
01 00 00 00 
30 00 00 00 
8D 01 00 00 
00 00
45 00 00 00 00 00 01 00 04 74 65 73 74 00 02 74
31 00 01 03 00 01 01 01 00 DD 9F 06 84 AA 37 8F
5C 1E 01 00 00 00 28 00 00 00 B5 01 00 00 00 00
45 00 00 00 00 00 01 00 02 00 01 FF 00 09 00 00
00 A0 D7 5B 35 

AA 37 8F 5C 
10    // XID_EVENT 
01 00 00 00 
1F 00 00 00 
D4 01 00 00 
00 00 
17 00 00 00 00 00 00 00
7F 0D 0C AF                                    

mysqlbinlog主程序

mysql的mysqlbinlog可以使用binlog文件, 查看它的源码. 通过main函数一路追踪, 它处理本机的binlog文件时, 使用的以下代码
mysqlbinlog.cc

static Exit_status dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
                                          const char *logname) {
   
  Exit_status retval = OK_CONTINUE;

  ulong max_event_size = 0;
  mysql_get_option(NULL, MYSQL_OPT_MAX_ALLOWED_PACKET, &max_event_size);
  
  Mysqlbinlog_file_reader mysqlbinlog_file_reader(opt_verify_binlog_checksum,
                                                  max_event_size);
  Format_description_log_event 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值