目录
1、什么是 canal
canal是阿里巴巴开源的一款基于数据库日志的增量数据订阅和消费组件。它能够监听数据库的binlog日志,并将数据库的增量变更数据解析后转发给下游的消费者。
2、canal 能干什么
canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
3、canal 工作原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
4、如何使用 canal
本文以Windows为例,若MySQL在Linux上,请查看官网QuickStart · alibaba/canal Wiki · GitHub
5、MySQL端
- 查看MySQL版本
SELECT version()
- 查看binlog状态
SHOW MASTER STATUS
- 查看binlog是否授权
SHOW VARIABLES LIKE 'log_bin'
- 开启binlog文件
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
- 重启MySQL再次查看binlog是否授权
SHOW VARIABLES LIKE 'log_bin'
- 授权canal连接MySQL的权利
CREATE USER canal IDENTIFIED BY 'canal'
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%'
FLUSH PRIVILEGES
SELECT * FROM mysql.user
6、canal端
- 下载
- 解压
mkdir /tmp/canal
tar zxvf canal.deployer-$version.tar.gz -C /tmp/canal
- 配置修改
vim 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 = .\*\\\\..\*
- 启动
到对应的文件夹下 (/bin),前提是Linux需要安装Java8才能启动成功
sh bin/startup.sh
- 查看 server 日志
cat logs/canal/canal.log
- 查看 instance 的日志
cat logs/example/example.log
- 关闭
sh bin/stop.sh