官网:https://github.com/alibaba/canal
对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog_format 为 ROW 模式
// 查看是否开启binlog
SHOW VARIABLES LIKE 'log_bin';
// 查看binlog-format
SHOW VARIABLES LIKE 'binlog_format';
若已开启binlog, 且binlog_format 为 ROW 模式可以直接跳过这一步
其他情况,则需在my.cnf 中进行如下配置
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction时(主从复制) 需要定义,不要和 canal 的 slaveId 重复
针对阿里云 RDS for MySQL , 默认打开了 binlog , 并且账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接跳过这一步
授权 canal 连接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
CREATE USER canal IDENTIFIED WITH mysql_native_password BY 'canal';
// 若不携带WITH mysql_native_password,可能会出现无法登录的问题
// 具体原因详见https://kalacloud.com/blog/authentication-plugin-caching-sha2-password-cannot-be-loaded/
// 若出现Your password does not satisfy the current policy requirements,则需核对密码复杂度策略
SHOW VARIABLES LIKE 'validate_password%';//具体参数解释可查看https://www.cnblogs.com/mysqljs/p/14246130.html
// 若为非生产环境,可直接调整密码强度
SET GLOBAL validate_password.policy=LOW
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
参考文档:
sudo mkdir -p /usr/local/zookeeper
cd /usr/local/zookeeper
# 阿里云zookeeper镜像:https://mirrors.aliyun.com/apache/zookeeper/
sudo wget https://mirrors.aliyun.com/apache/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
# 解压
sudo tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz --strip-components 1
cd /usr/local/zookeeper/conf
sudo cp zoo_sample.cfg zoo.cfg
sudo vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
clientPort=2181
# 3.5.0版本之后,内置Jetty Server,端口默认8080,若被占用,则需要修改此配置
admin.serverPort=12181
cd /usr/local/zookeeper/bin
# 初始化日志和数据存储目录
sudo ./zkServer-initialize.sh --force
# 启动
sudo ./zkServer.sh start
# 验证
telnet 127.0.0.1 2181
参考文档:https://github.com/alibaba/canal/wiki/Zookeeper-QuickStart
sudo mkdir -p /usr/local/kafka
cd /usr/local/kafka
# 阿里云kafka镜像:https://mirrors.aliyun.com/apache/kafka/
sudo wget https://mirrors.aliyun.com/apache/kafka/3.3.1/kafka_2.13-3.3.1.tgz -O kafka_2.13-3.3.1.tgz
# 解压
sudo tar -zxvf kafka_2.13-3.3.1.tgz --strip-components 1
sudo vim /usr/local/kafka/config/server.properties
# 监听地址
listeners=PLAINTEXT://:9092
# zk地址
zookeeper.connect=localhost:2181
# 数据存放位置
log.dirs=/usr/local/kafka/kafka-logs
cd /usr/local/kafka/
# 启动
sudo bin/kafka-server-start.sh -daemon config/server.properties &
# 查看所有topic
sudo bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181
参考文档:https://github.com/alibaba/canal/wiki/Kafka-QuickStart
访问 release 页面 , 选择需要的包下载, 如以 1.1.6 版本为例
# 创建并切换目录
sudo mkdir -p /usr/local/canal
cd /usr/local/canal
# 下载canal,若文件下载太慢,可使用https://proxy.zyun.vip/进行加速
sudo wget https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.deployer-1.1.6.tar.gz
tar -zxvf canal.deployer-1.1.6.tar.gz
sudo vim /usr/local/canal/conf/canal.properties
# 可选项: tcp(默认), kafka,RocketMQ,rabbitmq,pulsarmq
canal.serverMode = kafka
# canal instance目录
# 这里的canal.destinations = example可以设置多个,比如example1,example2,
# 设置完之后,需要创建对应的两个文件夹,并且每个文件夹下都有一个instance.properties文件
canal.destinations = example
# 默认开启,开启后canal.destinations配置将会失效,以自动扫描的为准
canal.auto.scan = true
# 自动重置位点,非生产环境可以开启,生产环境禁止开启
canal.auto.reset.latest.pos.mode = false
# kafka地址
kafka.bootstrap.servers = 127.0.0.1:9092
sudo vim /usr/local/canal/conf/example/instance.properties
# 需要监听的数据库地址
canal.instance.master.address=127.0.0.1:3306
# 数据库账号/密码
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
# mq config
# 需要监听的表
canal.instance.filter.regex=库名.表名,库名.表名
# 针对库名或者表名发送动态topic
canal.mq.dynamicTopic=库名.表名,库名.表名
# 启动
sudo /usr/local/canal/bin/startup.sh
# 查看 server 日志
tail -100f /usr/local/canal/logs/canal/canal.log
# 查看 instance 的日志
tail -100f /usr/local/canal/logs/example/example.log
参考文档: