背景
先前开源了一个开源项目: 【阿里巴巴开源项目: 基于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实现mysql数据库同步,零侵入不写代码实现,也可以通过整合到项目程序实现更加灵活的控制。详细使用方法:https://blog.csdn.net/u014374009/category_9409106.html
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 解压完成后,进入 ...
mysql需开启binlog 查看是否开启binlog SHOW VARIABLES LIKE '%log_bin%' 如果log_bin的值为OFF是未开启,为ON是已开启。...https://github.com/alibaba/canal/releases/tag/canal-1.1.5 配置文件见附件
10. **配置和监控**: 在实际部署中,还需要考虑Canal的配置,包括连接MySQL的方式、binlog的解析模式、目标数据库的连接参数等。同时,实时同步的监控也很重要,需要监控同步的延迟、错误率等指标,以便及时发现问题...
启动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`)以确保服务...
在github链接中下载的 链接:https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz
5. 开启数据监听:启动Canal Server,开始监听数据库的变化并触发订阅的处理。 总之,Canal是一个强大的数据库变更数据同步工具,广泛应用于大数据实时同步、数据库备份、数据一致性维护等多个领域。通过了解和使用...
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 ...
5. 验证运行:可以通过Canal提供的HTTP API或监控界面检查Canal是否正常工作。 四、Canal客户端接入 Canal提供了多种客户端SDK,例如Java、Python等,可以根据实际需求选择合适的客户端进行数据订阅。通常,客户端...
Canal是阿里巴巴的实时数据同步工具,基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql 详情查看 https://github.com/alibaba/canal/wiki/
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
5. **conf目录**:Canal的配置文件集中于此,如canal.properties、instance.properties等。canal.properties是Canal全局配置文件,定义了Canal服务的基本参数,如服务器地址、端口、内存分配等。instance.properties...
5. **数据订阅**:配置消费者(如Kafka、RabbitMQ或自定义应用)订阅Canal实例发布的数据变更事件。 6. **监控与维护**:定期查看`logs`目录下的日志文件,监控Canal服务状态,及时处理可能出现的问题。 总结,...
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,...
5.数据写入/修改到nosql (redis的主从/hash分片) 6.保证对应关系的简单性:一个mysql表对应一个 redis实例(redis单线程,多实例保证分流不阻塞),关联关系数据交给接口业务 数据:mysql->binlog->MQ->redis(不...
canal-server(canal-deploy):可以直接监听MySQL的binlog,把自己伪装成MySQL的从库,只负责接收数据,并不做处理。 canal-adapter:相当于canal的客户端,会从canal-server中获取数据,然后对数据进行同步,可以...
5. **启动Canal Adapter**: - 运行Canal Adapter的启动脚本,如`bin/start.bat`或`bin/start.sh`,开始监听Canal Server的数据变更并进行同步。 6. **测试与监控**: - 观察Canal Server和Adapter的日志,确认...
《SpringBoot集成Canal详解与实战》 在Java开发领域,SpringBoot以其简洁的配置、快速的启动和集成众多优秀框架的能力,深受开发者喜爱。Canal则是阿里巴巴开源的一款基于MySQL数据库增量日志订阅与消费的组件,常...
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
5. **conf**:配置文件目录,包含Canal实例、服务器、目标数据源等相关配置。在这里,你可以配置Canal连接MySQL的方式,设置数据同步的目标,定义过滤规则等。 Canal的工作原理大致如下: - 它监听MySQL的binlog...