canal配置使用

canal配置使用

项目中遇到mysql与redis同步问题,之前使用gearman,需要编写mysql触发器与同步的逻辑代码,复杂并且不易于维护。
尝试使用阿里的canal组件实现mysql redis同步。
canal项目地址 https://github.com/alibaba/canal

mysql配置

目前canal test已支持mysql 5.7.13 / 5.6.10及以下版本,mariadb 5.5.35和10.0.7(理论上可支持以下版本)

开启mysql的binlog写入功能

[mysqld]  
log-bin=mysql-bin #添加这一行就ok  
binlog-format=ROW #选择row模式  
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复  

配置mysql user

canal的原理是模拟自己为mysql slave,所以这里一定需要做为mysql slave的相关权限

    CREATE USER canal IDENTIFIED BY 'canal';    
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';  
    -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;  
    FLUSH PRIVILEGES; 

部署canal server

获取发布包(写博客时的canal版本为1.0.25)

wget https://github.com/alibaba/canal/releases/download/v1.0.25/canal.deployer-1.0.25.tar.gz
tar -zxvf canal canal

修改canal server配置

参考canal wiki https://github.com/alibaba/canal/wiki/AdminGuide

启动canal

到bin目录下启动canal server

./startup.sh

异常 ERROR testWhileIdle is true, validationQuery not set

查看运行日志 logs/example/example.log,发现如下错误:

ERROR com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set

查看canal github仓库issues发现https://github.com/alibaba/canal/issues/494
打开conf/canal.properties,注释掉:

#canal.instance.tsdb.spring.xml=classpath:spring/tsdb/h2-tsdb.xml

client端例子

https://github.com/alibaba/canal/tree/master/example/src/main/java/com/alibaba/otter/canal/example

写在最后的彩蛋

druid暂时不支持enum类型 https://github.com/alibaba/canal/issues/549
面对数据库蒙X中。。。。。。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值