mysql 二进制日志原理,MySQL 二进制日志格式基础(一)

作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.

MySQL二制进日志用于记录数据库的变更记录,这里从结构上讨论一下日志的格式。

每个日志都包含4个字节的magic number 和event的描述包

日志有前四个字节是magic number: oxfe ox62 0x69 0x6e = 0xfe ‘b”i”n’ 转成整数:1852400382  用处就是读4个字节对比不是这个数,说明就不是二进制日志,就不用处理了。

log_event.sh中可以查到

/* 4 bytes which all binlogs should begin with */

#define BINLOG_MAGIC "\xfe\x62\x69\x6e"

每个event的header大概如下:

- 每个event中包含: event的类型,什么时间,由哪版本的MySQL产生的

- 从header头能找到该event的大小及一些变更信息

第一个event称为:format descriptor event(Event描述结构:FDE) 用于说明日志的格式

其它event就是依赖于描述结构不同,用不同的结构记录数据

最后一个event是: 日志切换事件(log-rotation event)用于指点定下个日志的文件名

每个event的结构大概如下:

+===================+

| event header |

+===================+

| event data |

+===================+

现在大多使用的V4结构,从MySQL 5.0起,具体如下:

+=====================================+

| event | timestamp 0 : 4 |

| header +----------------------------+

| | type_code 4 : 1 |

| +----------------------------+

| | server_id 5 : 4 |

| +----------------------------+

| | event_length 9 : 4 |

| +----------------------------+

| | next_position 13 : 4 |

| +----------------------------+

| | flags 17 : 2 |

| +----------------------------+

| | extra_headers 19 : x-19 |

+=====================================+

| event | fixed part x : y |

| data +----------------------------+

| | variable part |

+=====================================+

第一个event是FDE结构没有extra_headers部分,所以固定为19个字节。

FDE的event_data中定长部分为:

2字节的的日志格式版本,从MySQL 5.0后都是4

50字节 用于记录MySQL的版本号 如:5.6.16-64.2-rel64.2-log 不够50字节用0x00填充

4字节 日志产生的时间

1字节 header长度。一般是19,如果大于19,则下面的event都有extra_header字段

对于FDE变长部分一般为空

其它Event计算

header length = x byte

data length = (event_lenth -x )byte

数据区里定长部分长度

fixed_part = y byte

variable_part = (event_length - (x+y)) byte

如果给定的X不是19,则存extra_header里面有内存

Y依赖于event_type有不同的大小,需要参考不同的event进行特别处理

参考:http://dev.mysql.com/doc/internals/en/event-data-for-specific-event-types.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值