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

Canal BinlogChange(mysql5.6)

阅读更多

背景

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

 

本文主要是介绍一下canal1.0.3支持mysql5.6协议上的变化. 

 

协议变化

1.   binlog checksum

    mysql5.6之后,支持在binlog对象中增加checksum信息,比如CRC32协议.   其原理主要是在原先binlog的末尾新增了4个byte,写入一个crc32的校验值

    对应参数说明: http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#sysvar_binlog_checksum

    注意:

  • mysql5.6.6之后默认就会开启checksum. 
  • 如果canal要开启checksum协议支持,需要设置session参数,目前canal只解析checksum,并没有对checksum进行校验
    set @master_binlog_checksum= '@@global.binlog_checksum'  

2.  INSERT/UPDATE/DELETE协议变化 

public static final int    WRITE_ROWS_EVENT_V1      = 23;
public static final int    UPDATE_ROWS_EVENT_V1     = 24;
public static final int    DELETE_ROWS_EVENT_V1     = 25;

/** Version 2 of the Row events */
public static final int    WRITE_ROWS_EVENT         = 30;
public static final int    UPDATE_ROWS_EVENT        = 31;
public static final int    DELETE_ROWS_EVENT        = 32;

   新增了version 2的协议,主要的变化,就是增加了self check extra的信息,和checksum一样保证数据的完整性. 

   对应参数说明: http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#sysvar_log_bin_use_v1_row_events

   默认值为0,也就是会开启version 2协议,mysql5.5之前默认是version 1协议

 

3.  RowsQueryLogEvent事件新增

    对应事件说明: http://dev.mysql.com/worklog/task/?id=5404  ,(主要用途:就是在RBR模式下,也可以输出原始执行insert/update/delete的sql信息)

    对应参数说明: http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#option_mysqld_binlog-rows-query-log-events

    默认值为false,代表不开启。 如果设置为true,对应的一个事务中的LogEvent事件就会变为: (RowsQuery会出现在tableMap协议之前)

Query :  Begin 
RowsQuery:   insert/update/delete sql
TableMap : 
Rows :  Write/Update/DELETE
Query/XId 

 

4.  其他协议变化

  • HEARTBEAT_LOG_EVENT      = 27   ##主要用途:在mysql idle期间,发送一些heartbeat事件,对应事件的内容是上一次最后发送的LogEvent信息
  • IGNORABLE_LOG_EVENT = 28  ## 可忽略的logEvent事件概念,这是mysql为了后续协议扩展引入的,在低版本mysql发现无法识别LogEvent时,可根据LOG_EVENT_IGNORABLE_F标志来判断是否可以直接丢弃. 
  • GTID_LOG_EVENT           = 33 
  • ANONYMOUS_GTID_LOG_EVENT = 34
  • PREVIOUS_GTIDS_LOG_EVENT = 35

   目前gtid协议只是解析,并没有使用GTID发起COM_BINLOG_DUMP,后续会考虑支持. 

 

5.  新增type :  TIME2/DATETIME2/TIMESTAMP2

    public static final int    MYSQL_TYPE_TIMESTAMP2    = 17;
    public static final int    MYSQL_TYPE_DATETIME2     = 18;
    public static final int    MYSQL_TYPE_TIME2         = 19;

 新增了3种mysql type类型,和5.5之前的有不同的存储格式,最可恶的是居然是采用了Big-Endian,和之前的所有事件解析litten-Endian形成一个对比,不知道mysql那帮人怎么想的

 

测试

1.  mysql版本: 5.6.10

2.  mysql server配置 : 

server-id=1
binlog-checksum=CRC32
#binlog-checksum=NONE
master-verify-checksum=1
slave-sql-verify-checksum=1
log-bin=mysql-bin
binlog-format=ROW
binlog-rows-query-log-events=true
log-bin-use-v1-row-events=1
binlog_cache_size=2M
max_binlog_size=512M
sync_binlog=0
character-set-server = utf8
#default-character-set = utf8
collation-server = utf8_unicode_ci
[mysql]
default-storage-engine=INNODB
default-character-set=utf8

 3. 测试注意(需要设置master_binlog_checksum变量,和mysql server保持一致)

Connection connection = DriverManager.getConnection("jdbc:mysql://10.20.144.34:3306", "root", "root");
Statement statement = connection.createStatement();
statement.execute("SET @master_binlog_checksum='@@global.binlog_checksum'");

 

 

分享到:
评论
1 楼 雪夜归人 2017-09-13  
您好,我想咨询一下,开源的canal都能支持mysql的哪些版本?虽然我看到GitHub上写了,但是不知道在实际使用过程中,canal遇到版本不支持的情况多吗?谢谢

