简介

随着业务量的上升,以前的架构已经不满足业务的发展,数据作为业务中最重要的一环,需要有更好的架构作为支撑。目前我司有sql server转mysql的需求,所以结合当前业务,我挑选了阿里云开源的一个很好用的同步工具DataX

DataX介绍

DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、MaxCompute(原ODPS)、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

框架设计


datax_framework_new

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

实战

下载安装部署

  1. $ wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
    $ tar zxvf datax.tar.gz
    $ sudo chmod -R 755 {YOUR_DATAX_HOME}

也可以自己下载源码安装,不过需要安装maven

  1. $ git clone git@github.com:alibaba/DataX.git
    $ cd {DataX_source_code_home}
    $ mvn -U clean package assembly:assembly -Dmaven.test.skip=true

打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,结构如下:

  1. $ cd {DataX_source_code_home}
    $ ls ./target/datax/datax/
    bin conf job lib log log_perf plugin

配置

你需要编写一个基本信息配置文件,文件包括原库到写入库的表字段对应关系。基本信息包括

  1. {
    "job": {
    "content": [
    {
    "reader": { //读入库配置,比如说是sql server
    "name": "", //数据源名称,别瞎写
    "parameter": {} //数据库配置信息
    },
    "writer": { //写入库配置,比如说是mysql
    "name": "", //数据源名称,别瞎写
    "parameter": {} //数据库配置信息
    }
    }
    ],
    "setting": { //基本设置
    "speed": { //流量控制
    "channel": 1, //同步时候的并发数
    "byte": 104857600 //同步时候的字节大小,影响速度
    },
    "errorLimit": { //脏数据控制
    "record": 10, //脏数据最大记录数阈值
    "percentage": 0.05 //脏数据占比阈值
    }
    }
    }
    }

下面给一个配置demo,大家根据自己的需要修改demo,然后使用

  1. {
    "job": {
    "setting": {
    "speed": {
    "byte": 1073741824
    }
    },
    "content": [
    {
    "reader": {
    "name": "sqlserverreader",
    "parameter": {
    "username": "root", //自己根据需要修改数据库用户名
    "password": "admin", //密码
    "where": "",
    "connection": [
    {
    "querySql": [
    "SELECT Id,MyReasonId,MyProductType,MyReason FROM dbo.MyReason WITH ( NOLOCK )"
    ],//全量sql,根据自己需要写增量sql也可以
    "jdbcUrl": [
    "jdbc:sqlserver://192.168.1.1:1433;DatabaseName=XXXX"
    ]//自己根据需要修改数据库连接
    }
    ]
    }
    },
    "writer": {
    "name": "mysqlwriter",
    "parameter": {
    "writeMode": "insert", //写入模式,这里写插入
    "username": "root",//自己根据需要修改数据库用户名
    "password": "admin",//密码
    "column": [
    "id", //注意与上面的列一一对应
    "my_reason_id",
    "my_product_type",
    "my_reason"
    ],
    "connection": [
    {
    "jdbcUrl": "jdbc:mysql://192.168.1.2:3306/XXX?useUnicode=true&characterEncoding=utf-8",
    "table": [
    "my_reason"
    ]
    }
    ]
    }
    }
    }
    ]
    }
    }

编辑好之后,放到新建work目录里面,然后存为mssql_to_mysql.json,下面就可以运行了

运行

  1. $ cd {YOUR_DATAX_HOME}/bin
    $ python datax.py ../work/mssql_to_mysql.json

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

  1. ...
    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

这样就说明成功啦

进阶

job配置

将你需要同步的增量数据放入到安装目录job下面,存为myjob.json,名称随意

linux下通过crontab命令实现

  1. #查看crond服务是否启动,出现以下日志表示已启动
    $/sbin/service crond status
    crond (pid 30742) is running...
  • 第一步:创建作业的配置文件(json格式) 参考上节内容。这里假设已配置好MySQL到ODPS的配置文件mysql2odps.json

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

    1. $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\%S2>&1

  • 第三步:若当前用户没有定时任务(之前从未创建过crontab任务)

    (1)创建一个新的crontab文件,如取名crondatax

    ​ 示例1:每天13点5分进行同步作业,并把运行日志输出到目录/home/hanfa.shf/下log.运行时间 文件中,如定时运行是在2016-3-26 13:10:13运行的,产生的日志文件名为:log.20160326131023

    1. $ 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

    1. $ 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服务

  1. $ sudo /etc/init.d/crond restart

​ (3)用crontab -l 命令检查是否添加成功

  1. $ 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 >>/h

进阶内容引自官方教程 ^_^

