来自云龙湖轮廓分明的月亮 发表于 3 天前

Canal数据库同步必备工具 - 怎样搭建集群、对接MySQL以及对接KafKa

Canal 根本使用

   功能:主要用于数据库同步。
保举参考官方:


[*]本地 安装:https://github.com/alibaba/canal/wiki/QuickStart 【学习接纳】
[*]基于Docker 安装:https://github.com/alibaba/canal/wiki/Docker-QuickStart
https://i-blog.csdnimg.cn/img_convert/c84714ca52fe4a90070d15b7a4f21e13.png
1. 准备工作


[*]确保 MySQL 已启用 Binlog :
# 确保你已经在 MySQL 中正确配置并启用了二进制日志(Binlog)。可以通过以下命令检查:
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'binlog_format';
SHOW VARIABLES LIKE 'server_id';
# log_bin: 应为 ON
# binlog_format: 推荐设置为 ROW
# server_id: 必须唯一(对于多实例)
   注意:如果MySQL是Docker配置的,可以去对一个的容器卷配置一个 default.cnf :、


[*]-v /itholmes/mysql/conf:/etc/mysql/conf.d : 在这个下面创建一个 default.cnf ,这样MySQL启动的时间,也会默认加载该配置中的内容。配置内容,如下:

log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
bind-address = 0.0.0.0

[*]创建 Canal 用户并授予权限:


[*]Canal 必要一个专用的 MySQL 用户,而且必要对数据库的 Replication 权限。
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
2. 下载安装部署 Canal

# 下载 canal, 访问 release 页面 , 选择需要的包下载, 如以 1.1.7 版本为例
wget https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.deployer-1.1.7.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.admin-1.1.7.tar.gz
# wget https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.adapter-1.1.7.tar.gz

# 创建本地 canal目录
mkdir /usr/local/canal

# 解压缩
tar -zxvf canal.deployer-1.1.7.tar.gz -C /usr/local/canal
文件名功能主要作用实用场景canal.adapter-1.1.7数据同步适配器同步增量数据到目标存储系统。数据集成(如 MySQL → Elasticsearch)。canal.admin-1.1.7管理与监控平台管理和监控 Canal Server 和 Adapter。集中化管理多个 Canal 实例。canal.deployer-1.1.7焦点折务模块捕捉 MySQL 的 binlog 增量数据。CDC 系统的基础模块。canal.example-1.1.7示例与模板快速上手与验证配置。测试和学习使用。   选择组件时,可以根据实际需求:


[*] 仅做数据捕捉:只必要 canal.deployer。
[*] 必要同步到目标系统:必要 canal.deployer + canal.adapter。
[*] 必要管理和监控:增长 canal.admin。
3. 安装 Canal Admin UI


[*]解压 canal admin
tar -zxvf canal.admin-1.1.7.tar.gz -C canal_admin

[*]修改配置文件
vim application.yml
https://i-blog.csdnimg.cn/img_convert/ede1c5adc5387a9739c5bee4abf48666.png

[*]初始化 admin_manager 数据库:(在 conf 目次【 /opt/canal/canal_admin/conf】下面 :有个 admin_manager )
mysql -uroot -p -h数据库的ip
# 导入初始化SQL
source conf/canal_manager.sql

[*]进入 bin 目次下,启动 canal admin 服务
./startup.sh

[*]访问 http://center-server:8089/ ,查看 UI 页面。


[*]默认,管理员账号为:admin / 123456
4. 配置 Canal Admin


[*]新建集群。


[*]必要 zookeeper 地点。
https://i-blog.csdnimg.cn/img_convert/aba2b31c8cf62bf8cc9af8d658ce5601.png

[*]修改主配置:
https://i-blog.csdnimg.cn/img_convert/fb95d62c7a4546ea0f040e70bdc6d5a5.png

[*]canal.properties 载入模板:
https://i-blog.csdnimg.cn/img_convert/ad940660f14c2836fec3a2ee75455b53.png
模板配置,修改如下:
# IP为admin服务地址
canal.admin.manager = center-server:8089
# zookeeper配置,集群用逗号隔开,不部署canal集群可以省略
canal.zkServers = center-server:2181
# 发送方式 tcp, kafka, rocketMQ, rabbitMQ
canal.serverMode = kafka
# kafka配置,集群用逗号隔开
kafka.bootstrap.servers = center-server:9092
保存即可。
5. 部署 Canal Deploy 服务


[*]安装 Canal Deploy 服务
tar -zxvf canal.deployer-1.1.7.tar.gz -C canal_deploy

[*]修改 canal_local.properties 配置:
vim canal_local.properties
https://i-blog.csdnimg.cn/img_convert/64a38d2c5b7fd2ea3a5024bf755db2e7.png

[*]进入 bin 目次,进行启动:
./startup.sh
local
[*]管理页面就应该多了个 Server 服务。
https://i-blog.csdnimg.cn/img_convert/43b6f76b8cd810effe15f67d4f81e8ad.png
6. 配置 监控实例 (instance)


[*]新建 instance 实例。
https://i-blog.csdnimg.cn/img_convert/279466136409bbcf3503ee1fdfc02044.png

[*]载入模板:
https://i-blog.csdnimg.cn/img_convert/c64c257a649c0f6192f52c9698765b02.png
修改配置如下:
#作为数据库slave的id,单独部署canal.deployer一定不要重复,通过admin配置方式好像不用
canal.instance.mysql.slaveId=1235
#数据库地址
canal.instance.master.address=center-server:3306
# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# table regex监听的表名,这个配置比较重要。此配置的意思是监听testcanal库下的stu表,topic为 testcanal_stu。
canal.instance.filter.regex=testcanal\\.stu
# mq 默认 发送的topic名字 ,如果固定topic,就配置到这个就好,不用配置下面的动态
canal.mq.topic=example
# 如需动态topic则配置dynamicTopic
canal.mq.dynamicTopic=.*\\..*
# canal.mq.partition表示数据写到kafka中哪个分片中,此时数据量不大 是只放到0分区里
canal.mq.partition=0
#如果数据量大则需要配置分区数与 表名hash计算分区。官方说:会有热点表分区过大问题
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=.*\\..*
7. 搭建 KafKa 和 Kafdrop

见:Github - xupengboo - Docker单节点运维部署命令.md
   学习为主,保举,官方部署 kafka:https://kafka.apache.org/quickstart

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Canal数据库同步必备工具 - 怎样搭建集群、对接MySQL以及对接KafKa