使用阿里巴巴开源数据库同步工具DATAX实现跨数据库同步

使用阿里巴巴开源数据库同步工具DATAX实现跨数据库同步

  • DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括
    MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS
    等各种异构数据源之间高效的数据同步功能。

点击进入

先请配置DataX 环境变量

Linux、Windows
JDK(1.8)
Python(推荐Python2.6.X)
Apache Maven 3.x (Compile DataX)
    下面演示dataX
    配置示例:从MySQL读取数据 写入MYSQL
    (liunx/centos7) 各位学习的童鞋可以自己安装一个VM安装一个liunx系统

    演示条件
    mysql_reader 47.93.226.82:3606
    mysql_writer 47.93.226.82:3605
    安装mysql (作者docker安装mysql )
    docker run -p ip:ip --name mymysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d imageid
    -v 是挂载目录
    -p 是开放端口

一、工具下载以及部署

方法一、直接下载DataX工具包(如果仅是使用,推荐直接下载):DataX下载地址(http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz)

下载后解压至本地某个目录,修改权限为755,进入bin目录,即可运行样例同步作业:

$ tar zxvf datax.tar.gz
$ sudo chmod -R 755 {YOUR_DATAX_HOME}
$ cd  {YOUR_DATAX_HOME}/bin
$ python datax.py ../job/job.json


二、配置示例:从MySQL读取数据 写入MYSQL

   {
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "column": ["id","real_name"],
                        "connection": [
                            {

                             "jdbcUrl": [
                                    "jdbc:mysql://47.93.226.82:3306/test"
                                ],
                                "table": ["t_ur_user_m"]
                            }
                        ],
                        "password": "####",
                        "username": "dev@####"
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                         "column": ["id","real_name"],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://47.93.226.82:3307/test?characterEncoding=utf-8",
                                "table": ["datax_user"]
                            }
                        ],
                        "password": "####",
                        "username": "dev@####"
                    }
                }
            }

        ],
        "setting": {
            "speed": {
                "channel": "2"
            }
        }
    }
}

第三步:启动DataX

$ cd {YOUR_DATAX_DIR_BIN}
$ python datax.py ./mysql2odps.json 

同步结束,显示日志如下:

...
2015-12-17 11:20:25.263 [job-0] INFO  JobContainer -
任务启动时刻                    : 2015-12-17 11:20:15
任务结束时刻                    : 2015-12-17 11:20:25
任务总计耗时                    :                 10s
任务平均流量                    :              205B/s
记录写入速度                    :              5rec/s
读出记录总数                    :                  50
读写失败总数                    :                   0

三、配置定时任务(Linux环境):从MySQL读取数据 写入ODPS,通过crontab命令实现

前置条件:安装crond服务,并已启动

#查看crond服务是否启动,出现以下日志表示已启动
$/sbin/service crond status
 crond (pid  30742) is running...
 crond (pid  30742) is running...

第一步:创建作业的配置文件(json格式) 参考上节内容。这里假设已配置好MySQL到ODPS的配置文件mysql2odps.json

第二步:列出列出crontab文件,命令: crontab -l
(1)若出现以下日志,表示当前用户没有定时任务,用户需要新建crontab文件,并提交crontab文件,参考第三步。

$crontab -l
 no crontab for xxx

(2)若出现以下日志,表示当前用户已经有正在运行的定时任务,用户只需用命令crontab -e 来编辑crontab文件,参考第四步。 shell $ crontab -l 0,10,20,35,44,50 python /home/admin/datax3/bin/datax.py /home/admin/mysql2odps.json >>/home/hanfa.shf/log.date +\%Y\%m\%d\%H\%M\%S 2>&1

第三步:若当前用户没有定时任务(之前从未创建过crontab任务)
(1)创建一个新的crontab文件,如取名crondatax
示例1:每天13点5分进行同步作业,并把运行日志输出到目录/home/hanfa.shf/下log.运行时间 文件中,如定时运行是在2016-3-26 13:10:13运行的,产生的日志文件名为:log.20160326131023

$ vim crondatax
#输入以下内容
5  13   *  python /home/admin/datax3/bin/datax.py /home/admin/mysql2odps.json  >>/home/hanfa.shf/log.`date +\%Y\%m\%d\%H\%M\%S`  2>&1
#/home/admin/datax3/bin/datax.py 表示你安装的DataX datax.py所在目录(请替换为您真实的绝对路径目录);
#/home/admin/mysql2odps.json  表示作业的配置文件目录(请替换为您真实的绝对路径目录);
#/home/hanfa.shf/log.`date +\%Y\%m\%d\%H\%M\%S` 表示日志输出位置,并以log.当前时间 命名(请替换为您真实的绝对路径目录)

(2)提交你刚刚创建的crontab文件 shell $ crontab crondatax #crondatax 你创建的crontab文件名 (3)重启crontab服务 shell $ sudo /etc/init.d/crond restart Stopping crond: [ OK ] Starting crond: [ OK ] (4)在13点5分过后,在日志目录会看到对应的日文件 shell $ ls -al /home/hanfa.shf/ -rw-r--r-- 1 hanfa.shf users 12062 Mar 26 13:05 log.20160326130501

