简介

随着业务量的上升,以前的架构已经不满足业务的发展,数据作为业务中最重要的一环,需要有更好的架构作为支撑。目前我司有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,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

实战

下载安装部署

$ 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

$ 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/ ,结构如下:

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

配置

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

{
"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,然后使用

{
"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,下面就可以运行了

运行

$ cd  {YOUR_DATAX_HOME}/bin
$ python datax.py ../work/mssql_to_mysql.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

这样就说明成功啦

进阶

job配置

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

linux下通过crontab命令实现

#查看crond服务是否启动,出现以下日志表示已启动
$/sbin/service crond status
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\%S2>&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 

​ (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 >>/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. net start sql server (instance)

    如何启动 SQL Server 实例(net 命令) 其他版本   可以使用 Microsoft Windows net 命令启动 Microsoft SQL Server 服务. 启动 SQL Se ...

  2. iOS开发者福利之精品源码汇总!免费下载

    汇总一些看着不错的源码,有需要的朋友过来下载吧!{:4_102:} 1.用swift制作的色彩炫丽的进度条-KDCircularProgressKDCircularProgress是使用swift制作 ...

  3. tomcat jsp 数字串传值异常问题

    1.在下面的jsp内嵌java代码去除num之前,有某Controller已经有了操作:      request.getSession().setAttribute("num", ...

  4. 字符编码ANSI、ASCII、GB2312、GBK、GB18030、UNICODE、UTF-8小结

    编码和解码可以理解成二进制和字符(广义的字符,包括汉字等)的映射表,编码即从字符映射至二进制,解码则为逆过程. 1.英语字符编码ASCII 开始计算机只在美国用.8字节一共可以组合出256(2的8次方 ...

  5. shell批量创建用户随机密码

    批量创建用户随机密码企业面试题3:批量创建10个系统帐号usr01-usr10并设置密码(密码为随机8位字符串). #! /bin/bash . /etc/init.d/functions Path= ...

  6. java多线程无锁和工具类

    1 无锁 (1) cas (compare and swap) 设置值的时候,会比较当前值和当时拿到的值是否相同,如果相同则设值,不同则拿新值重复过程:注意,在设置值的时候,取值+比较+设值 是一条c ...

  7. 由hibernate配置inverse="true"而导致的软件错误,并分析解决此问题的过程

    题目背景软件是用来做安装部署的工具,在部署一套系统时会有很多安装包,通过此工具,可以生成一个xml文件用以保存每个安装包的文件位置.顺序.参数.所需脚本.依赖条件验证(OS..net.IIS.数据版本 ...

  8. 面试题: 数据库 真实面试题已看1 操作语句 存储过程 挺好 sql语句练习 有用

    今天到某公司笔试,数据库考的比较多,但是说老实话,考的也比较基础.现在趁回忆得起来,将数据库知识简单整理如下: 一.建表指令 比如创建一个学生表student,它由学号Sno,姓名Sname,性别Ss ...

  9. 1.4 DVWA亲测XSS漏洞

    首先需要有配置好的DVWA环境,像下图这样   其中: XSS (DOM) :  DOM型XSS漏洞 XSS (Reflected) : 反射性XSS漏洞  XSS (Stored) :  存储型XS ...

  10. 使用form 组件写一个用户注册,并用 bootstrap渲染

    需求:使用form组件,写一个用户注册系统,包含用户名, 密码, 确认密码,手机号,性别,爱好,注册.并用bootsrap渲染,成果如下: 首先创建一个django 项目.然后在连接pymysql数据 ...