searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

mysql复制协议学习(1)

2023-08-04 03:57:13
5
0

Binlog版本

不同的Mysql版本使用不同的binlog版本:

  • v1:  MySQL 3.23-<4.0.0
  • v2: MySQL 4.0.0 - 4.0.1 (此版本可以忽略, 因为只在 early alpha 版本使用过)
  • v3: UsMySQL 4.0.2 - < 5.0.0
  • v4: MySQL 5.0.0+

源码中定义的事件类型如下:

enum Log_event_type {

  UNKNOWN_EVENT= 0,

  START_EVENT_V3= 1,

  QUERY_EVENT= 2,

  STOP_EVENT= 3,

  ROTATE_EVENT= 4,

  INTVAR_EVENT= 5,

  LOAD_EVENT= 6,

  SLAVE_EVENT= 7,

  CREATE_FILE_EVENT= 8,

  APPEND_BLOCK_EVENT= 9,

  EXEC_LOAD_EVENT= 10,

  DELETE_FILE_EVENT= 11,

  NEW_LOAD_EVENT= 12,

  RAND_EVENT= 13,

  USER_VAR_EVENT= 14,

  FORMAT_DESCRIPTION_EVENT= 15,

  XID_EVENT= 16,

  BEGIN_LOAD_QUERY_EVENT= 17,

  EXECUTE_LOAD_QUERY_EVENT= 18,

  TABLE_MAP_EVENT = 19,

  PRE_GA_WRITE_ROWS_EVENT = 20,

  PRE_GA_UPDATE_ROWS_EVENT = 21,

  PRE_GA_DELETE_ROWS_EVENT = 22,

  WRITE_ROWS_EVENT = 23,

  UPDATE_ROWS_EVENT = 24,

  DELETE_ROWS_EVENT = 25,

  INCIDENT_EVENT= 26,

  HEARTBEAT_LOG_EVENT= 27,

  IGNORABLE_LOG_EVENT= 28,

  ROWS_QUERY_LOG_EVENT= 29,

  WRITE_ROWS_EVENT_V2 = 30,

  UPDATE_ROWS_EVENT_V2 = 31,

  DELETE_ROWS_EVENT_V2 = 32,

  GTID_LOG_EVENT= 33,

  ANONYMOUS_GTID_LOG_EVENT= 34,

  PREVIOUS_GTIDS_LOG_EVENT= 35,

  ENUM_END_EVENT

  /* end marker */

};

事件包含了从主节点传输到备节点的数据, 一个事件是START_EVENT_V3或FORMAT_DESCRIPTION_EVENT, 最后一个事件是STOP_EVENT或ROTATE_EVENT

binlog事件类型可以分为以下几类:

  1. Binlog management
    • START_EVENT_V3: binlogV3使用这个事件作为开始事件 
    • FORMAT_DESCRIPTION_EVENT:binlogV4使用这个事件作为开始事件,描述后续事件是如何布局的
    • STOP_EVENT:主节点shutdown的时候写入binlog(备节点在shutdown时或者执行Reset slave statement的时候会在relay log写入)
    • ROTATE_EVENT:二进制日志更换一个新文件,可能因为文件大小达到限制,或者是mysql重启,亦或者是调用了flush logs命令。
  2. statement based replication event
    • QUERY_EVENT:  每条修改数据库的query都会创建一个QUERY_EVENT

    • INTVAR_EVET:如果qurey使用了LAST_INSERT_ID或INSERT_ID两个变量中的一个,会在QUERY_EVENT创建此事件

    • XID_EVENT:    Commit事件
  3. row base replication event
    • TABLE_MAP_EVENT:ROW EVENT之前产生,为的是对ROW EVENT解析提供依据。 
    • WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT:统称为ROW EVENT, 只有在基于row的复制方式下才会产生。
    • WRITE_ROWS_EVENT:包含了要插入的数据,每个事件只包含一个表的rows

    • UPDATE_ROWS_EVENT:包含了修改前的值,也包含了修改后的值,每个事件只包含一个表的rows
    •  

      DELETE_ROWS_EVENT:包含了需要删除行前的值,每个事件只包含一个表的rows

  4. load infile replication

 

