这两天验证了一下阿里的DataX数据同步工具,觉得DataX可以用来做管理数据的多级数据同步。DataX用来做批量数据迁移很适合,能够保证数据的一致性,性能也很好,结合时间戳字段,用来实现数据定时增量同步也是可以的,如每分钟或每5分钟增量同步一次数据。用DataX这个方案做增量同步要求每个表带一个时间戳字段,删除数据采用逻辑删除,这个要求也比较容易做到。

增量同步实现

实现增量同步需要在表中增加一个时间戳字段,如update_time,在同步配置文件中,通过where条件,根据时间戳字段筛选当前时间向前一段时间内的增量数据。{

"job": {

"content": [

{

"reader": {

"name": "mysqlreader",

"parameter": {

"column": [

"doc_id","title","file_path","approval_id","page_count","version"

],

"connection": [

{

"jdbcUrl": ["jdbc:mysql://192.168.81.1:3306/bootdo?useUnicode=true&characterEncoding=utf8"],

"table": ["es_approval_doc"]

}

],

"password": "123456",

"username": "root",

"where": "version > FROM_UNIXTIME(${start_time}) and version

}

},

"writer": {

"name": "mysqlwriter",

"parameter": {

"column": [

"doc_id","title","file_path","approval_id","page_count","version"

],

"writeMode":"update",

"connection": [

{

"jdbcUrl": "jdbc:mysql://192.168.81.1:3306/bootdo?useUnicode=true&characterEncoding=utf8",

"table": ["es_approval_doc_copy"]

}

],

"password": "123456",

"username": "root"

}

}

}

],

"setting": {

"speed": {

"channel": "1"

}

}

}

}

json文件中,${start_time}和${end_time}为调用datax.py时传入的参数。

如datax/bin/datax.py ../../mysql2mysql.json -p "-Dstart_time=1546337137 -Dend_time=1546337237"

定时同步实现

定时同步可以采用操作系统的定时任务+shell脚本实现。以下为在linux系统中的方案:

1、编写shell脚本,命名为syntask.sh:#!/bin/bash

# source /etc/profile

# 截至时间设置为当前时间戳

end_time=$(date +%s)

# 开始时间设置为120s前时间戳

start_time=$(($end_time - 120))

# datax/bin/datax.py ../../mysql2mysql.json -p "-Dstart_time=$start_time -Dend_time=$end_time"

这里通过脚本获取用于筛选条件中的开始时间start_time和结束时间end_time,将两个时间作为参数传给datax.py。

2、在crontab中,添加任务计划:

$crontab -e* */1 * * * /syntask.sh

DataX不适合实时数据同步或太频繁的定时同步,因为同步都需要去读取源表,频率过大对源表会造成压力。

此外,最好每次增量同步的时间段比定时任务时间间隔大一些,以保证所有时间产生的数据都被覆盖到。

异常情况下的补救措施:

如果某段时间内由于服务器、操作系统、网络等原因造成某个时间段内数据没有正常同步,那么可以通过手动执行同步的方式进行补救,执行同步时,将筛选的时间段加大大覆盖异常发生的整个时间段。

多表同步实现

通常我们的业务系统存在有多个表,表之间有外键关系。为实现多表的数据同步,我们需要理清外键依赖关系,为每个表分别编写json同步配置文件,并按外键依赖关系逐个调用datax.py。

如对于主表es_approval和子表es_approval_doc,可以对应写两个json配置文件:mysql2mysql-approval.json和mysql2mysql-approval-doc.json,在syntask.sh中先调用主表配置文件,再调用子表配置文件。#!/bin/bash

source /etc/profile

# 截至时间设置为当前时间戳

end_time=$(date +%s)

# 开始时间设置为120s前时间戳

start_time=$(($end_time - 3600))

/datax/bin/datax.py /mysql2mysql-approval.json -p "-Dstart_time=$start_time -Dend_time=$end_time"

/datax/bin/datax.py /mysql2mysql-approval-doc.json -p "-Dstart_time=$start_time -Dend_time=$end_time"

多级多路同步

要实现多级同步,可以在每两级之间搭建一个datax实例实现这两级之间的数据同步。

