简介
github地址
canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
canal 工作原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
准备工作
- 对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
注意:针对阿里云 RDS for MySQL , 默认打开了 binlog , 并且账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接跳过这一步
- 授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
下载
因为公司内部消息队列使用RabbitMQ,所以canal版本只能使用v1.1.5-alpha-1
,只有这个版本支持RabbitMQ。
- 下载 canal, 访问 release 页面 , 选择需要的包下载, 如以 v1.1.5-alpha-1 版本为例
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.deployer-1.1.5-SNAPSHOT.tar.gz
mkdir /tmp/canal
tar zxvf canal.deployer-1.1.5-SNAPSHOT.tar.gz -C /tmp/canal
# 修改存放目录
mv /tmp/canal /usr/local
[root@dbtest canal]# ls /usr/local/canal
bin conf lib logs
cd /usr/local/canal
vim conf/example/instance.properties
# mysql地址帐号密码
canal.instance.master.address=192.168.122.131:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# 需要监听的数据库
canal.instance.filter.regex=health_common\\..*,health_user\\..*,health_video\\..*
vim conf/canal.properties
# tcp, kafka, RocketMQ
canal.serverMode = rabbitmq
# mq
canal.mq.servers = 192.168.122.156
canal.mq.vhost=/
canal.mq.exchange=exchange.trade.order
canal.mq.username=admin
canal.mq.password=admin
sh bin/startup.sh
# 查询是否启动成功
ps -ef | grep canal
容易遇到的问题
重启时建议删除这2个缓存文件/conf/example/h2.mv.db
/conf/example/meta.da
能解决大多数问题
查看启动日志
tail -f /logs/canal/canal.log
查看mysql变更推送日志
tail -f /logs/example/example.log
tail -f /logs/example/meta.log
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)