canal
Canal是阿里巴巴开源的一款主要用于数据库同步业务的项目,基于数据库的日志解析,获取增量变更进行同步,由此衍生出了Canal增量订阅&消费的实时数据库同步。目前阿里内部版本已经支持mysql和oracle部分版本的日志解析,当前的canal开源版本支持mysql 5.7及以下的版本。
基本原理:
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
工作原理

工作原理
原理相对比较简单:
- canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
- mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
Canal安装配置
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz
- 解压
tar xzf canal.deployer-1.1.3.tar.gz
- 配置
cd /service/canal/conf
vim canal.properties //全局canal服务配置
canal.id= 41 //每个canal server实例的唯一标识
canal.zkServers=192.168.200.44 //zookeeper地址,不设置默认单节点模式,设置的话通过zookeeper维护热备切换
#canal.instance.global.spring.xml = classpath:spring/file-instance.xml //通过文件维护偏移量
canal.instance.global.spring.xml = classpath:spring/default-instance.xml //利用zookeepr维护偏移量信息
vim example/instance.properties //每个instance一个单独配置
canal.instance.master.address=192.168.200.30:3306 //数据库IP端口
canal.instance.master.journal.name=mysql-bin.000030 //从哪个binlog文件开始dump
canal.instance.master.position=107 //binlog文件偏移量
canal.instance.master.timestamp= 1557454483242 //ms
canal.instance.dbUsername=root //数据库用户名
canal.instance.dbPassword=123456 //数据库密码
canal.instance.connectionCharset mysql= UTF-8 //数据解析编码
canal.instance.filter.regex= canal.test1
//
mysql 数据解析关注的表,Perl正则表达式.多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)
常见例子:
1. 所有表:.* or .*\\..*
2. canal schema下所有表: canal\\..*
3. canal下的以canal打头的表:canal\\.canal.*
4. canal schema下的一张表:canal.test1
5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
- copy整个canal目录到另一个节点服务器(单节点不用)
- 修改canal.properties中的canal.id=42(单节点不用)
- 启动canal
/service/canal/bin/startup.sh
Mysql配置修改
vim /etc/my.cnf
binlog_format=row
同步数据到dataworks数仓
未完待续...