0条评论
作者已关闭评论
Benson
6文章数
0粉丝数
Benson
6 文章 | 0 粉丝
原创

mysql复制协议学习(1)

2023-08-04 03:57:13
5
0

Binlog版本

不同的Mysql版本使用不同的binlog版本:

  • v1:  MySQL 3.23-<4.0.0
  • v2: MySQL 4.0.0 - 4.0.1 (此版本可以忽略, 因为只在 early alpha 版本使用过)
  • v3: UsMySQL 4.0.2 - < 5.0.0
  • v4: MySQL 5.0.0+

源码中定义的事件类型如下:

enum Log_event_type {

  UNKNOWN_EVENT= 0,

  START_EVENT_V3= 1,

  QUERY_EVENT= 2,

  STOP_EVENT= 3,

  ROTATE_EVENT= 4,

  INTVAR_EVENT= 5,

  LOAD_EVENT= 6,

  SLAVE_EVENT= 7,

  CREATE_FILE_EVENT= 8,

  APPEND_BLOCK_EVENT= 9,

  EXEC_LOAD_EVENT= 10,

  DELETE_FILE_EVENT= 11,

  NEW_LOAD_EVENT= 12,

  RAND_EVENT= 13,

  USER_VAR_EVENT= 14,

  FORMAT_DESCRIPTION_EVENT= 15,

  XID_EVENT= 16,

  BEGIN_LOAD_QUERY_EVENT= 17,

  EXECUTE_LOAD_QUERY_EVENT= 18,

  TABLE_MAP_EVENT = 19,

  PRE_GA_WRITE_ROWS_EVENT = 20,

  PRE_GA_UPDATE_ROWS_EVENT = 21,

  PRE_GA_DELETE_ROWS_EVENT = 22,

  WRITE_ROWS_EVENT = 23,

  UPDATE_ROWS_EVENT = 24,

  DELETE_ROWS_EVENT = 25,

  INCIDENT_EVENT= 26,

  HEARTBEAT_LOG_EVENT= 27,

  IGNORABLE_LOG_EVENT= 28,

  ROWS_QUERY_LOG_EVENT= 29,

  WRITE_ROWS_EVENT_V2 = 30,

  UPDATE_ROWS_EVENT_V2 = 31,

  DELETE_ROWS_EVENT_V2 = 32,

  GTID_LOG_EVENT= 33,

  ANONYMOUS_GTID_LOG_EVENT= 34,

  PREVIOUS_GTIDS_LOG_EVENT= 35,

  ENUM_END_EVENT

  /* end marker */

};

事件包含了从主节点传输到备节点的数据, 一个事件是START_EVENT_V3或FORMAT_DESCRIPTION_EVENT, 最后一个事件是STOP_EVENT或ROTATE_EVENT

binlog事件类型可以分为以下几类:

  1. Binlog management
    • START_EVENT_V3: binlogV3使用这个事件作为开始事件 
    • FORMAT_DESCRIPTION_EVENT:binlogV4使用这个事件作为开始事件,描述后续事件是如何布局的
    • STOP_EVENT:主节点shutdown的时候写入binlog(备节点在shutdown时或者执行Reset slave statement的时候会在relay log写入)
    • ROTATE_EVENT:二进制日志更换一个新文件,可能因为文件大小达到限制,或者是mysql重启,亦或者是调用了flush logs命令。
  2. statement based replication event
    • QUERY_EVENT:  每条修改数据库的query都会创建一个QUERY_EVENT

    • INTVAR_EVET:如果qurey使用了LAST_INSERT_ID或INSERT_ID两个变量中的一个,会在QUERY_EVENT创建此事件

    • XID_EVENT:    Commit事件
  3. row base replication event
    • TABLE_MAP_EVENT:ROW EVENT之前产生,为的是对ROW EVENT解析提供依据。 
    • WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT:统称为ROW EVENT, 只有在基于row的复制方式下才会产生。
    • WRITE_ROWS_EVENT:包含了要插入的数据,每个事件只包含一个表的rows

    • UPDATE_ROWS_EVENT:包含了修改前的值,也包含了修改后的值,每个事件只包含一个表的rows
    •  

      DELETE_ROWS_EVENT:包含了需要删除行前的值,每个事件只包含一个表的rows

  4. load infile replication

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0