·一、简介
canal,译为管道水道,主要用途是对MySQL的增量日志,进行解析,提供增量数据订阅和消费
应用场景:
- 数据库镜像
- 数据库实时备份
- 带业务逻辑的增量数据处理
二、工作原理
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 流)
三、环境准备
1.查看当前mysql是否开启binlog模式
show variables like '%log_bin%' off未开启 on开启
2.支持的binlog format类型:statement,row,mixed
3.当前mysql用户至少拥有的权限
select,replication slave,replication client
4.数据库中需要导入 canal_manager的sql文件,建立canal的数据库,用来存放部署信息(sql脚本在canal Admin的解压包下)
四、生产集群的搭建
1. 部署canal-admin
背景:canal-admin设计上是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。
准备工作:MySQL、zookeeper集群、kafka集群
部署canal-admin.
1. 解压压缩包:tar -zxvf canal.admin-1.1.5.tar.gz
2. cd conf 将canal_manager.sql取出 并导入目标数据库
3. vim application.yml
2.部署canal-deployeer
1.解压压缩包tar -zxvf canal.deployeer-1.1.5.tar.gz 进入conf内
2.启动 ./startup.sh local
3. 浏览器 ip 8089 进入canal的管理工具
用户名:admin
密码: 123456
4.新建server
5. 如果需要集群,需要在集群管理内新建集群,配置集群信息,如果不需要集群,选中单机
下面三个必填项 server名称自定义,Server IP 为当前服务器的IP ,admin端口默认11110
点击确认
6. 对新建的server进行配置,编辑配置文件,这里是将监控的信息存放在kafka
canal.admin.passwd=6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
canal.serverModel = kafka
canal.zkServer = zookeeper 节点 ip+端口,可配置多个,用逗号隔开
7.点击instance管理,新建instance,每一个instance对应一个实例
8.编辑配置文件
canal.instance.master.address= 要抽取的数据库的ip+端口
canal.instance.dbUsername = 要抽取的数据库的 用户名
canal.instance.dbPassword= 要抽取的数据库的 密码
canal.instance.filter.regex= test.* 要抽取的数据库表的信息,用正则表达式,test.*表示监控test库下的所有的表 *.*表示监控全部数据里的全部表
canal.mq.topic= 将同步到的增量数据放到kafka中的哪一个topic,可以是已有的,可以是新的,如果kafka内没有该topic,会新建
3.canal_adaptor
该组件可以直接将增量数据同步到下游,配置文件中支持其他类库,但是实际中好像只支持将数据落到mysql中(个人对接过oracal失败,查询资料显示只支持mysql,个人简介,参考即可)