作者:奶油晓生2502876643 | 来源:互联网 | 2023-08-20 15:54
简介 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