第四步:若当前用户已有定时任务(想继续增加定时任务)
(1)编辑已有crontab文件
示例2:每10分钟运行一次同步任务,并把运行日志输出到目录/home/hanfa.shf/下log.运行时间 文件中,如定时运行是在2016-3-26 13:10:13运行的,产生的日志文件名为:log.20160326131023

$ crontab -e
#会进入已有crontab文件编辑界面,继续增加定时任务即可,本示例增加以下内容,并保存
0,10,20,30,40,50      python /home/admin/datax3/bin/datax.py /home/admin/mysql2odps.json  >>/home/hanfa.shf/log.`date +\%Y\%m\%d\%H\%M\%S`  2>&1

(2)重启crontab服务


$ sudo /etc/init.d/crond restart Stopping crond: [ OK ] Starting crond: [ OK ] ``` (3)用crontab -l 命令检查是否添加成功

 $ crontab -l
5  13 * * *  python /home/admin/datax3/bin/datax.py /home/admin/mysql2odps.json  >>/home/hanfa.shf/log.`date +\%Y\%m\%d\%H\%M\%S`  2>&1
0,10,20,30,40,50 * * * *  python /home/admin/datax3/bin/datax.py /home/admin/mysql2odps.json  >>/home/hanfa.shf/log.

接下来请根据您所需要的插件完成配置,并完成同步。

所有数据源配置指南,请参考:DataX数据源指南
附录:

安装crond服务
yum install crontabs
服务操作说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
加入开机自动启动:
/sbin/chkconfig --level 35 crond on  

时间: 2024-09-13 17:52:23

使用阿里巴巴开源数据库同步工具DATAX实现跨数据库同步的相关文章

大数据同步工具DataX与Sqoop之比较

DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据http://www.aliyun.com/zixun/aggregation/34332.html">处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换,由淘宝数据平台部门完成.Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以

Linux 文件同步工具——inotify+rsync实现实时同步

文章整理自:http://ixdba.blog.51cto.com/2895551/580280 前面我们已经讲解了如何使用rsync实现文件同步,但是rsync会存在一些缺点: 一.rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsyn

Android中在SQLite数据库创建的触发器能跨数据库吗?

问题描述 比如有两个APK,第一个APK的数据库名为database1,有一张表table1,在第二个APK中有一个数据库database2,有一张表table2,其中table1和table2的结构是完全一样的,我想实现创建一个触发器,在向table1 insert一条记录的时候,通过触发器项table2插入一条相同的记录,这能实现吗?要怎么才能实现? 解决方案 触发器是一个数据库中的概念,没办法跨数据库,替代方案有Intent Broadcastrpc共享进程(这个方法请参考Phone和Te

大数据异构环境数据同步工具DataX 与Sqoop 之比较

从接触DataX起就有一个疑问,它和Sqoop到底有什么区别,昨天部署好了DataX和Sqoop,就可以对两者进行更深入的了解了. 两者从原理上看有点相似,都是解决异构环境的数据交换问题,都支持oracle,mysql,hdfs,hive的互相交换,对于不同数据库的支持都是插件式的,对于新增的数据源类型,只要新开发一个插件就好了, 但是只细看两者的架构图,很快就会发现明显的不同 DataX架构图 Job: 一道数据同步作业 Splitter: 作业切分模块,将一个大任务与分解成多个可以并发的小任

Database Deployment Manager 0.1f发布 多平台数据库设计工具

Database Deployment Manager(DDM)是一个面向桌面的多平台数据库http://www.aliyun.com/zixun/aggregation/6993.html">设计工具,它允许数据库管理员和程序员创建数据库结构(用面向对象的方法),并部署到现有的数据库.该工具可以用于创建图表,以确定定义结构之间的基本关系. Database Deployment Manager 0.1f该版本增加了一个新的连接管理器到你的数据库,使你不必记住它们就能更容易地创建视图的SE

阿里巴巴开源离线同步工具 DataX3.0 介绍

一. DataX3.0概览 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定高效的数据同步功能. 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源.当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步. 当前使用现状 DataX在阿里巴巴集团

阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)

项目背景 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了otter这样一个产品. otter第一版本可追溯到04~05年,此次外部开源的版本为第4版,开发时间从2011年7月份一直持续到现在,目前阿里巴巴B2B内部的本地/异地机房的同步需求基本全上了otte4. 目前同步规模: 同步数据量6亿 文件同步1.5TB(2000w张图片) 涉及200+个数据库实例之间的

阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费

背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元.ps. 目前内部使用的同步,已经支持mysql5.x和oracle部分版本的日志解析 基于日志增量订阅&消费支持的业务: 数据库镜像 数据库实时备份 多级索引 (卖家和买家各自分库索引) se

C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据]

C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据] 1. C#同步SQL Server数据库Schema 2. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据] 3. 分析下自己写的SQL Server同步工具的性能和缺陷 接着写数据同步,这次可以把有变化的数据进行更新了: 1.SQL批量更新函数: /// <summary> /// Note: for columns, the first string must be prima