高可用数据同步方案-SqlServer迁移Mysql实战

高可用数据同步方案-SqlServer迁移Mysql实战,第1张

概述高可用数据同步方案-SqlServer迁移Mysql实战 简介 随着业务量的上升,以前的架构已经不满足业务的发展,数据作为业务中最重要的一环,需要有更好的架构作为支撑。目前我司有sql server转mysql的需求,所以结合当前业务,我挑选了阿里云开源的一个很好用的同步工具DataX DataX介绍 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等 高可用数据同步方案-sqlServer迁移MysqL实战 简介

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

datax介绍

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

框架设计

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",//密码 "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 -lno 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 +@H_592_419@\%Y@H_592_419@\%m@H_592_419@\%d@H_592_419@\%H@H_592_419@\%M@H_592_419@\%S` 2>&1 #/home/admin/datax3/bin/datax.py 表示你安装的datax datax.py所在目录(请替换为您真实的绝对路径目录); #/home/admin/MysqL2odps.Json 表示作业的配置文件目录(请替换为您真实的绝对路径目录); #/home/hanfa.shf/log.`date +@H_592_419@\%Y@H_592_419@\%m@H_592_419@\%d@H_592_419@\%H@H_592_419@\%M@H_592_419@\%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

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

总结

以上是内存溢出为你收集整理的高可用数据同步方案-SqlServer迁移Mysql实战全部内容,希望文章能够帮你解决高可用数据同步方案-SqlServer迁移Mysql实战所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存