暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【神器推荐!】 “ 还在为数据迁移发愁吗?DataX助你轻松搞定 !”

dba悠然 2024-04-18
102


“采菊东篱下,

  悠然现南山”。

           晋·陶渊明

DBA悠然

专注数据库技术,开源信创、AI云计算.......

击关注,一路同行吧!
今天因为有你,元气满满!

"作者: 悠然 | 首发公众号: dba悠然(orasky666)"

<温馨提示:以下内容仅代表个人观点>




青春不打折,信仰不迷失!




您在数据迁移时是否遇到这样痛点?:

1)手头没有好用的迁移工具(白嫖)

2)厂商暂不支持相关数据库类型迁移

3)厂商护城河不支持别家厂商数据库迁移

4)数据量太大干不动,迁移一点数据就噶了

5)迁移效率太低,一丁点数据要迁移半天

6)迁移工具无自动断点续传,网络一抖动就回到解放前


带着这些问题,今天为大家分享一款数据迁移神器DataX,希望在数据迁移时能帮得上忙,同时也是为上一篇文章补坑。






PART1:引言

笔者最近一段时间接触了较多的信创项目,在研究Datax工具前,异构数据库迁移是令人头疼甚至抓狂的事情。虽然有自研迁移工具,但是坑特别多,除了前面列举的痛点以外,还有其一些印象特别深场景:例如好不容易花了几十个小时迁移了几万张表的一部分,突然迁移工具OOM死机了,活白干了;这个时候选择继续肝重试,然而又出现其他问题导致迁移任务异常终止,这时您是否有口吐芬芳的冲动?


“为伊消得人憔悴”。此时此景,如果您的心情和我一样糟糕,这时请别慌,DataX它来了。


PART2:关于DataX

简单介绍一下今天主角Datax,DataX是一款强大的开源离线数据同步工具(https://github.com/alibaba/DataX),支持几乎所有的数据库类型以及异构数据库之间的迁移同步。


从源码来看,Datax主要包括reader方法从源端读取数据,writer方法写入数据到目标端,每个reader/writer方法支持一个类型的数据库,可以根据需要更换驱动支持不同的数据库类型,如下所示:


PART3:DataX使用指南

  1. DataX环境准备(安装部署略):

    --JDK1.8+

    --Python2.7

  2. 避坑指南(附最佳实践):

    --DataX目前只支持单表同步

    --源目标端jdbc URL需要调优,否则容易连接超时终止任务

    --DataX迁移大数据容易OOM,JVM启动参数需要调优

    --DataX配置文件调优(由于篇幅原因,部分参数仅有注释)

  3. 配置文件datax.json


    //从pg迁移数据到oceanbase:
    {
    "job": {
    "setting": {
    "speed": { #迁移速度设置
    "channel": 16,
    "bytes": 10737418240, #10GB
    },
    "errorLimit": { #脏数据控制
    "record": 10000, #
    "percentage": 0.1
    }
    },
    "content": [
    {
    "reader": {
    "name": "postgresqlreader", #pgreader驱动,读取源端pg数据库
    "parameter": {
    "username": "cosmic",
    "password": "allnewpasswd#2024",
    "column": ["*"],
    "connection": [
    {
    "table": ["t_ar_finarbillentry"],
    "jdbcUrl": [
    "jdbc:postgresql://172.17.32.68:5432/biz_tpl_big_fi"
    ]
    }
    ]
    }
    },
    "writer": {
    "name": "oceanbasev10writer", #obwriter驱动,写入OceanBase数据库
    "parameter": {
    "obWriteMode": "insert",
    "username": "ob_comm_fi@KdOracle#kdcluster",
    "password": "ob_comm_fi",
    "writerThreadCount": 5,
    "batchSize": 10000, #批量10000
    "useObproxy": true,
    "column": ["*"],
    "connection": [
    {
    "jdbcUrl": "jdbc:oceanbase://172.17.230.11:2883/ob_comm_fi?useLocalSessionState=true&allowBatch=true&allowMultiQueries=true&rewriteBatchedStatements=true&useCursorFetch=true",
    "table": ["t_ar_finarbillentry"]
    }
    ]
    }
    }
    }
    ]
    }
    }


    4.配置优化

      1)jdbc超时设置(24h)
      //
      net_write_timeout=86400 #目标端
      net_read_timeout=86400 #源端, 按需配置
      --源端pg
      "jdbc:postgresql://172.17.32.68:5432/biz_tpl_big_fi?net_read_timeout=86400"
      --目标端ob
      "jdbcUrl": "jdbc:oceanbase://172.17.230.11:2883/ob_comm_fi?useLocalSessionState=true&allowBatch=true&allowMultiQueries=true&rewriteBatchedStatements=true&useCursorFetch=true&net_write_timeout=86400",


      2)JVM优化设置
      设置运行时JVM内存为8G(根据实际情况调节),默认配置比较小容易OOM
      python datax.py --jvm="-Xms8G -Xmx8G -XX:-UseGCOverheadLimit" datax.json > datax.log &


      3)解决只能迁移单表问题
      多表需要定制脚本实现(注意脚本串行执行),如下:
      --3.1)创建表列清单,将需要同步的表写入配置table_list.txt
      T1
      T2
      T3
      --3.2)配置批量脚本batch_datax.sh,如下


      #!/bin/bash
      #Author:BoLeng
      #Date:2024/04/18  
      #Purpose:Batch datax sync serialize running
      #"TABLE_NAME" as input
      #"table": ["TABLE_NAME"]
      #


      for table in `cat table_list.txt`
      do
      dt=$(date  +'%F %H:%M:%S')
      #echo ${table}
      cat datax.json |sed 's/TABLE_NAME/'"${table}"'/g' > datax_${table}.json
      #Doing data sysnc


      echo "---------------------------------------------"
      echo "Now time is :${dt}"
      echo "Begin sync table : ${table}......"


      python datax.py datax_${table}.json --jvm="-Xms8G -Xmx8G -XX:-UseGCOverheadLimit" > datax_${table}.log


      if [ $? -eq 0 ];then
      echo "Succeed table: ${table} !"
      else
      echo "Failed table :${table}!"
      fi


      done
      #End bacth_datax.sh



      5.使用方法:

      --sh batch_datax.sh开始执行并打印同步表日志

      --查看当前同步表进展状态

      备注:上图仅为参考,经测试DataX实际上最高迁移速度可达10w+rows/s,迁移性能几乎可以追上DataPump。


      PART3:结束语

      值得一提的是:目前DataX工具只能进行数据迁移,因此在数据迁移前,需要将表结构等元数据同步到目标端。


      好了,关于DataX就分享到此,如在使用过程中有疑问,请联系我!

      END


      扫码关注,元气满满!
      数据库|开源信创|架构重构|DevOPS|云计算|AI



      精彩回顾




      我与信创的那些事...
      云与DBA爱恨情仇的故事
      Oracle直方图COST探究
      ......




      文章转载自dba悠然,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论