马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、开辟环境:Linux Centos7
二、下载datax工具
DataX工具下载地点:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
三、搭建环境
3.1 上传压缩包并解压
使用长途毗连工具毗连服务器,将下载好的datax.tar.gz上传到指定位置(我是自定义文件夹下,方便自己好找)。
3.1.1 进入安装目录:
3.1.2 解压
解压之后会出现如上图序号3所示文件夹 datax。
3.2 删除隐蔽文件
不删除会影响的实行.
3.2.1 进入datax文件夹
3.2.2 删除隐蔽文件
- find ./ -name '._*' -print0 |xargs -0 rm -rf
复制代码
3.3 实行datax自带的测试脚本
- ./bin/datax.py job/job.json
复制代码
如果实行结果如下图结果,就没问题。
四、全量同步数据
4.1 获取脚本模板
- ./bin/datax.py -r oraclereader -w mysqlwriter
复制代码
结果如下:
复制脚本json代码。
4.2 编写脚本
实行以下命令,新建json脚本文件,并粘贴刚才复制的脚本模板,然后根据自己的需求修改脚本。
- vi job/oracle_to_mysql.json
复制代码
- {
- "job": {
- "content": [
- {
- "reader": {
- "name": "oraclereader",
- "parameter": {
- "column": [
- "ID",
- "NAME",
- "TYPE",
- "NO",
- "CREATE_TIME"
- ],
- "splitPk": "ID",
- "where" : "NAME is not null",
- "connection": [
- {
- "jdbcUrl": ["jdbc:oracle:thin:@172.xx.xx.xx:1521:orcl"],
- "table": ["XXX.XXX"]
- }
- ],
- "password": "xxxxxx",
- "username": "xxxx"
- }
- },
- "writer": {
- "name": "mysqlwriter",
- "parameter": {
- "column": [
- "id",
- "name",
- "type",
- "no",
- "create_time"
-
- ],
- "connection": [
- {
- "jdbcUrl": "jdbc:mysql://172.xxx.xxx.xx:3306/xxx?useUnicode=true&characterEncoding=UTF-8",
- "table": ["xxxx"]
- }
- ],
- "username": "xxxxx",
- "password": "xxxxx",
- "preSql": [],
- "session": ["set session sql_mode='ANSI'"],
- "writeMode": "insert"
- }
- }
- }
- ],
- "setting": {
- "speed": {
- "channel": "1"
- }
- }
- }
- }
复制代码 tips1: (如果实行脚本报错毗连不上oracle数据库,再看此提示)
"jdbcUrl": ["jdbc racle:thin 172.xx.xx.xx:1521 rcl"], 这里我在此狠狠栽跟头了【流下没有技术的眼泪】。端口号1521后边的“xx”通常环境下就是“orcl”,但是有的数据库不是orcl。详细请看附录-温馨提示-tips1.
tips2: 带条件的读取源库数据同步到目标库。上图所示:"where" : "NAME is not null",表示只把源库中NAME字段值不为空的数据同步到目标库。
4.3 实行脚本
tips3:先看一下datax使用的mysql毗连依靠是哪个版本的,在下图所示:
如果你是装的mysql8, 那需要对应版本的依靠,更换到此处的5.x。如果装的5.x的,可以忽略此提示。
- ./bin/datax.py job/oracle_to_mysql.json
复制代码
等候他分析并实行脚本即可,实行完毕会打印如下日记:
五、增量同步
5.0 修改json脚本
- vi job/oracle_to_mysql.json
复制代码
修改reader的where值
- "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 创建增量脚本文件
5.2 编写脚本
- #!/bin/bash
- source /etc/profile
- #当前时间戳
- cur_time=$(date +%s)
- #结束时间
- end_time="'$(date -d @$cur_time +"%Y-%m-%d %H:%M:%S")'"
- #开始时间,为当前时间的前120s
- create_time="'$(date -d @$(($cur_time-120)) +"%Y-%m-%d %H:%M:%S")'"
- # 执行datax脚本,传入时间范围
- /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 给脚本文件赋权限
- chmod -R 777 job/increment_sync.sh
复制代码
5.4 设置 crontab 定时任务
然后生存并退出即可。
六、附录
6.1 温馨提示
tips1:
总是报数据库毗连失败:数据库名称错误,请检查数据库实例名称或者接洽DBA确认该实例是否存在并且在正常服务]. - 详细错误信息为:
- java.sql.SQLException: Listener refused the connection with the following error:
- 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:
- select instance name from V$instance
复制代码
6.2 声明与感谢
该教程也是我工作中要完成数据库同步的需求时,参考大佬们的教程,并且实践后结合自己遇见的问题总结出来的笔记,盼望对大家有用,避免踩坑,进步服从!非常感谢大佬的教程解我燃眉之急!以下是大佬详细教程:
DataX oracle同步mysql(全量和增量)_oracle 全量 增量-CSDN博客
最后,如果朋友您发现有不足之处或者错误,非常欢迎您的指正,一起交流学习,菜鸟互啄哈哈哈共同进步!
(总结不易,求免费的赞一下,感谢!)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |