使用datax实现数据库同步Oracle到Mysql(保姆级)

打印 上一主题 下一主题

主题 1032|帖子 1032|积分 3096

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、开辟环境:Linux Centos7

二、下载datax工具

DataX工具下载地点:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
三、搭建环境

3.1 上传压缩包并解压

使用长途毗连工具毗连服务器,将下载好的datax.tar.gz上传到指定位置(我是自定义文件夹下,方便自己好找)。

3.1.1 进入安装目录:

  1. cd /mydata/dataX
复制代码


3.1.2 解压

解压之后会出现如上图序号3所示文件夹 datax。
  1. tar -xzvf datax.tar.gz
复制代码


3.2 删除隐蔽文件

不删除会影响的实行.
3.2.1 进入datax文件夹

  1. cd datax
复制代码


3.2.2 删除隐蔽文件

  1. find ./ -name '._*' -print0 |xargs -0 rm -rf
复制代码


3.3 实行datax自带的测试脚本

  1. ./bin/datax.py job/job.json
复制代码

如果实行结果如下图结果,就没问题。

四、全量同步数据

4.1 获取脚本模板

  1. ./bin/datax.py -r oraclereader -w mysqlwriter
复制代码

结果如下:

复制脚本json代码。
4.2 编写脚本

实行以下命令,新建json脚本文件,并粘贴刚才复制的脚本模板,然后根据自己的需求修改脚本。
  1. vi job/oracle_to_mysql.json
复制代码

  1. {
  2.     "job": {
  3.         "content": [
  4.             {
  5.                 "reader": {
  6.                     "name": "oraclereader",
  7.                     "parameter": {
  8.                         "column": [
  9.                             "ID",
  10.                             "NAME",
  11.                             "TYPE",
  12.                             "NO",
  13.                             "CREATE_TIME"
  14.                         ],
  15.                         "splitPk": "ID",
  16.                         "where" : "NAME is not null",
  17.                         "connection": [
  18.                             {
  19.                                 "jdbcUrl": ["jdbc:oracle:thin:@172.xx.xx.xx:1521:orcl"],
  20.                                 "table": ["XXX.XXX"]
  21.                             }
  22.                         ],
  23.                         "password": "xxxxxx",
  24.                         "username": "xxxx"
  25.                     }
  26.                 },
  27.                 "writer": {
  28.                     "name": "mysqlwriter",
  29.                     "parameter": {
  30.                         "column": [
  31.                             "id",
  32.                             "name",
  33.                             "type",
  34.                             "no",
  35.                             "create_time"
  36.                            
  37.                         ],
  38.                         "connection": [
  39.                             {
  40.                                 "jdbcUrl": "jdbc:mysql://172.xxx.xxx.xx:3306/xxx?useUnicode=true&characterEncoding=UTF-8",
  41.                                 "table": ["xxxx"]
  42.                             }
  43.                         ],
  44.                         "username": "xxxxx",
  45.                         "password": "xxxxx",
  46.                         "preSql": [],
  47.                         "session": ["set session sql_mode='ANSI'"],
  48.                         "writeMode": "insert"
  49.                     }
  50.                 }
  51.             }
  52.         ],
  53.         "setting": {
  54.             "speed": {
  55.                 "channel": "1"
  56.             }
  57.         }
  58.     }
  59. }
复制代码
tips1: (如果实行脚本报错毗连不上oracle数据库,再看此提示)
"jdbcUrl": ["jdbcracle:thin172.xx.xx.xx:1521rcl"],  这里我在此狠狠栽跟头了【流下没有技术的眼泪】。端口号1521后边的“xx”通常环境下就是“orcl”,但是有的数据库不是orcl。详细请看附录-温馨提示-tips1.
tips2: 带条件的读取源库数据同步到目标库。上图所示:"where" : "NAME is not null",表示只把源库中NAME字段值不为空的数据同步到目标库。
4.3 实行脚本

tips3:先看一下datax使用的mysql毗连依靠是哪个版本的,在下图所示:


 如果你是装的mysql8, 那需要对应版本的依靠,更换到此处的5.x。如果装的5.x的,可以忽略此提示。
  1. ./bin/datax.py job/oracle_to_mysql.json
复制代码

等候他分析并实行脚本即可,实行完毕会打印如下日记:

五、增量同步

5.0 修改json脚本

  1. vi job/oracle_to_mysql.json
复制代码

修改reader的where值
  1. "where" : "CREATE_TIME >to_date('${create_time}','yyyy-mm-dd hh24:mi:ss')  and CREATE_TIME <= to_date('${end_time}','yyyy-mm-dd hh24:mi:ss')"
复制代码
tips4: 表中需要有个“CREATE_TIME”字段且有值,不然差别步,我自己测试的 

5.1 创建增量脚本文件

  1. vi job/increment_sync.sh
复制代码

5.2 编写脚本

  1. #!/bin/bash
  2. source /etc/profile
  3. #当前时间戳
  4. cur_time=$(date +%s)
  5. #结束时间
  6. end_time="'$(date -d @$cur_time +"%Y-%m-%d %H:%M:%S")'"
  7. #开始时间,为当前时间的前120s
  8. create_time="'$(date -d @$(($cur_time-120)) +"%Y-%m-%d %H:%M:%S")'"
  9. # 执行datax脚本,传入时间范围
  10. /mydata/dataX/datax/bin/datax.py /mydata/dataX/datax/job/oracle_to_mysql.json -p "-Dcreate_time=$create_time -Dend_time=$end_time" &
复制代码
5.3 给脚本文件赋权限

  1. chmod -R 777 job/increment_sync.sh
复制代码

5.4 设置 crontab 定时任务

  1. vi /etc/crontab
复制代码


然后生存并退出即可。
六、附录

6.1 温馨提示

tips1:

总是报数据库毗连失败:数据库名称错误,请检查数据库实例名称或者接洽DBA确认该实例是否存在并且在正常服务]. - 详细错误信息为:
  1. java.sql.SQLException: Listener refused the connection with the following error:
  2. ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
复制代码
已解决 ,是SID的问题.错误重点是:listener does not currently know of SiDa given in connect descriptor,以及强调:SID!SERVICE NAME。查询数据库的SID,发现数据库的SID确实变了,不一样,导致毗连错误,更换毗连的SID,就可以解决。查询数据库的SID:
  1. select instance name from V$instance
复制代码

6.2 声明与感谢

该教程也是我工作中要完成数据库同步的需求时,参考大佬们的教程,并且实践后结合自己遇见的问题总结出来的笔记,盼望对大家有用,避免踩坑,进步服从!非常感谢大佬的教程解我燃眉之急!以下是大佬详细教程:
DataX oracle同步mysql(全量和增量)_oracle 全量 增量-CSDN博客
最后,如果朋友您发现有不足之处或者错误,非常欢迎您的指正,一起交流学习,菜鸟互啄哈哈哈共同进步!
(总结不易,求免费的赞一下,感谢!)


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表