DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步

这篇具有很好参考价值的文章主要介绍了DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景

Kettle-开源的ETL工具集-实现SqlServer到Mysql表的数据同步并部署在Windows服务器上:

Kettle-开源的ETL工具集-实现SqlServer到Mysql表的数据同步并部署在Windows服务器上_etl实现sqlserver报表服务器_霸道流氓气质的博客-CSDN博客

上面讲过Kettle的使用,下面记录下阿里开源异构数据源同步工具DataX

DataX

DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、

HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。

阿里datax,架构之路,开源,windows,sqlserver 

设计理念

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,

DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,

只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

当前使用现状

DataX在阿里巴巴集团内被广泛使用,承担了所有大数据的离线同步业务,并已持续稳定运行了6年之久。

目前每天完成同步8w多道作业,每日传输数据量超过300TB

DataX所支持的数据源

GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。

下面记录一个具体的示例-从Sqlserver同步数据到Mysql中,且表结构一样。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、DataX在Windows上的安装

参考官网快速开始文档:

DataX/userGuid.md at master · alibaba/DataX · GitHub

安装并配置好所需要的环境依赖。

阿里datax,架构之路,开源,windows,sqlserver

 文章来源地址https://www.toymoban.com/news/detail-718761.html

这里不需要自己编译,所以只配置了jdk1.8以及Python3的环境变量。

按照文档下载地址,下载DataX工具包

https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202210/datax.tar.gz

下载之后解压即可。

2、启动并测试stream2stream数据转换

解压之后来到bin目录下,新建创建作业的配置文件stream2stream.json文件

修改json内容为

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "streamreader",
          "parameter": {
            "sliceRecordCount": 10,
            "column": [
              {
                "type": "long",
                "value": "10"
              },
              {
                "type": "string",
                "value": "hello,你好,世界-DataX"
              }
            ]
          }
        },
        "writer": {
          "name": "streamwriter",
          "parameter": {
            "encoding": "UTF-8",
            "print": true
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 5
       }
    }
  }
}

这是官方提供的模板的示例json文件,用来自检是否成功配置和启动DataX。

然后在bin目录下打开cmd执行

python datax.py  ./stream2stream.json

等待执行完成没有提示报错,但是发现中文乱码

阿里datax,架构之路,开源,windows,sqlserver 

DataX命令框中文乱码需要设置编码格式,先在cmd中输入

chcp 65001

然后再执行上面命令

执行过程中的中文输出也不再乱码

阿里datax,架构之路,开源,windows,sqlserver 

执行结果也不再乱码

阿里datax,架构之路,开源,windows,sqlserver 

3、获取不同数据源转换的json模板。

上面是从stream到stream的数据源转换,如果是其它数据源的json模板如何获取。

DataX提供了获取不同数据源转换的json模板获取的指令

可以通过命令查看配置模板:

python datax.py -r {YOUR_READER} -w {YOUR_WRITER}

如何获取数据源的名称,比如这里从sqlserver读取,写入到mysql,那么获取json模板的命令:

python datax.py -r sqlserverreader -w mysqlwriter

阿里datax,架构之路,开源,windows,sqlserver

此时会返回一个sqlserver到mysql的json模板。

这是因为在其源码中目录就是这样叫的。

阿里datax,架构之路,开源,windows,sqlserver 

获取说可以直接点击进去里面的doc目录,查看示例的json文件内容

阿里datax,架构之路,开源,windows,sqlserver 

并且每个配置项的参数也有对应的说明

阿里datax,架构之路,开源,windows,sqlserver

 

sqlserverreader参数说明

DataX/sqlserverreader.md at master · alibaba/DataX · GitHub

mysqlwriter参数说明

DataX/mysqlwriter.md at master · alibaba/DataX · GitHub

所以这里新建全量更新的json文件sqlserver2mysqlALL.json

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "sqlserverreader",
                    "parameter": {
                        "connection": [
                            {
                                "jdbcUrl": [
								"jdbc:sqlserver://localhost:1433;DatabaseName=数据库名"
								],
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "改成自己的密码",
                        "username": "用户名",
						"column": [
						"checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "column": [
					    "checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=gbk",
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "密码",
                        "preSql": [
						"delete from vehicleresult"
						],
                        "session": [],
                        "username": "用户名",
                        "writeMode": "insert"
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "5"
            }
        }
    }
}

