canal安装和使用

本文介绍了MySQL数据库增量数据订阅工具Canal的工作原理、安装步骤和客户端启动过程。Canal通过模拟MySQL slave与主库交互,接收binlog并进行解析。在安装过程中,需要开启MySQL的binlog功能,配置Canal的instance.properties文件,并赋予Canal用户相关权限。完成安装后,可以通过启动脚本启动Canal服务端和客户端,监听并记录数据库的变更日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

canal安装和使用

Canal介绍

名称:canal

译意: 水道/管道/沟渠

语言: java开发

定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql

关键词: mysql binlog parser / real-time / queue&topic

工作原理:

 

 

原理相对比较简单:

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

2.mysql master收到dump请求,开始推送binary log给slave(也就是canal)

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

 

安装canal

mysql初始化

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

找到my.cnf文件

Vi  my.cnf 打开文件并编辑

[mysqld]

log-bin=mysql-bin #添加这一行就ok

binlog-format=ROW #选择row模式

server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

b. canal的原理是模拟自己为mysql slave,所以这里一定需要做为mysql slave的相关权限.

CREATE USER canal IDENTIFIED BY 'canal';  

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;

FLUSH PRIVILEGES;

启动步骤

1. 下载canal

直接下载网址如下:直接下载自己所需的版本

https://github.com/alibaba/canal/releases 

2. 解压包

tar zxvf canal.deployer-1.0.26-SNAPSHOT.tar.gz -C /canal/deployer

解压完成后进入 /canal/deployer 下 如下:

 

3.修改配置文件

进入 conf/example/下  修改instance.properties 配置文件

## mysql serverId

canal.instance.mysql.slaveId=0   //不可以和my.cnf 文件serverId 相同

# position info

canal.instance.master.address=134.96.33.134:10001    //修改成自己的数据库信息

# enable gtid use true/false

canal.instance.gtidon=false

canal.instance.master.journal.name=

canal.instance.master.position=

canal.instance.master.timestamp=

canal.instance.master.gtid=

 

# table meta tsdb info

canal.instance.tsdb.enable=true

canal.instance.tsdb.dir=${canal.file.data.dir:../conf}/${canal.instance.destination:}

canal.instance.tsdb.url=jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;

#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb

canal.instance.tsdb.dbUsername=canal    

canal.instance.tsdb.dbPassword=canal

#canal.instance.standby.address =

#canal.instance.standby.journal.name =

#canal.instance.standby.position =

#canal.instance.standby.timestamp =

#canal.instance.standby.gtid=

# username/password  //修改成自己的数据库信息

canal.instance.dbUsername=root   

canal.instance.dbPassword=root

canal.instance.defaultDatabaseName=company

canal.instance.connectionCharset=UTF-8

# table regex

//过滤表

canal.instance.filter.regex=.*\\..*

# table black regex

canal.instance.filter.black.regex=

4.准备启动

cd bin/

sh startup.sh

cd /canal/logs/canal/

more canal.,log

 

5.具体日志

cd cd /canal/logs/example/

more example.log

 

6.关闭

   sh stop.sh   kill -9  xxx 杀掉进程

截至目前canal 服务端已经启动成功

 

启动客户端ClientExample

启动步骤如同服务端一样

目录结构如下:

 

链接mysql 客户端

beeline:mysql -uroot -p --socket=/tmp/mysql.sock --port=10001

create database company;

use company;

drop table test;

create table test (  

uid int (4) primary key not null auto_increment,  

name varchar(10) not null); 

insert into test (name) values('10');

delete from test where uid='1';

启动成功后触发数据变更 logs 日志中可以看到:

 

截至目前binlog日志已经打印成功 后续同步hdsf 或hive 需要自行编写客户端程序

Hive 表保存在 HDFS 上,该文件系统不支持修改,因此我们需要一些额外工作来写入数据变更。常用的方式包括:JOIN、Hive 事务、或改用 HBase。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值