大家好,我是开源小妹,今天给大家一款强大的数据同步开源项目,Canal 最近小妹收到需求需要做一些数据同步的工作,小妹首先想到数据同步那就用定时任务吧,但是定时任务的弊端在于时效性不够高,如果对于时效性要求稍高的话则定时任务就明显不合适的,最终小妹找到了Canal项目正好可以满足需求能够及时的进行数据同步。 接下来跟着小妹一块来看看这款项目吧
Canal概述
Canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 当前的Canal支持源端Mysql版本包括5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

Canal工作原理
Mysql主备复制原理
- Mysql master将数据变更写入二进制日志(binary log,其中记录叫做二进制日志事件,binary log events)
- Mysql slave 将master的binary log events 拷贝到它的中继日志(relay log)
- Mysql slave slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal工作原理
- canal模拟Mysql slave的交互协议,伪装自己为Mysql slave,向Mysql master发送dump协议,
- Mysql master收到dump请求,开始推送binary log 给slave(也就是canal)
- canal 解析binary log 对象(原始为byte流)
Canal简单使用
安装部署 Canal
需要开启mysql的binlog写入功能,配置binlog-format 为Row模式
下载Canal 点击下载
安装 & 配置
解压下载的文件
1
2mkdir /tmp/canal
tar zxvf canal.deployer-$version.tar.gz -C /tmp/canal配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20vi conf/example/instance.properties
## mysql serverId
canal.instance.mysql.slaveId = 1234
#position info,需要改成自己的数据库信息
canal.instance.master.address = 127.0.0.1:3306
canal.instance.master.journal.name =
canal.instance.master.position =
canal.instance.master.timestamp =
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#username/password,需要改成自己的数据库信息
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
canal.instance.defaultDatabaseName =
canal.instance.connectionCharset = UTF-8
#table regex
canal.instance.filter.regex = .\*\\\\..\*
启动
1
2
3sh bin/startup.sh
#查看启动日志
vi logs/canal/canal.log</pre>关闭
1
sh bin/stop.sh
安装部署Canal Admin
canal-admin设计上是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作
安装部署
下载安装 点击下载
解压配置 & 初始化sql
1
2
3
4
5mkdir /tmp/canal-admin
tar zxvf canal.admin-$version.tar.gz -C /tmp/canal-admin
#修改配置
vi conf/application.ymla. 初始化SQL脚本里会默认创建canal_manager的数据库,建议使用root等有超级权限的账号进行初始化 b. canal_manager.sql默认会在conf目录下,也可以通过链接下载 canal_manager.sql
启动 & 关闭
1
2
3
4
5#启动
sh bin/startup.sh
#关闭
sh bin/stop.sh启动成功之后 可以通过 可以通过 http://127.0.0.1:8089/ 访问,默认密码:admin/123456
简单操作
集群管理里面配置响应的集群信息,以及zookeeper地址

CanalServer管理

Instance管理 也就是使用Canal的客户端 例如 要同步商品库,会员库, 则可以分别配置实例

新建instance

通过小妹上面的介绍是不是对Canal这块利器有所了解了呢,如果小伙伴们工作中遇到相关的场景可以考虑使用Canal来实现。
总结
上面小妹大概介绍了Canal的简单使用,安装配置好之后基本上所有的操作都是可以在控制台进行操作的,使用起来非常方便。不过Canal在部署上也有弊端,就是需要单独安装ZK。感兴趣的小伙伴可以去尝试一下。