一、什么是canal
官网的介绍
canal,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
Canal 是阿里巴巴开源的一套分布式数据库同步系统,目前主要支持 MySQL、RDS。Canal 的主要原理是伪装成 MySQL 的 Slave 节点,监听 MySQL 主库的 binlog 文件,根据 binglog 将数据库事件发送到 MQ 中,消费端可以订阅 MQ 中的消息。为了方便 Canal 的运维人员,阿里还提供了 Canal Admin 这个运维平台,使用户可以快速和安全的操作。
二、canal能做什么
基于日志增量订阅&消费实现数据同步,canal的数据同步不是全量的,而是增量。基于binary log增量订阅和消费,canal可以做:
数据库镜像
数据库实时备份
多级索引 (卖家和买家各自分库索引)
search build
业务cache刷新
价格变化等重要业务消息
三、如何搭建canal
3.1 首先有一个MySQL服务器
当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x
3.1.1 在MySQL中需要创建一个用户,并授权:
-- 创建用户,用户名:canal,密码:canal@123456
create user canal identified by 'canal@123456';
-- 为canal用户赋予replication权限,*.*标识所有库
grant SELECT,REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by 'canal@123456';
-- 修改完毕立即生效
flush privileges;
3.1.2 使用命令查看数据库是否开启binlog模式:
show variables like 'log_%';
显示如下图:
log_bin属性值为ON,则binlog模式开启;为OFF则binlog模式关闭。
若binlog模式关闭,则在MySQL配置文件my.cnf设置如下信息:
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replac