table_map_event

对于每次insert, update, delete操作,都会产生一个table_map_event,该event用于描述接下来event的数据所对应的表结构。

EventHead

filedbytesdesc
timestamp4自1970-01-01 00:00:00以来的秒级数
eventType1当前event的类型
serverID4mysql server id
eventLength4当前even的字节长度
nextEventPos4下一个event的位置
flag2

EventBody

filedbytesdesc
tableid6table id
flags2flags
dbnamevariable变长,第一个byte表示字符串长度,最后以0x00结尾
tablenamevariable变长,第一个byte表示字符串长度,最后以0x00结尾
column_countvariablecolumn_count
coltypecolumn_count * 1column_types
metadatasizevariablecolumn_metadata_size
metadatametadatasizelist of metadata for each column
nullbitsint((column_count + 7) / 8)describe for column can be null or not
CRC324event 校验码

column_count

column_count 表示event中包含的列数。所占空间大小计算

uint net_field_length_size(const uchar *ptr) {
 if (*ptr <= 251) return 1;
 if (*ptr == 252) return 3;
 if (*ptr == 253) return 4;
 return 9;
}

uint64_t net_field_length_ll(uchar **packet) {
 const uchar *pos = *packet;
 if (*pos < 251) {
   (*packet)++;
   return (uint64_t)*pos;
 }
 if (*pos == 251) {
   (*packet)++;
   return (uint64_t)NULL_LENGTH;
 }
 if (*pos == 252) {
   (*packet) += 3;
   return (uint64_t)uint2korr(pos + 1);
 }
 if (*pos == 253) {
   (*packet) += 4;
   return (uint64_t)uint3korr(pos + 1);
 }
 (*packet) += 9; /* Must be 254 when here */
 return (uint64_t)uint8korr(pos + 1);
}

column_count = net_field_length_ll

metadatasize

metadatasize = net_field_length_ll. 表示metadata字段的空间大小,所占空间大小计算 uint net_field_length_size(const uchar *ptr)

metadata

metadata 表示列的metadata信息

nullbits

nullbits 表示列是否可以为null

CRC32

CRC32 表示event校验码