MySQL 二进制日志格式基础_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2143 | 回复: 0   主题: MySQL 二进制日志格式基础        下一篇 
tngou
注册用户
等级:中校
经验:2433
发帖:192
精华:15
注册:2014-4-28
状态:离线
发送短消息息给tngou 加好友    发送短消息息给tngou 发消息
发表于: IP:您无权察看 2015-4-30 12:38:10 | [全部帖] [楼主帖] 楼主   主页

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"
        

      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中包含: event的类型,什么时间,由哪版本的MySQL产生的

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

     

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

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

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

每个event的结构大概如下:

+===================+ | event header      | +===================+ | event data        | +===================+
+===================+
| event header      |
+===================+
| event data        |
+===================+


第一个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
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

该贴被tngou编辑于2015-4-30 12:39:47




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论