首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Canal BinlogChange(mariadb5/十)

2014-01-23 
Canal BinlogChange(mariadb5/10)/* New MySQL/Sun events are to be added right above this comment */M

Canal BinlogChange(mariadb5/10)
/* New MySQL/Sun events are to be added right above this comment */ MYSQL_EVENTS_END, MARIA_EVENTS_BEGIN= 160, /* New Maria event numbers start from here */ ANNOTATE_ROWS_EVENT= 160, /* Add new MariaDB events here - right above this comment! */ ENUM_END_EVENT /* end marker */

新增了mariadb的binlog区间为160开始,ANNOTATE_ROWS_EVENT类型为mysql5.6中的RowsQueryLogEvent,用于记录RBR模式下insert/update/delete中执行的sql.

?

mariadb10

mariadb10主要是基于mysql5.6的原型,类型定义基本没啥变化,大体上都保持兼容(沿用了mysql5.6中TIMESTAMP2等新的时间类型和新的log_event类型)

主要的变化:

1. QueryLogEvent增加了status变量. ? ?

Q_HRNOW ?用于记录毫秒的精度,枚举值下标为128

协议解析的时候,需要处理Q_HRNOW,需要跳过3字节的数据. ?

ps. ?mysql5.6后,新增了Q_MICROSECONDS来支持mariaDb中Q_HRNOW的毫秒精度的功能. ?

?

2. binlog事件的变化

MARIA_EVENTS_BEGIN= 160,  /* New Maria event numbers start from here */  ANNOTATE_ROWS_EVENT= 160,  /*    Binlog checkpoint event. Used for XA crash recovery on the master, not used    in replication.    A binlog checkpoint event specifies a binlog file such that XA crash    recovery can start from that file - and it is guaranteed to find all XIDs    that are prepared in storage engines but not yet committed.  */  BINLOG_CHECKPOINT_EVENT= 161,  /*    Gtid event. For global transaction ID, used to start a new event group,    instead of the old BEGIN query event, and also to mark stand-alone    events.  */  GTID_EVENT= 162,  /*    Gtid list event. Logged at the start of every binlog, to record the    current replication state. This consists of the last GTID seen for    each replication domain.  */  GTID_LIST_EVENT= 163,  /* Add new MariaDB events here - right above this comment!  */  ENUM_END_EVENT /* end marker */

?新增了mariadb自己的gtid处理

?

使用注意

1. ?AnnotateRowsEvent使用

?mariadb需要在my.cnf中设置binlog_annotate_row_events = true,开启记录annotate事件canal在发送COM_BINLOG_DUMP指令中需要设置binlog_flags |= BINLOG_SEND_ANNOTATE_ROWS_EVENT,不然mariadb默认不会发送AnnotateRowsEvent,而是以空的QueryLogEvent来代替.

2. ?新增的binlog类型使用

canal需要设置当前session变量
SET @mariadb_slave_capability='" + LogEvent.MARIA_SLAVE_CAPABILITY_MINE + "'"

热点排行