table_map_event
对于每次insert, update, delete操作,都会产生一个table_map_event,该event用于描述接下来event的数据所对应的表结构。
EventHead
filed | bytes | desc |
---|---|---|
timestamp | 4 | 自1970-01-01 00:00:00以来的秒级数 |
eventType | 1 | 当前event的类型 |
serverID | 4 | mysql server id |
eventLength | 4 | 当前even的字节长度 |
nextEventPos | 4 | 下一个event的位置 |
flag | 2 |
EventBody
filed | bytes | desc |
---|---|---|
tableid | 6 | table id |
flags | 2 | flags |
dbname | variable | 变长,第一个byte表示字符串长度,最后以0x00结尾 |
tablename | variable | 变长,第一个byte表示字符串长度,最后以0x00结尾 |
column_count | variable | column_count |
coltype | column_count * 1 | column_types |
metadatasize | variable | column_metadata_size |
metadata | metadatasize | list of metadata for each column |
nullbits | int((column_count + 7) / 8) | describe for column can be null or not |
CRC32 | 4 | event 校验码 |
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校验码
没有评论