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

canal+DataX实现数据全量/实时同步

一、背景介绍

        业务场景

        需求单位提了很多报表的专案,内部讨论需要使用数仓分层架构来处理,那首先第一步就是需要建立ODS层,我们使用的架构就是,通过canal将数据从MySQL实时同步至postgres,这个postgres就是ODS层,供后续的其他业务使用。

        于是搭建了canal集群,并且实现了部分数据从MySQL实时同步至postgres,那么要怎么解决全量数据同步的问题?

        问题点

        1、实时同步搭建好以后,后续的数据新增/修改/删除,都会被canal采集并且实时同步至postgres,也就是增量部分的数据没问题。

        2、那实时同步之前的那部分数据要怎么同步过来呢?这里可以用Kettle脚本、datax等工具进行同步。

        3、如果在使用工具进行同步的期间,MySQL数据库中的数据被修改/删除了,这部分数据怎么通知到postgres进行修改呢?

        思路解析

        第1、2个问题都是可以解决的,那第3个问题,差异部分数据怎么告知postgres进行修改呢?回想canal实时同步数据的原理,它是通过从MySQL的binlog中读取相应的DDL或者DML来进行数据实时同步的,并且canal在创建Instance的时候,还可以指定binlog的文件名以及position,然而,第三个问题中发生的数据篡改,肯定会被记录到MySQL的binlog中,那么差异部分的数据,自然就可以通过canal的Instance指定binlog文件名及position进行再次同步了

二、实现过程

        全量同步

        使用DataX进行数据全量同步

        1、关闭canal实例

        2、记录MySQL binlog信息

        3、编写DataX任务脚本

#这里是使用DataX进行全量数据同步,首先需要编写这样一个json文件
vi scm_base_sys_msg.json#在文件中加入如下内容(连接IP、用户名、密码、表名、字段名需要修改成自己要同步的信息):
#preSql,就是在执行数据同步之前要执行的SQL,可以替换成truncate table
{"job": {"setting": {"speed": {"channel": 1}},"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","type_id","model_id","title","content","url","url_param","is_alert","send_state","read_state","from_user_id","to_user_id","send_time","delete_flag","create_by","create_time","update_by","update_time"],"splitPk": "id","connection": [{"table": ["sys_msg"],"jdbcUrl": ["jdbc:mysql://192.168.0.1:3306/scm_base"]}]}},"writer": {"name": "postgresqlwriter","parameter": {"username": "postgres","password": "123456","column": ["id","type_id","model_id","title","content","url","url_param","is_alert","send_state","read_state","from_user_id","to_user_id","send_time","delete_flag","create_by","create_time","update_by","update_time"],"preSql": ["delete from sys_msg"],"connection": [{"jdbcUrl": "jdbc:postgresql://192.168.0.1:5432/scm_base","table": ["sys_msg"]}]}}}]}
}

        4、运行脚本

        进入datax安装路径

#执行数据同步脚本
python bin/datax.py job/scm_base_sys_msg.json

        5、执行结果

        差异同步(增量同步)

        1、修改Instance

        将记录下来的MySQL binlog信息,修改上去(注意,只补充这两个配置项),然后保存

#修改这两个配置项
canal.instance.master.journal.name=mysql-bin.000147
canal.instance.master.position=955294096

        2、启动实例

        至此,所有配置完成

三、总结

        差异同步中启动实例后,你会发现,canal会自动同步差异部分的数据,并且增量数据的配置也算是OK了


文章转载自:

http://98ozZWj0.xhjjs.cn
http://Fhm35LwK.xhjjs.cn
http://IKqmGlFl.xhjjs.cn
http://JfqtL34e.xhjjs.cn
http://2amw78Er.xhjjs.cn
http://CkwD0Pb5.xhjjs.cn
http://sovHDiqn.xhjjs.cn
http://xEvl0ait.xhjjs.cn
http://hC2xigwm.xhjjs.cn
http://P7euP4sz.xhjjs.cn
http://zB18oCQ1.xhjjs.cn
http://1Tm48PLN.xhjjs.cn
http://FV9eNjFx.xhjjs.cn
http://Vs7nRPGR.xhjjs.cn
http://u0bSPFrl.xhjjs.cn
http://mmpqQOCR.xhjjs.cn
http://38kWfIMg.xhjjs.cn
http://16YPA4Vv.xhjjs.cn
http://5beQ5MKX.xhjjs.cn
http://857ozVh8.xhjjs.cn
http://P96ROBdk.xhjjs.cn
http://Hl0bUCWb.xhjjs.cn
http://FEDFQEot.xhjjs.cn
http://O0nqwiXp.xhjjs.cn
http://5fE5GJdm.xhjjs.cn
http://s2Q86CmD.xhjjs.cn
http://KtgmKUW2.xhjjs.cn
http://BC1GLqGP.xhjjs.cn
http://Tg5a1ooN.xhjjs.cn
http://Tw0IcCMW.xhjjs.cn
http://www.dtcms.com/a/370466.html

相关文章:

  • Jenkins运维之路(自动获得分支tag自动构建)
  • 服务器内存和普通计算机内存在技术方面有什么区别?
  • 同一台nginx中配置多个前端项目的三种方式
  • 【LeetCode热题100道笔记】排序链表
  • Shell 脚本实现系统监控与告警
  • 【算法--链表】86.分割链表--通俗讲解
  • 基于区块链的IoMT跨医院认证系统:Python实践分析
  • 用内存顺序实现 三种内存顺序模型
  • rh134第五章复习总结
  • Java包装类型
  • Linux awk 命令使用说明
  • 一个正常的 CSDN 博客账号,需要做哪些基础准备?
  • 文件I/O与I/O多路复用
  • protobuf的序列反序列化
  • Linux/UNIX系统编程手册笔记:共享库、进程间通信、管道和FIFO、内存映射以及虚拟内存操作
  • 吴恩达机器学习(九)
  • 基于多级特征编码器用于声学信号故障检测模型
  • 【LeetCode热题100道笔记】二叉树中的最大路径和
  • The Open Group 宣布成立Industrial Advanced Nuclear™ 联盟)
  • 问题:指令译码前控制信号还没有产生,那么如何控制译码前指令的动作呢?
  • 软件测试理论
  • Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
  • ChatGPT下的相关聊天提示词
  • C# WinForm分页控件实现与使用详解
  • 在Ubuntu平台搭建RTMP直播服务器使用SRS简要指南
  • 设计艺术~缓存结构设计
  • 腾讯混元游戏视觉生成平台正式发布2.0版本
  • MySQL整理【01】
  • MQTT 与 Java 框架集成:Spring Boot 实战(三)
  • docker 推送仓库(含搭建、代理等)