相关推荐

    支持mysql5.6.19的canal版本

    MySQL 5.6.19是5.6系列的一个较早版本,它引入了一些重要的改进,如InnoDB存储引擎性能优化、并行复制、GTID(Global Transaction Identifier)等特性。这些特性可能需要Canal进行相应的适配才能正确处理相关的数据...

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

    Canal是一款由阿里巴巴开源的数据库增量日志抽取工具,它能够监听MySQL的数据变更,然后将这些变更实时地同步到其他系统,如Elasticsearch。在本篇中,我们将深入探讨如何利用Canal实现这一功能。 首先,我们要了解...

    canal + mysql + rabbitmq步骤(CanalListener)

    Canal是一款由阿里巴巴开源的、基于MySQL binlog的增量日志订阅与消费组件,它能够监听MySQL数据库的增删改查操作,并将这些变更事件转发到各种目标系统,如RabbitMQ消息队列。本教程将详细介绍如何配置Canal监听...

    springbootj集成canal+mysql+rabbitmq

    mysql需开启binlog 查看是否开启binlog SHOW VARIABLES LIKE '%log_bin%' 如果log_bin的值为OFF是未开启,为ON是已开启。 未开启的话可以修改/etc/my.cnf 开启binlog [mysqld] log-bin=mysql-bin binlog-format=...

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

    标题中的“canal”的MySQL与“redis/memcached/mongodb”的NoSQL数据实时同步方案,主要涉及了数据库间的数据迁移和实时同步技术。这个话题涵盖了多个关键知识点,包括: 1. **Canal**: Canal是阿里巴巴开源的一个...

    Canal 监听 Mysql 自动写入 Kafka 并消费 配置 Windows 版

    本配置教程将详细介绍如何在Windows环境下,利用Canal监听MySQL数据库的变更事件,并自动将其写入Kafka消息队列,然后进行消费。这一过程涉及的主要技术组件包括Canal、MySQL、Kafka以及可能用到的Zookeeper。 首先...

    canal_mysql_elasticsearch_sync:基于canal的mysql和elasticsearch实时同步方案,支持增量同步和全量同步

    canal_mysql_elasticsearch_sync支持请星 :sparkles: 交流Q群:733688083 canal于v1.1.2版本后,已支持自动同步到Elasticsearch。赞canal! 基于运河的Mysql的与Elasticsearch实时同步的的JavaWeb服务。 canal是...

    canal同步mysql

    【标题】:“Canal同步MySQL”是一个用于数据库实时同步的工具,主要利用MySQL的binlog日志来实现数据的高效迁移和复制。在本项目中,它被集成到了SpringBoot 2.0.6框架中,并使用Undertow作为Web服务器。 【描述】...

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

    【基于Canal的Mysql数据同步实验】 在大数据领域,数据采集是至关重要的第一步,而实时数据同步则是保障数据一致性、提升系统效率的关键技术。Canal是阿里巴巴开源的一款针对MySQL数据库的数据变更订阅与推送组件,...

    整合canal监听mysql

    `Canal` 是阿里巴巴开源的一款高效、稳定的数据库增量日志订阅与消费组件,它能够实时捕获 MySQL 的 binlog 事件,从而实现数据的同步、备份或者其他业务需求。本文将详细介绍如何使用 `Spring Boot` 框架整合 `...

    docker使用Canal实现ClickHouse实时同步MySQL数据

    docker使用Canal实现ClickHouse实时同步MySQL数据

    cpp-基于canal的mysql与redismemcachedmongodb的nosql数据实时同步方案案例canalclient

    标题中的“cpp-基于canal的mysql与redismemcachedmongodb的nosql数据实时同步方案案例canalclient”指的是一个使用C++实现的项目,它利用了阿里巴巴开源的Canal工具来实现实时同步MySQL数据库的数据到NoSQL数据库,...

    canal-mysql-elasticsearch-sync-master.zip

    【标题】"canal-mysql-elasticsearch-sync-master.zip" 提供了一个实现MySQL到Elasticsearch实时数据同步的解决方案,主要用于数据库变更数据的捕获和快速导入到搜索索引中。 【描述】中提到的关键点是“基于canal...

    基于canal的mysql和elasticsearch实时同步方案,支持增量同步和全量同步.zip

    Canal是阿里巴巴开源的一个数据库增量日志抽取工具,它可以实现MySQL到其他数据存储系统的实时同步,如Elasticsearch。本方案详细介绍了如何利用Canal实现MySQL与Elasticsearch之间的数据双向同步,包括增量同步和...

    canal-mysql-elasticsearch-sync20201010.rar

    Canal是阿里巴巴开源的一款基于MySQL主从协议的数据订阅与推送组件,它可以监听MySQL的binlog事件,将这些事件转化为结构化的数据,供其他系统消费。Canal支持多种模式,包括单表同步、多表同步,以及复杂的嵌套...

    fjzj-mes-data-remove_canal_MYSQL_中间件_MES_

    "fjzj-mes-data-remove_canal_MYSQL_中间件_MES_"这个项目标题和描述涉及了几个重要的技术概念,让我们逐一深入探讨。 1. **Canal**: Canal是阿里巴巴开源的一个MySQL数据库实时增量数据订阅与同步工具。它能够监听...

    基于canal的mysql和elasticsearch实时同步方案,支持增量同步和全量同步

    # canal_mysql_elasticsearch_sync **canal支持自动同步到Elasticsearch。 基于 *canal* 的 *Mysql* 与 *Elasticsearch* 实时同步的 *javaweb* 服务。 canal是阿里巴巴mysql数据库binlog的增量订阅&消费组件。 ...

    mac m1 docker本地部署canal 监听mysql的binglog日志

    mac m1 docker本地部署canal 监听mysql的binglog日志

    基于canal的mysql和elasticsearch实时同步源代码.zip

    Canal是阿里巴巴开源的一款针对MySQL数据库的数据增量订阅与消费组件,它能够实时捕获并解析MySQL的binlog,将变更事件转化为结构化的数据,然后推送到各种消费端,如Elasticsearch。本项目提供的源代码正是基于...

Global site tag (gtag.js) - Google Analytics