Canal实践
·779 words·2 mins
Table of Contents
简介
canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 https://github.com/alibaba/canal
工作原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
业务整合方案
利用canal读取数据库两个数据库的binlog,然后将数据发送到rocketmq,在项目中订阅消息,完成activity和课件数据的写入。 面临问题:
- canal是否支持多库binlog读取【应该支持,在conf下增加一个example2试试】
- canal服务器的搭建【如何在鲸云上搭建】
- 是否存在的性能问题【https://github.com/alibaba/canal/wiki/Performance 从它早期的性能测试数据来看,这个问题应该不大】
- 对数据库可能会存在一些压力
数据库操作
1开启binlog
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
查看binlog是否开启 SHOW VARIABLES LIKE ’log_bin’; 查看binlog show binary logs; 查看binlog相关设置 show variables like ‘%binlog%’;
2.创建canal用户
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
服务端部署流程
docker pull canal/canal-server:v1.1.4 下载run.sh,【wget https://raw.githubusercontent.com/alibaba/canal/master/docker/run.sh 】 执行脚本
sh run.sh -e canal.auto.scan=false \
-e canal.destinations=test \
-e canal.instance.master.address=172.20.218.50:3306 \
-e canal.instance.dbUsername=canal \
-e canal.instance.dbPassword=canal \
-e canal.instance.connectionCharset=UTF-8 \
-e canal.instance.tsdb.enable=true \
-e canal.instance.gtidon=false \
转换后的docker脚本
docker run -d -it -h 172.20.216.202 -e canal.auto.scan=false -e canal.destinations=test -e canal.instance.master.address=172.20.216.202:3306 -e canal.instance.dbUsername=canal -e canal.instance.dbPassword=canal -e canal.instance.connectionCharset=UTF-8 -e canal.instance.tsdb.enable=true -e canal.instance.gtidon=false --name=canal-server -p 11110:11110 -p 11111:11111 -p 11112:11112 -p 9100:9100 -m 4096m canal/canal-server
本机部署
在官网release下载deployer压缩包。https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz 解压,修改配置,启动。按官网教程来就行了。
客户端Example
按官网提供的来,也挺简单的。
参考
https://github.com/alibaba/canal https://www.bookstack.cn/read/canal-v1.1.4/cd6a5ac129e1edb7.md
https://www.modb.pro/db/79040 (canal原理详解)