注意这里的流程就是从sqlserver中读取指定列的数据,这里的column就是配置的那些列。

然后写入到mysql时需要预先执行一下删除语句,在preSql中配置的

delete from vehicleresult

vehicleresult是表名。然后写入模式是直接插入

然后执行以上json模板的命令

python datax.py  ./sqlserver2mysqlALL.json

即可实现全量更新。

注意事项,两边的数据结构包括类型、长度、是否非空等要保持一致。

比如sqlserver中某个字段不为空,存在空数据,但是mysql中对应字段设置为不为空,在同步时就会认定为脏数据进而同步失败。

上面全量更新结果

阿里datax,架构之路,开源,windows,sqlserver

 

4、以上命令每执行一次,则进行一次全量更新,所以需要一个定时bat脚本来定时执行命令。

新建bat文件并修改内容为

#设置编码
chcp 65001
@echo off
title "同步数据"
set INTERVAL=15
timeout %INTERVAL%
 
:Again

python datax.py  ./sqlserver2mysqlALL.json

echo %date% %time:~0,8%
 
timeout %INTERVAL%
 
goto Again

以上内容代表每15秒执行一次

python datax.py  ./sqlserver2mysqlALL.json

将此bat放在bin下与json文件同级目录下,双击执行即可。

5、以上是全量更新,如何实现增量更新。

注意这里增量更新有条件限制,首先这里的数据没有删除只会新增和更新,而且更新只会更新当天的数据。

所以这里首先执行以上上面的全量更新,确保第一次对接将数据获取,然后后面用定时任务执行增量更新,只需要

查询和替换当前的数据即可。

另外得保证有日期时间字段,那么在读取数据和写入数据时就可以用where条件限制查询当前的数据。

另外这里的主键并不是自增的int型数据,不然也可以根据自增主键id进行增量更新。

这里的sqlserver是由三方系统提供且无法更改为需要的类型

阿里datax,架构之路,开源,windows,sqlserver 

修改上面的sqlserverreader添加where条件,查询当天的数据

Sqlserver中查询当天的数据

where datediff(day,startTime,getdate())=0

其中startTime为时间字段。

Mysql中查询当天的数据

WHERE DATE(startTime) = CURDATE()

所以修改上面的json文件为

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "sqlserverreader",
                    "parameter": {
                        "connection": [
                            {
                                "jdbcUrl": [
								"jdbc:sqlserver://localhost:1433;DatabaseName=数据库名"
								],
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "改成自己的密码",
                        "username": "用户名",
						"where": "datediff(day,startTime,getdate())=0",
						"column": [
						"checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						]
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "column": [
					    "checkid",
						"cardID",
						"hphm",
						"startTime",
						"endTime",
						"linenumber",
						"cwgt",
						"cwgtUL",
						"cwgtJudge",
						"cwkc",
						"cwkcResult",
						"cwkcUL",
						"cwkcJudge",
						"cwkk",
						"cwkkResult",
						"cwkkUL",
						"cwkkJudge",
						"cwkg",
						"cwkgResult",
						"cwkgUL",
						"cwkgJudge",
						"wkccJudge",
						],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=gbk",
                                "table": [
								"表名"
								]
                            }
                        ],
                        "password": "密码",
                        "preSql": [
						"delete from 表名 WHERE DATE(startTime) = CURDATE();"
						],
                        "session": [],
                        "username": "root",
                        "writeMode": "insert"
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "5"
            }
        }
    }
}

此时再用bat脚本定时执行即可,定时时间自行修改上面的15参数。

然后再新增一条今天的数据测试同步效果。

将上面增量更新的json命名为sqlserver2mysqlAdd.json

阿里datax,架构之路,开源,windows,sqlserver

 

