`
agapple
  • 浏览: 1598501 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Canal BinlogChange(mariadb5/10)

阅读更多

背景

先前开源了一个开源项目: 【阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费】 

本文主要是介绍一下canal支持mariadb协议上的变化. 

 

协议变化

mariadb5.5

mariadb5.5主要是基于mysql5.5的原型,类型定义基本没啥变化,大体上都保持兼容

主要的变化:

1. QueryLogEvent增加了status变量.    

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

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

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

 

2. binlog事件的变化

  /* 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 + "'"
分享到:
评论

相关推荐

    最新版Canal数据同步中间件(包含canal.deployer和canal.adapter)

    最新版阿里开源中间件canal实现mysql数据库同步,零侵入不写代码实现,也可以通过整合到项目程序实现更加灵活的控制。详细使用方法:https://blog.csdn.net/u014374009/category_9409106.html

    Linux下Canal安装和使用.doc

    wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz 2. 解压缩 mkdir /tmp/canal tar zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal 解压完成后,进入 ...

    springbootj集成canal+mysql+rabbitmq

    mysql需开启binlog 查看是否开启binlog SHOW VARIABLES LIKE '%log_bin%' 如果log_bin的值为OFF是未开启,为ON是已开启。...https://github.com/alibaba/canal/releases/tag/canal-1.1.5 配置文件见附件

    canal 的 mysql 与 redis/memcached/mongodb 的 nosql 数据实时同步方案

    10. **配置和监控**: 在实际部署中,还需要考虑Canal的配置,包括连接MySQL的方式、binlog的解析模式、目标数据库的连接参数等。同时,实时同步的监控也很重要,需要监控同步的延迟、错误率等指标,以便及时发现问题...

    基于canal的Mysql数据同步实验手册.pdf

    启动Canal-service和Canal-adapter,观察日志文件(`/opt/canal/deployer/logs/canal/canal.log`,`/opt/canal/deployer/logs/example/example.log`,`/opt/canal/adapter/logs/adapter/adapter.log`)以确保服务...

    canal.deployer-1.1.5.tar.gz

    在github链接中下载的 链接:https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz

    canal.1.1.5包

    5. 开启数据监听:启动Canal Server,开始监听数据库的变化并触发订阅的处理。 总之,Canal是一个强大的数据库变更数据同步工具,广泛应用于大数据实时同步、数据库备份、数据一致性维护等多个领域。通过了解和使用...

    canal-v1.1.4

    https://github.com/alibaba/canal/releases/tag/canal-1.1.4 github上的原资源,包含: canal.adapter-1.1.4.tar.gz canal.admin-1.1.4.tar.gz canal.deployer-1.1.4.tar.gz canal.example-1.1.4.tar.gz ...

    Canal安装包、安装文档

    5. 验证运行:可以通过Canal提供的HTTP API或监控界面检查Canal是否正常工作。 四、Canal客户端接入 Canal提供了多种客户端SDK,例如Java、Python等,可以根据实际需求选择合适的客户端进行数据订阅。通常,客户端...

    canal开发手册.pdf

    Canal是阿里巴巴的实时数据同步工具,基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql 详情查看 https://github.com/alibaba/canal/wiki/

    canal.admin-1.1.4.tar.gz

    canal.admin-1.1.4.tar.gz 解决 github 下载很慢的问题,https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.admin-1.1.4.tar.gz

    canal客户端-canal.deployer-1.1.7-SNAPSHOT.tar.gz

    5. **conf目录**:Canal的配置文件集中于此,如canal.properties、instance.properties等。canal.properties是Canal全局配置文件,定义了Canal服务的基本参数,如服务器地址、端口、内存分配等。instance.properties...

    canal.deployer-1.1.6

    5. **数据订阅**:配置消费者(如Kafka、RabbitMQ或自定义应用)订阅Canal实例发布的数据变更事件。 6. **监控与维护**:定期查看`logs`目录下的日志文件,监控Canal服务状态,及时处理可能出现的问题。 总结,...

    mysql+canal+kafka配置及python实现文档.docx

    client.connect(host='10.200.5.117', port=11111) client.check_valid(username=b'maxwell', password=b'123456') client.subscribe(client_id=b'1001', destination=b'example', filter=b'afanti.canal_test,...

    基于 Canal 的 MySql RabbitMQ Redis/memcached/mongodb

    5.数据写入/修改到nosql (redis的主从/hash分片) 6.保证对应关系的简单性:一个mysql表对应一个 redis实例(redis单线程,多实例保证分流不阻塞),关联关系数据交给接口业务 数据:mysql->binlog->MQ->redis(不...

    canal-canal-1.1.5-alpha-2.zip ;canal-server、adapter、admin

    canal-server(canal-deploy):可以直接监听MySQL的binlog,把自己伪装成MySQL的从库,只负责接收数据,并不做处理。 canal-adapter:相当于canal的客户端,会从canal-server中获取数据,然后对数据进行同步,可以...

    canal实现mysql到ES数据实时同步

    5. **启动Canal Adapter**: - 运行Canal Adapter的启动脚本,如`bin/start.bat`或`bin/start.sh`,开始监听Canal Server的数据变更并进行同步。 6. **测试与监控**: - 观察Canal Server和Adapter的日志,确认...

    starter-canal.zip

    《SpringBoot集成Canal详解与实战》 在Java开发领域,SpringBoot以其简洁的配置、快速的启动和集成众多优秀框架的能力,深受开发者喜爱。Canal则是阿里巴巴开源的一款基于MySQL数据库增量日志订阅与消费的组件,常...

    canal 1.1.4 常用工具包

    canal.deployer-1.1.4.tar.gz canal.admin-1.1.4.tar.gz canal.adapter-1.1.4.tar.gz canal.example-1.1.4.tar.gz canal-canal-1.1.4.zip canal 全量工具包集合 https://juejin.cn/post/6864585112994971662

    阿里canal组件:canal.deployer-1.1.7-SNAPSHOT.tar.gz

    5. **conf**:配置文件目录,包含Canal实例、服务器、目标数据源等相关配置。在这里,你可以配置Canal连接MySQL的方式,设置数据同步的目标,定义过滤规则等。 Canal的工作原理大致如下: - 它监听MySQL的binlog...

Global site tag (gtag.js) - Google Analytics