1.windows
1.前置环境
JDK(1.8以上,推荐1.8)
Python(网上都说用3.0会报错)
Apache Maven 3.x (Compile DataX)
datax可以跨多种数据源同步数据,主要是通过系统定时任务操作脚本执行job任务
jdk地址:链接: https://pan.baidu.com/s/1TXj1xrBLkQ7TyFOJUoobkw?pwd=vn7g 提取码: vn7g
python:链接: https://pan.baidu.com/s/1i53AUKpKoeSEG5uH4qc9eA?pwd=63tm 提取码: 63tm
maven:链接: https://pan.baidu.com/s/14DQTrVupKeHdCly340JiQA?pwd=4q3c 提取码: 4q3c
2.使用和介绍
datax地址:
解压压缩包,安装使用
压缩完打开
主要需要用到的是bin, job和log
bin下是执行命令的位置
job目录里放需要执行的json脚本
log里放的执行日志,可以看json语句是否有问题
操作:
进入bin目录,cmd打开命令窗
执行测试语句 python datax.py ../job/job.json
出现一下信息,表示可以正常运行成功
windows下使用:
从sqlserver写到mysql
Device_warn.json文件内容
{
"job": {
"setting": {
"speed": {
"channel": 1
},
"errorLimit": {
"percentage": 1
}
},
"content": [{
"reader": {
"name": "sqlserverreader",
"parameter": {
"username": "sqlserver账号",
"password": "sqlserver密码",
"connection": [{
"querySql": [
"SELECT br.[id] as id,br.[设备ID] as device_id,br.[记录时间] as record_time,br.[采集时间] as collect_time FROM [dbo].[报警记录_2021] as br"
],
"jdbcUrl": [
"jdbc:sqlserver://sqlserverip;DatabaseName=zzsby"
]
}],
"maxRetries": 3
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"username": "mysql账号",
"password": "mysql密码",
"dateFormat": "YYYY-MM-dd hh:mm:ss",
"column": [
"id","device_id","record_time","collect_time" ],
"connection": [{
"jdbcUrl": "jdbc:mysql://目标数据库ip+端口/库名",
"table": [
"表名"
]
}]
}
}
}]
}
}
Device_warn.bat内容
1.@echo off
2.python D:/DataX/datax/datax/bin/datax.py D:/DataX/datax/datax/job/device_warn.json
3.pause
2.linux环境下
1.前置环境
需要的环境和window一致,安装包一致
Sh文件 dd.sh
可能启动时会读取不到jdk环境,需引用环境地址
1.#!/bin/bash d
2.PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/jdk/jdk1.8.0_201/bin:/root/bin
3.export PATH
4.python /usr/local/datax/datax/bin/datax.py /usr/local/datax/datax/job/device_warn.json
job脚本和window的json文件一样
3.注意
1.问题
在使用时,如果mysql版本小于5.几不需要考虑以下问题
由于截至到2020年3月份,gtihub上最新的datax tar包所包含的mysql驱动是mysql-connector-java-5.1.34.jar Mysql版本大于5.几时,需要修改官网源码重新编译后使用
参考 解决DataX支持Mysql 8的读写 - 下班闪电去打卡 - 博客园
解决步骤
源码地址:
1.下载datax-master源码(官网直接下载很慢)
datax-master源码:链接: https://pan.baidu.com/s/1pMX_2IuHwa2ASqh2AYTGjw?pwd=fdnr 提取码: fdnr
2.修改代码中的mysql版本和数据库连接参数
3.打包编译后使用(参考文档中说编译后直接使用,我这里是选择的替换部分mysql的文件包)
4.定时任务和脚本
1.定时任务操作
Crontab -l 查看列表
Crontab -e 编辑
执行频率是靠系统的定时任务
2.需要使用年份的数据表
echo device_000${i}_$(date +%Y)
拼接字符串
3.需要从定时任务sh文件中向json中传值,循环处理多个表数据
datax.sh文件
1.#!/bin/bash d
2.JAVA_HOME=/usr/local/jdk/jdk1.8.0_201
3.export PATH=$PATH:$JAVA_HOME/bin
4.for i in 123 124 125 126 127 128 129 130 131 132;
5.do
6.python /usr/local/datax/datax/bin/datax.py -p "-Dsqlserver="[dbo].[历史记录_000${i}_2021]" -Dmongo="device_000${i}_2021"" /usr/local/datax/datax/job/sqlServerToMongo.json
7.done
写法:sh文件中用-D+名称设置 josn中的文件使用 $+值名称来获取
json文件
1.{
2. "job": {
3. "setting": {
4. "speed": {
5. "channel": 5
6. },
7. "errorLimit": {
8. "percentage": 1
9. }
10.
11. },
12. "content": [{
13. "reader": {
14. "name": "sqlserverreader",
15. "parameter": {
16. "username": "sqlserver的账号",
17. "password": "密码",
18. "connection": [{
19. "querySql": [
20. "SELECT his.[id] as serial,his.[设备ID] as device_id,his.[记录时间] as record_time,his.[采集时间] as collect_time FROM $sqlserver as his "
21. ],
22. "jdbcUrl": [
23. "jdbc:sqlserver://sqlserver的ip;DatabaseName=zzsby"
24. ]
25. }],
26. "maxRetries": 3
27. }
28. },
29. "writer": {
30. "name": "mongodbwriter",
31. "parameter": {
32. "address": [
33. "mongo的ip+端口"
34. ],
35. "userName": "mongo的用户名",
36. "userPassword": "mongo密码",
37. "dbName": "数据库名",
38. "collectionName": "$mongo",
39. "column": [
40. {
41. "name":"serial",
42. "type":"LONG"
43. },
44. {
45. "name": "device_id",
46. "type": "LONG"
47. },
48. {
49. "name": "record_time",
50. "type": "DATE"
51. }
52. ],
53. "writeMode": {
54. "isReplace": "false",
55. "replaceKey": "_id"
56. }
57. }
58. }
59. }]