当前位置: 首页 > news >正文

基于数据同步canal的使用详解

canal服务简谈

Canal 是阿里巴巴开源的一个基于 MySQL 数据库 binlog 的增量订阅和消费组件,主要用于实现 MySQL 数据库的实时数据同步。
附:文章结尾附项目配置详解及相关具体文档说明


文章目录

  • canal服务简谈
  • canal的核心工作原理
  • 一、canal的主要特性
  • 二、基本架构
  • 三、使用前确认
    • 1.确认目标数据库的binlog是否开启及为用户赋权限
  • 打开binlog
  • 选择ROW(行)模式
  • 四、MQ信息初始化
  • 五、canal的adapter配置详解
  • 六、常用同步执行脚本
  • 七、常见问题处理
  • 总结


canal的核心工作原理

Canal 通过模拟 MySQL slave 的交互协议,伪装自己为 MySQL 的 slave,向 MySQL master 发送 dump 协议。MySQL master 收到 dump 请求后,开始推送 binary log 给 slave (即 Canal),Canal 解析 binary log 对象 (原始为 byte 流),转换为结构化数据供下游消费。


一、canal的主要特性

实时性:基于 MySQL binlog 实现秒级数据同步

高性能:单线程解析能力可达 5-10W TPS

低侵入:对业务系统无侵入,不需要修改业务代码

多种消费模式:支持直接 API 调用、MQ 消息队列等多种消费方式

高可用:支持集群部署,具备故障自动转移能力

二、基本架构

MySQL Master → Canal Server → Canal Client → 目标系统
(解析binlog) (数据转换) (如ES/Redis/其他DB)

三、使用前确认

1.确认目标数据库的binlog是否开启及为用户赋权限

– 使用命令登录:mysql -u root -p
– 创建用户 用户名:canal 密码:Canal@123456
create user ‘canal’@‘%’ identified by ‘canal’;
– 授权 *.表示所有库
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on . to ‘canal’@‘%’ identified by ‘canal’;
– 授权 stat 库写权限
grant select,insert,update,delete on stat.
to ‘canal’@‘%’ identified by ‘canal’;

针对已有的账户可通过grants查询权限:

mysql> show grants for ‘root’ ;
±--------------------------------------------------------------------------+
| Grants for root@% |
±--------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO root@% |
±--------------------------------------------------------------------------+

2.下一步在MySQL配置文件my.cnf设置如下信息(已有忽略):
[mysqld]

打开binlog

log-bin=mysql-bin

选择ROW(行)模式

binlog-format=ROW

3.改了配置文件之后,重启MySQL,使用命令查看是否打开binlog模式:
mysql> show variables like ‘binlog_format’;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| binlog_format | ROW |
±--------------±------+

mysql> show variables like ‘log_bin’;
±--------------±------+
| Variable_name | Value |
±--------------±------+
| log_bin | ON |
±--------------±------+

四、MQ信息初始化

rabbitmq.host =10.0.0.1
rabbitmq.virtual.host =/
rabbitmq.exchange =canal_exchange
rabbitmq.username =user_name
rabbitmq.password =pass_word
rabbitmq.deliveryMode =2

五、canal的adapter配置详解

dataSourceKey: storestockDS # 对应application.yml中配置的数据源srcDataSourcesdestination: canal_topic  # 对应application.yml中配置的instance:
groupId: g1 #对应application.yml中配置的groupId:
outerAdapterKey: mysql1  #对应application.yml中配置的outerAdapters.keyconcurrent: false
dbMapping:database: storestock #数据源库库名dbpatition: 1  # 源库分库数量tablepatition: 1 # 源库分表数量table: store_stock_receiving_order # 源库表名targetDb: stat # 目标库名targetTable: store_stock_receiving_order # 目标表名targetPk:id: id # 同步主键commitBatch: 3000 # 提交批次mapAll: true # true标识同步所有字段

六、常用同步执行脚本

历史数据增量同步命令
增量数据同步(按主键查询,已存在调过)
curl http://127.0.0.1:18802/etl/rdbnyls/mysql1/****.yml  -X POST -d "params=2018-01-25;2018-01-26"
全量数据同步(要先清空目标表)
curl   http://127.0.0.1:18802/etl/rdbnyls/mysql1/****.yml   -X POST 

七、常见问题处理

curl http://127.0.0.1:18802/etl/rdbnyls/mysql1/****.yml -X POST
同步报错task not fuond
检查storestock.store_stock_in_batch.yml配置【检查标红的部分是否配置一致】
dataSourceKey: sunboxDS #数据源application.yml中
destination: canal_topic #队列topic
groupId: g1 #application.yml中目标库分组
outerAdapterKey: mysql1 #application.yml中目标库分组key

检查配置“:” 这个冒号后面是有空格的

总结

Canal 相比其他数据同步工具的最大优势在于其基于 MySQL 原生复制协议实现,具有低延迟、高可靠的特点,特别适合需要实时数据同步的场景。

https://pan.quark.cn/s/3d6b24c701e1

相关文章:

  • Transformer 中 QKV 流向全解析(含注意力机制箭头图示)
  • Spring--IOC容器的一些扩展属性
  • C++之二叉搜索树及其实现
  • 【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略
  • 17、Rocket MQ快速实战以及核⼼概念详解
  • Vscode自定义代码快捷方式
  • MySQL-日志+事务
  • 海拔案例分享-门店业绩管理小程序
  • uniapp+vue3做小程序,获取容器高度
  • 短期项目与长期目标如何同时兼顾
  • 华为云 Flexus+DeepSeek 征文|增值税发票智能提取小工具:基于大模型的自动化信息解析实践
  • 【面板数据】上市公司投资者保护指数(2010-2023年)
  • 【达梦数据库】忘记SYSDBA密码处理方法-已适配
  • 第十六届蓝桥杯C/C++程序设计研究生组国赛 国二
  • JavaScript中的10种排序算法:从入门到精通
  • 【源码+文档+调试讲解】基于web的运动健康小程序的设计与实现y196
  • VMware安装Ubuntu22.04详细教程
  • 基于协议转换的 PROFIBUS DP 与 ETHERNET/IP 在石化生产中的协同运行实践
  • Docker镜像制作
  • 从Java API调用者到架构思考:我的Elasticsearch认知升级之路
  • 网站续费话术/本站3天更换一次域名yw
  • 服装行业网站建设及推广/搜索引擎优化专员
  • 为您服务网站/湖人排名最新
  • 我想做网站怎么做昆山/上海seo优化bwyseo
  • 电子元器件商城/网站seo在线诊断分析
  • 程序员做任务的网站/广州线下培训机构停课