一 、Canal介绍
canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。
vi conf/example/instance.properties
背景
早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps. 目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解析了;
工作原理
原理相对比较简单:
canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议,mysql master收到dump请求,开始推送binary log给slave(也就是canal),canal解析binary log对象(原始为byte流);
二 、docker下安装配置启动Canal
下载
首先,下载canal安装包:canal下载地址
安装步骤
先创建canal文件夹 我的目录是root/home/canal
# 下载并启动镜像
docker run --name canal -d canal/canal-server
# 创建文件夹并复制文件
mkdir /root/home/canal
chmod 777 /root/home/canal
docker cp canal:/home/admin/canal-server/conf/canal.properties /root/home/canal
docker cp canal:/home/admin/canal-server/conf/example/instance.properties /root/home/canal
# 进入容器,修改核心配置canal.properties
docker exec -it canal /bin/bash
# 或 cd /root/home/canal/conf 进行修改
# 修改配置如下:
# instans.properties文件
canal.instance.master.address=192.168.128.128:3306
#instance.properties文件
# table regex
#canal.instance.filter.regex=.*\\..*
#监听配置
canal.instance.filter.regex=shop_goods.ad_items
#关闭容器
docker stop canal
#移除容器
docker rm canal
# 重新启动镜像
docker run --name canal -p 11111:11111 -d \
-v /root/canal/instance.properties:/root/home/canal/conf/example/instance.properties \
-v /root/canal/canal.properties:/root/home/canal/conf/canal.properties \
-v /root/canal/logs/:/root/home/canal/logs/ \
canal/canal-server
配置完成后,重启canal
容器
docker restart canal