一、CANAL 简介
canal是Alibaba旗下的一款开源项目,纯Java开发.它是基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持mysql。
应用场景
canal的数据同步不是全量的,而是增量。基于binary log增量订阅和消费,canal可以做:
- 数据库镜像
- 数据库实时备份
- 索引构建和实时维护
- 业务cache(缓存)刷新
具体业务场景
- 数据同步,比如:做在线、离线数据库之间的数据同步操作;
- 数据消费,比如:需要根据关注的数据库表的变化,做搜索增量;
- 数据脱敏,比如:需要将线上动态数据导入到其他地方,做数据脱敏。
Mysql主从复制原理
MySQL的master将写入二进制日志(binary log,可以通过show binlog events进行查看)
MySQL的slave将master的binary log events拷贝到它的中继日志(relay log)
MySQL的slave重放relay log中的事件,将数据变更反映到它自己的数据库中
Canal工作原理
canal实际上是把自己模拟成了MySQL的slave,向MySQL master发送dump协议
MySQL master收到dump请求后,开始推送自己的binary log给slave,也就是canal
canal解析binary log对象(原始为 byte 流)
本文档介绍单canal server 同步数据到rdb的方法
同步逻辑:src_mysql(172.16.134.24) <-> canal-deploy <-> client-adapter <-> dest_mysql(172.16.134.25)
二、Cancal 各个组件用途及介绍
2.1 组件介绍
canal-deploy:可将其看做canal server。它负责伪装成mysql从库,接收、解析binlog并投递(不做处理)到指定的目标端(RDS、MQ 或 canal adapter)
canal-adapter:是canal的客户端适配器,可将其看作canal client。能够直接将canal同步的数据写入到目标数据库(hbase,rdb,es),
rdb是关系型数据库比如MySQL、Oracle、PostgresSQL和SQLServer等,比较的快捷方便。
canal-admin:为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。
三、Cancal 各个组件安装配置
3.1 Canal-admin 的安装
1、数据库创建用户
create user canal identified with mysql_native_password by 'canal'; grant all privileges on *.* to 'canal'@'%'; flush privileges; |
2、下载并解压
cd /u01/canal-admin tar –zxvf canal.admin-1.1.5.tar.gz |
3、初始化原数据
mysql -uroot -proot -S /u01/mysql3310/data/mysql.sock mysql> source /u01/canal-admin/conf/canal_manager.sql |
4、修改配置文件
vi u01/canal-admin/conf/application.yml
5、启动canal-admin
cd /u01/canal-admin/bin |