概述
开发有个需求是需要观察记录部分表的变化情况,频繁的去查取很麻烦,所以想要一个binlog订阅,消费binlog来记录变化,考虑到阿里云的产品dts需要收费,所以选择用开源工具canal实现
DTS数据订阅
关于MySQL的binlog订阅,阿里云的数据传输DTS有实现相关功能,就是数据订阅功能
基本的过程就是
1、创建一个数据订阅实例
2、配置数据订阅的源信息和网络类型
3、配置需要订阅的数据类型和订阅对象
4、利用消息订阅等程序进行消费
但是,要钱的,普通规格一个月需要1000多,所以试试开源的canal
canal使用
安装
canal是一个阿里云开源的工具,基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL
安装包下载地址: https://github.com/alibaba/canal/releases
下载上传到服务器上,解压
tar -zxvf canal.deployer-1.1.4.tar.gz
drwxr-xr-x 2 root root 4096 Aug 12 20:05 bin
drwxr-xr-x 5 root root 4096 Aug 12 19:53 conf
drwxr-xr-x 2 root root 4096 Aug 12 14:21 lib
drwxrwxrwx 4 root root 4096 Aug 12 17:53 logs
配置数据库源
example/instance.properties 主要配置数据库的相关信息,我这边的数据源是阿里云的RDS
vi conf/example/instance.properties
考虑到RDS的binlog 只会保留18个小时,有时可能需要到oss上去下载,这里就需要配置ak和实例id。我这里不考虑这个。就不填
# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=
这4个参数主要定义了实例连接地址,用户名和密码及编码
canal.instance.master.address=rm-XXXXXXXXX.mysql.rds.aliyuncs.com:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=XXXX
canal.instance.connectionCharset = UTF-8
用户密码是在控制台直接创建的,目前权限是足够的,不要的去单独加binlog dump线程的权限
show grants 可以看到相关权限
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'
目标表的正则过滤:
canal.instance.filter.regex=dev_test\\..*
其他的正则方式如下
1. 所有表:.* or .*\\..*
2. canal schema下所有表: canal\\..*
3. canal下的以canal打头的表:canal\\.canal.*
4. canal schema下的一张表:canal.test1
5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
阿里云mq配置
主要是让开发同学配合知道相关信息
vi conf/canal.properties
#mq的端口
canal.mq.servers = http://XXXXX.mq-internet-access.mq-internet.aliyuncs.com:80
#阿里云的ak for MQ
canal.aliyun.accessKey = LTAI8GNu7sKJU6mY
canal.aliyun.secretKey = dMGJizVkguAuJI9kiBJQbhlmeqscAH
启动
执行启动命令
sh bin/startup.sh
关闭就是 sh bin/stop.sh
日志可以看到相关的启动信息
tail -f logs/canal.log
2020-08-12 19:38:30.373 [main] INFO com.alibaba.otter.canal.deployer.CanalController - ## start the canal server[10.1.1.202(10.1.1.202):11111]
2020-08-12 19:38:32.421 [main] INFO com.alibaba.otter.canal.deployer.CanalStarter - ## the canal server is running now ......
如果有相关的表有修改,队列中就有相关信息