要实现多路同步,可以为同一个表编写多个配置文件,向多个目标库同步。

datax 持续数据同步_采用DataX实现多表增量数据同步相关推荐

  1. 数据同步之采用时间戳的方法进行增量数据同步(一)

    本文主要介绍源表为单表时,增量数据同步的情况.当源表为多表时,后面的文章会继续介绍. 一.数据同步情况说明 将源数据库S中的A表(将此表称为源表),通过ETL工具同步至目标数据库T的A表(将此表称为目 ...

  2. Mysql查询表中每行数据大小_计算数据库中各个表的数据量和每行记录所占用空间的脚本-转载来自(博客园 桦仔)...

    本文出处: 感谢桦仔 的分享精神! 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo  ...

  3. 阿里mysql数据库同步_如何对MySQL数据库中的数据进行实时同步-阿里云开发者社区...

    数据传输(Data Transmission) 支持以数据库为核心的结构化存储产品之间的数据传输. 它是一种集数据迁移.数据订阅及数据实时同步于一体的数据传输服务.数据传输致力于在公有云.混合云场景下 ...

  4. mysql多客户端数据不同步_一种多终端设备上的数据同步方法

    一种多终端设备上的数据同步方法 [技术领域] [0001] 属于移动通信技术领域,特别是涉及基于离网环境下多种移动终端设备之间的数 据同步的方法. 技术背景 [0002] 90年代未,数据同步始于有线 ...

  5. 基于数据库数据增量同步_基于 Flink SQL CDC 的实时数据同步方案

    简介:Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的 ...

  6. python爬虫爬网站数据登录_使用webdriver+urllib爬取网页数据(模拟登陆,过验证码)...

    urilib是python的标准库,当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得ur ...

  7. mysql gtid 同步_结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层...

    结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层,从库重复拉取主库数据,导致数据在从库被重复执行; mysql.gtid_executed,5.7.5 ...

  8. python构造icmp数据包_如何在python中构造ICMP数据包

    为了学习,我目前正在尝试创建一个简单的python porgram来向某个设备发送ICMP ping数据包.为了开始,我查看了python模块Pyping:https://github.com/Akh ...

  9. 的数据湖_一文读懂云原生数据湖体系

    导读:如何基于阿里云 OSS .JindoFS 和数据湖构建(Data Lake Formation,DLF)等基础服务,同时结合阿里云上丰富的计算引擎,打造一个全新云原生数据湖体系? 作者 | 吴威 ...

最新文章

  1. 将对象序列化与反序列实例
  2. 新的一年,开始新的学习旅途
  3. service-mesh
  4. Android自定义View Paint
  5. NavigationController 已经洗干净了, 就等你来
  6. 标准输入输出(C++)
  7. 更灵活、有个性的卷积——可变形卷积(Deformable Conv)
  8. 使用工具ngrok 实现内网穿透(免费)
  9. 缓存问题引发的一系列优化
  10. 1. WordPress 安装
  11. refprop物性库_REFPROP下载-REFPROP官方版下载[制冷剂物性查询]-天极下载
  12. 如何创建自己的apt软件源
  13. 十三、VMware vSphere 6.7虚拟化云管理之13、VCSA6.7设置主机许可
  14. Excel快捷键大全 Excel常用快捷键大全
  15. Python解微分方程
  16. 触屏收银机市场现状及未来发展趋势
  17. 人工智能是否将拥有人类意识?
  18. php用Ajax传递数组
  19. java 抽象类 Shape
  20. jquery 访问手机摄像头_jQuery webcam plugin调用摄像头

热门文章

  1. xp系统 javafx_使用JavaFX构建React系统
  2. fx 线程 弹窗_JFXPanel和FX Platform线程陷阱
  3. Java 14的新功能
  4. java8 camel_Meet Fabric8:基于Camel和ActiveMQ的开源集成平台
  5. java 代码风格_Java代码风格:最终决定
  6. antlr4 代码 语法树_使用ANTLR4,用于代码镜像和基于Web的DSL的Primefaces扩展
  7. Apache Payara:让我们加密
  8. 重新开始Java的原始字符串文字讨论
  9. 八位图 16位图_了解位图
  10. 为什么需要切换到在线签署文档和合同