Canal
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
工作原理
MySQL主备复制原理
MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
canal 工作原理
canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
canal 解析 binary log 对象(原始为 byte 流)
Canal Admin
canal 1.1.4版本,迎来最重要的WebUI能力,引入canal-admin工程,支持面向WebUI的canal动态管理能力,支持配置、任务、日志等在线白屏运维能力,具体文档:Canal Admin Guide
Canal java 客户端
使用
Mysql 开启binlog日志
先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下
# 唯一标识 不要和 canal 的 slaveId 重复
server-id=1
# binlog文件名
log-bin=mysql-binlog
# 选择 ROW 模式
binlog-format=ROW
# 要忽略的数据库
binlog-ignore-db=mysql
启动mysql后可以在data目录中看到新增的文件
mysql-binlog.000001
mysql-binlog.index
查看一下状态:
SHOW MASTER STATUS;
"File" "Position" "Binlog_Do_DB" "Binlog_Ignore_DB" "Executed_Gtid_Set"
"mysql-binlog.000001" "154" "" "mysql" ""
新建账号
授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
查看一下:
SELECT USER,HOST FROM mysql.user;
Canal 配置
解压缩下载的canal-deployer压缩包
conf/canal.properties
默认配置,注意:
# 服务端口配置
canal.port = 11111
# 客户端连接账号配置(目前未设置)
# canal.user = canal
# canal.passwd = E3619321C1A937C46A0D8BD1DAC39F93B27D4458
# 客户端连接端点名
canal.destinations = example
conf/example/instance.properties
默认配置,注意:
## canal伪装的slaveId(只要和已有的节点ID不冲突即可)
canal.instance.mysql.slaveId=99
# 数据库连接配置
canal.instance.master.address=127.0.0.1