高可用数据同步方案-SqlServer迁移Mysql实战的更多相关文章

  1. 20、高可用数据同步工具drbd介绍

    20.1.什么是drbd: 20.2.drbd的工作原理: 20.3.drbd的同步模式: 1.实时同步模式: 2.异步同步模式: 20.4.drbd生产应用场景: 1.生产场景中drbd常用于基于高 ...

  2. MySQL高可用集群方案

    一.Mysql高可用解决方案 方案一:共享存储 一般共享存储采用比较多的是 SAN/NAS 方案. 方案二:操作系统实时数据块复制 这个方案的典型场景是 DRBD,DRBD架构(MySQL+DRBD+ ...

  3. oracle数据同步方案

    数据同步方案:--用DBLINK 创建与所需同步表的链接------------------------------------------------------------------------ ...

  4. MySQL高可用读写分离方案预研

    目前公司有需求做MySQL高可用读写分离,网上搜集了不少方案,都不尽人意,下面是我结合现有组件拼凑的实现方案,亲测已满足要求,希望各位多提建议 :) 一.    网上方案整理(搜集地址不详...) 1 ...

  5. Mysql分布式部署高可用集群方案

    HAproxy+Mycat +MySQL主从集群高可用方案 1.         HAproxy高可用方案: haproxy+keepalived,利用keepalived的VIP浮动能力,(多台ha ...

  6. Nfs+Drdb+Heartbeat 数据存储高可用服务架构方案

    一.方案的应用场景 适用于2千万-3千万PV架构的网站,Nfs数据存储高可用服务方案 备注:互联网排名前30左右公司常用的架构 二.生产环境方案部署原理图 三.生产环境服务器硬件配置: 生产环境中采用 ...

  7. Mycat节点扩缩容及高可用集群方案

    数据迁移与扩容实践: 工具目前从 mycat1.6,准备工作:1.mycat 所在环境安装 mysql 客户端程序. 2.mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包. 3.对 ...

  8. activemq+Zookeper高可用集群方案配置

    在高并发.对稳定性要求极高的系统中,高可用的是必不可少的,当然ActiveMQ也有自己的集群方案.从ActiveMQ 5.9开始,ActiveMQ的集群实现方式取消了传统的Master-Slave方式 ...

  9. Redis高可用集群方案——哨兵

    本篇文章版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,讲到了redis主从复制,读写分 ...

随机推荐

  1. HTML5对表单的约束验证

    在HTML5中增加了许多新的功能,用于表单提交到服务器之前对表单进行数据的验证(抢了javascript的饭碗),有了这些功能,即便是javascript没有加载进来还是可以确保基本的验证.换句话说, ...

  2. Python模块-subprocess模块

    Run()方法 >>> a = subprocess.run(['df','-h']) 文件系统 容量 已用 可用 已用% 挂载点 udev 468M 0 468M 0% /dev ...

  3. k8s基础(3)etcd集群

    下载安装 https://github.com/coreos/etcd/releases 在这网页,可以看到有多个版本共选择. 下载3.25 解压后, cd etcd-v3.2.5-linux-amd ...

  4. 大富翁开发日记:一、使用巨型lua协程

    一个大胆的尝试:使用巨型lua协程来表示整个“一局”流程. lua协程是一个很另类的功能,有并发的影子但又不是真的并发,所以真正拿它来做大功能框架的范例不多,通常用于一些小型trick式设计.但这次我 ...

  5. leetcode:234. Palindrome Linked List

    这个题目非常好.http://blog.csdn.net/u012249528/article/details/47124771给出了三种解法,其中前两个是不满足条件的,不过具有参考价值: 第一种办法 ...

  6. Library学习日志(……)

    添加Library在buildpath中,就是右键工程->properties->java buildpath->Libraries 然后点击add Library就是添加Libra ...

  7. [CentOS7] Segmentation fault (core dumped),但是在主机上找不到core文件

    1.问题描述 程序执行报:Segmentation fault (core dumped),但是在主机上找不到core文件 2.如何让系统生成core file /home>ulimit -ac ...

  8. 【WIP】客户端JavaScript 事件处理

    创建: 2017/10/15 完成: 2017/10/15   更新: 2017/11/04 加粗事件的参数 更新: 2017/12/12 增加事件处理时获取事件对象的方法 更新: 2019/05/2 ...

  9. 微信JSApi支付---常见问题

    1.支付一直报  “get_brand_wcpay_request:false” 错误 原因: 商户平台上设置的[支付授权目录]路劲不正确,比如:支付的页面的域名是:www.xxx.com/pay/s ...

  10. 在eclipse中打开文件所在的目录

    eclipse中默认是不能直接打开文件所在的目录的,需要在文件中右键-->properties-->location,复制到资源管理器中才能打开文件所在的目录.这种方法很麻烦.这里介绍一种 ...