canal安装

title: canal安装
tags: [canal]
date: 2020-01-19 10:00:00

介绍

canal [kə'næl],主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。支持数据同步到elasticsearch、redis、kafka等服务。

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

搭建参考地址:https://github.com/alibaba/canal/wiki/AdminGuide

canal 工作原理

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议

  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )

  • canal 解析 binary log 对象(原始为 byte 流)

canal安装

主机环境:

  • canal+mysql:192.168.40.100

系统环境:

  • jdk1.8.0_221

  • MySQL5.5.64

canal下载地址

  • canal 服务端:canal.deployer-1.1.4.tar.gz

  • canal 客户端测试:canal.example-1.1.4.tar.gz

  • canal web管理界面:canal.admin-1.1.4.tar.gz

  • canal 适配器:canal.adapter-1.1.4.tar.gz

安装步骤:

  1. 安装mysql,并开启bin-log

  2. 安装jdk

  3. 安装canal.deployer,修改配置

  4. 安装canal.example测试服务是否成功

mysql安装

mysql安装跳转

canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,并且配置binlog模式为row,重启mysql。

vim /etc/my.cnf
[mysqld]  
log-bin=mysql-bin #添加这一行就ok  
binlog-format=ROW #选择row模式  
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复  

登录mysql查看bin-log是否开启

mysql> show variables like 'binlog_format';
mysql> show variables like 'log_bin';

配置canal服务使用的账号权限

# 创建用户授权
mysql> CREATE USER canal IDENTIFIED BY 'canal';    
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';  
mysql> FLUSH PRIVILEGES;
# 查看授权
mysql> show grants for 'canal';

jdk安装

jdk安装跳转

canal.deployer安装

# 下载地址
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
mkdir -p /data/{canal.deployer,canal.admin,canal.example}
tar xf canal.deployer-1.1.4.tar.gz -C /data/canal.deployer

配置文件说明:

  • conf/canal.properties:canal全局配置文件

  • conf/example/instance.properties:一个数据源配置文件

  • logs/canal/canal.log:canal.deployer服务日志

  • logs/example/example.log:数据源日志

修改配置

vim conf/example/instance.properties
# 数据库连接地址
canal.instance.master.address=127.0.0.1:3306

# 数据库账号
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

# mysql 数据解析关注的表,Perl正则表达式.多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)
# 常见例子:
# 1. 所有表:.*   or .*\\..*
# 2. canal schema下所有表: canal\\..*
# 3. canal下的以canal打头的表:canal\\.canal.*
# 4. canal schema下的一张表:canal\\.test1
# 5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
# table regex:白名单,指定收集的库或表
canal.instance.filter.regex=.*\\..*
# table black regex:黑名单
canal.instance.filter.black.regex=

注:

  1. 一个example目录为一个数据源,如果需要配置多个数据源,可以复制example为其它名字,再修改

  2. example目录为canal默认数据源,不能改名或删除,否正会报错

  3. canal每5秒,自动加载conf下的数据源目录,配置数据源不需要重启服务

# 启动服务端口为11111,11112
./bin/startup.sh
./bin/stop.sh

canal.example安装

# 下载地址
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.example-1.1.4.tar.gz
tar xf canal.example-1.1.4.tar.gz -C /data/canal.example
cd /data/canal.example
./bin/startup.sh

# 监控example日志
tailf logs/example/entry.log

注: canal.example服务只能收集example数据源操作数据,如果是新增的数据源,需要java编写客户端获取数据。

测试服务

  1. 监控example日志

  2. 操作mysql增加、删除、更新

  3. example日志显示相应的bin-log日志

  4. 至此,最简单canal服务搭建成功

posted @ 2020-05-09 16:56  自在1990  阅读(408)  评论(0编辑  收藏  举报