Canal的主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。他可以模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议。MySQL master收到dump请求,开始推送 binary log 给 slave (即canal),canal解析binary log 对象(原始为 byte 流)。
Canal介绍
Canal 的 Github:https://github.com/alibaba/canal 里边有详细介绍说明以及安装方法。具体不在叙述。
MySql改动
首先需要给mysql创建对应的canal用户
1 | CREATE USER canal IDENTIFIED BY 'canal'; |
其次修改 my.cnf 文件并 重启数据库
1 | [mysqld] |
Canal配置
Canal单机环境(开发代码测试)主要配置两个文件,分别是 conf/canal.properties 文件和 conf/example/instance.properties 文件。具体配置如下:
canal.properties
1 | ################################################################################################## |
最为主要的是要找到配置文件中 canal.serverMode = rabbitMQ 他的默认值是 tcp 切记要改为 rabbitMQ
instance.properties
1 | canal.instance.master.address=127.0.0.1:3306 #数据库的 ip:port |
数据解析
至此如果以上步骤都没有问题的话,执行 ./bin/startup.sh 启动,并在你监控的表中设置增量数据,rabbitMQ 就会有对应数据。获取到的数据为json格式,具体说明如下:
1 | { |
这样我们就可以利用代码从 rabbitMQ 中消费对应的信息,然后再做其他操作。当然也可以利用 Canal 结合 redis 实现 mysql 和缓存数据同步,在利用CacheManager类库,利用redis做挡板,就可以同时实现 redis 缓存和内存缓存同步。这样整个分布式项目就可以实现读写分离、缓存同步。