canal搭建+案例教程
标签(空格分隔): canal
- canal产生的背景
- 什么是canal?
- canal-server是什么,有什么作用?
- mysql数据库开启binlog功能
- docker搭建canal-server 服务端
- canal-instance 实列开发
1: canal产生的背景
早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。ps.目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解析.
基于日志增量订阅&消费支持的业务:
- 数据库镜像
- 数据库实时备份
- 多级索引 (卖家和买家各自分库索引)
- search build
- 业务cache刷新
- 价格变化等重要业务消息
2:什么是canal?
canal译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
从这句话理解到了什么?
基于MySQL,并且通过MySQL日志进行的增量解析,这也就意味着对原有的业务代码完全是无侵入性的。
工作原理:解析MySQL的binlog日志,提供增量数据。
基于日志增量订阅和消费的业务包括
工作原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump
- 协议 MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal ) canal
- 解析 binary log 对象(原始为 byte 流)
3:canal-server是什么,有什么作用?
负责解析MySQL的binlog日志,传递增量数据给客户端或者消息中间件
4. mysql数据库开启binlog功能
- 对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf
中配置如下
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;
5. docker搭建canal-server 服务端
1:获取最新版本镜像
docker pull canal/canal-server:latest
2:启用零时容器
docker run --name canal-server -d canal/canal-server
3:进入到外面需要挂载的目录/data/canal-1.1.5/canal/conf,拷贝配置文件到容器外挂载
docker cp canal-server:/home/admin/canal-server/conf/canal.properties./
docker cp canal-server:/home/admin/canal-server/conf/test/instance.properties ./
4:docker创建canal-server容器
docker run --name canal-server -p 11111:11111
-v /data/canal-1.1.5/canal/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties
-v /data/canal-1.1.5/canal/conf/canal.properties:/home/admin/canal-server/conf/canal.properties
-v /data/canal-1.1.5/canal/logs:/home/admin/canal-server/logs
-d canal/canal-server
5:进入容器内部查看启动日志
docker exec -it canal-server /bin/bash
5. canal-instance 实列开发
具体代码请下载源码链接查看
canal-instance gitee:地址