到了这里,关于DataX-阿里开源离线同步工具在Windows上实现Sqlserver到Mysql全量同步和增量同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云开源容器镜像同步工具-image-syncer,再也不怕跨环境同步容器镜像了

    image-syncer是一个容器镜像同步工具,可用来进行多对多的镜像仓库同步,支持目前绝大多数主流的 docker 镜像仓库服务 请根据使用的操作系统选择对应的二进制文件进行下载,对下载的文件进行解压,解压后可看到可执行文件image-syncer 3.1 获取config.yaml配置文件 config.yaml 在二进

    2024年02月01日
    浏览(41)
  • 阿里云开源 image-syncer 工具,容器镜像迁移同步的终极利器

    由于阿里云上的容器服务 ACK 在使用成本、运维成本、方便性、长期稳定性上大大超过公司自建自维护 Kubernets 集群,有不少公司纷纷想把之前自己维护 Kubernetes 负载迁移到阿里云 ACK 服务上。在迁移过程中,往往会碰到一个不大不小的坑:那就是怎么把已有的容器镜像平滑的

    2024年02月21日
    浏览(41)
  • 数据同步工具—DataX—Web部署使用

    以前了解datax,感觉对易用性不大好,目前发现已经图形配置工具。简单整理一下。 Datax 的使用过程中,我们会发现,不管是利用 java 调用以及 python 命令启动的方式,我们都无法进行任务的管理,并且每次执行任务前,我们 都需要编辑 Json 配置文件,这是比较繁琐的,随着业

    2024年02月05日
    浏览(44)
  • 数据同步工具DataX、Sqoop、Maxwell、Canal

    常见的数据库同步同步主要有:DataX、Sqoop、Maxwell、Canal 数据同步工具种类繁多,大致可分为两类,一类是以DataX、Sqoop为代表的基于Select查询的离线、批量同步工具,另一类是以Maxwell、Canal为代表的基于数据库数据变更日志(例如MySQL的binlog,其会实时记录所有的insert、upda

    2024年02月11日
    浏览(41)
  • 阿里云dataworks离线同步

    用公网ip,从本地mysql数据库到另一个本地mysql数据库,在dataworks上配置离线同步和调度任务 阿里云登录 1、进入dataworks 2、进入控制台 3、选择数据开发 4、配置数据源 选择mysql数据源 连接串模式 测试连通性 5、配置任务调度 新建虚拟节点 创建离线同步 配置调度 配置增量 按

    2024年02月11日
    浏览(42)
  • 业务数据同步工具介绍和使用(Sqoop、Datax、Canal、MaxWell、Flink CDC)

    介绍 Sqoop : SQ L-to-Had oop ( Apache已经终止Sqoop项目 ) 用途:把关系型数据库的数据转移到HDFS(Hive、Hbase)(重点使用的场景);Hadoop中的数据转移到关系型数据库中。Sqoop是java语言开发的,底层使用 mapreduce 。 需要注意的是,Sqoop主要使用的是Map,是数据块的转移,没有使

    2024年02月15日
    浏览(81)
  • 数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

    Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品,支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据,已应用于数百家企业生产,也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主要解决数据集成领域的常见问题: * 数据源

    2024年02月04日
    浏览(51)
  • Datax助力轻松迁移SQLServer数据至GreatSQL

    版本 IP 端口 Microsoft SQL Server 2017 192.168.140.160 1433 版本 IP 端口 GreatSQL-8.0.32 192.168.139.86 3308 环境说明 :借助Docker使用镜像启动数据库 2.1.1安装docker 1.安装基础软件包 2.配置 docker-ce 国内 yum 源(阿里云) 3.安装 docker 依赖包 4.安装 docker-ce 5.启动容器 2.1.2 拉取镜像 2.1.3运行容器

    2024年04月22日
    浏览(32)
  • Canal —— 一款 MySql 实时同步到 ES 的阿里开源神器

    目录 一. 前言 二. Canal 简介和使用场景 2.1. Canal 简介 2.2. Canal 使用场景 三. Canal Server 设计 3.1. 整体设计 3.2. EventParser 设计 3.3. CanalLogPositionManager 设计 3.4. CanalHAController 类图设计 3.5. EventSink 类图设计和扩展 3.6. EventStore 类图设计和扩展 3.7. MetaManager 类图设计和扩展 四. Can

    2024年01月25日
    浏览(56)
  • MySQL如何实时同步数据到ES?试试阿里开源的Canal

    前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——  Canal  。在了解了它的工作原理和使用场景后,顿时产生了浓厚的兴趣。今天,就让我们跟随我的脚步,一起来揭开它神秘的面纱吧。 目录 前言 简介  工作原理  MySQL主备复制原理 canal 工作原理 Canal架构  C

    2024年02月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包