DataX同步数据

文章目录

场景

有两个库,需要同步其中的某些表的数据,不想写程序,所以选择一个同步工具,这里选择 datax。

安装

下载

官方指导
datax下载传送门

安装

这里以 Linux 操作系统为例,把下载到的 datax.tar.gz 上传到服务器的 /data/software 目录下,执行如下命令解压:

shell 复制代码
# 解压
cd /data/software && tar -zxvf datax.tar.gz

配置

  1. 准备边界值存储(以本地文件为例)
    创建一个文本文件 25.6-to-10.186-dept_energy_statistics-sync_timestamp.txt,用于记录上次同步的最大时间戳,初始值可设为同步开始前的时间(如 2025-01-01 00:00:00)。
shell 复制代码
# 创建并初始化边界值文件
echo "2025-01-01 00:00:00" > /data/software/datax/25.6-to-10.186-dept_energy_statistics-sync_timestamp.txt
  1. 编写 DataX 增量同步 JSON 任务
    新建 25.6-to-10.186-dept_energy_statistics.json,核心是在 mysqlreader 的 where 条件中添加时间戳过滤。

cd /data/software/datax/job && vim 25.6-to-10.186-dept_energy_statistics.json

shell 复制代码
{
 "job": {
   "content": [
     {
       "reader": {
         "name": "mysqlreader",
         "parameter": {
           "username": "root",
           "password": "root",
           "column": ["*"],
           "connection": [
             {
               "table": ["dept_energy_statistics"],
               "jdbcUrl": ["jdbc:mysql://IP1:3306/db1_data?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"]
             }
           ],
           "where": "update_time > '${last_sync_time}' and update_time <= '${current_sync_time}'",
           "splitPk": ""
         }
       },
       "writer": {
         "name": "mysqlwriter",
         "parameter": {
           "username": "root",
           "password": "root",
           "column": ["*"],
           "connection": [
             {
               "table": ["dept_energy_statistics"],
               "jdbcUrl": "jdbc:mysql://IP2:3306/db2_data?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"
             }
           ],
           "preSql": [],
           "batchSize": 1000,
           "onDuplicateKeyUpdate": {
             "key": [],
             "updateColumn": []
           }
         }
       }
     }
   ],
   "setting": {
     "speed": {
       "channel": 3
     }
   }
 }
}
  1. 编写 Shell 脚本(自动化边界值更新 + 任务执行)
    新建 25.6-to-10.186-dept_energy_statistics.sh,实现「读取上次边界值→生成本次同步时间→执行 DataX 任务→更新边界值」的完整流程。

cd /data/software/datax && vim 25.6-to-10.186-dept_energy_statistics.sh

shell 复制代码
#!/bin/bash

# 显式配置 Java 环境变量(解决 crontab 无法识别的问题)
export JAVA_HOME=/usr/local/java/jdk8u452
export PATH=$JAVA_HOME/bin:$PATH

# 1. 定义常量
DATAX_PATH="/data/software/datax"  # DataX 安装目录
JOB_FILE="${DATAX_PATH}/job/25.6-to-10.186-dept_energy_statistics.json"  # DataX 任务文件路径
TIMESTAMP_FILE="${DATAX_PATH}/25.6-to-10.186-dept_energy_statistics-sync_timestamp.txt"  # 边界值文件路径
SOURCE_DB_IP="IP1"
TARGET_DB_IP="IP2"

# 2. 读取上次同步的最大时间戳
last_sync_time=$(cat ${TIMESTAMP_FILE})
# 3. 生成本次同步的结束时间(当前系统时间,格式与数据库时间一致)
current_sync_time=$(date +"%Y-%m-%d %H:%M:%S")

echo "开始增量同步,同步范围:${last_sync_time} ~ ${current_sync_time}"

# 4. 替换 DataX 任务文件中的变量,并执行同步任务
python3 ${DATAX_PATH}/bin/datax.py \
 -p "-Dlast_sync_time='${last_sync_time}' -Dcurrent_sync_time='${current_sync_time}'" \
 ${JOB_FILE}

# 5. 同步成功后,更新边界值文件(将本次结束时间作为下次开始时间)
if [ $? -eq 0 ]; then
 echo "${current_sync_time}" > ${TIMESTAMP_FILE}
 echo "增量同步成功,已更新边界值为:${current_sync_time}"
else
 echo "增量同步失败,请检查日志"
 exit 1
fi
  1. 定时调度(Linux crontab)
    设置每小时执行一次脚本,实现准实时增量同步。

crontab -e

shell 复制代码
0 * * * * /bin/bash /data/software/datax/25.6-to-10.186-dept_energy_statistics.sh >> /data/software/datax/sync_logs.log 2>&1

********************************** 只要思想不滑坡,办法总比困难多**********************************

相关推荐
Slow菜鸟3 个月前
数据迁移工具之 DataX + DataX-Web(windows)
datax
请提交用户昵称5 个月前
大数据各组件flume,datax,presto,DolphinScheduler,findBI在大数据数仓架构中的作用和功能。
大数据·flume·datax·dolphin·presto·findbi·大数据组件
程序员瓜叔6 个月前
window10本地运行datax与datax-web
数据库·datax
不剪发的Tony老师9 个月前
DataX:一个开源的离线数据同步工具
etl·datax
遇码10 个月前
阿里开源的免费数据集成工具——DataX
大数据·开源·kettle·datax·数据集成·flinkcdc·seatunnel
viperrrrrrrrrr71 年前
大数据学习(67)- Flume、Sqoop、Kafka、DataX对比
大数据·学习·kafka·sqoop·flume·datax
淡酒交魂1 年前
「DataX」数据迁移-IDEA运行DataX方法总结
idea·datax
代立冬1 年前
流行的开源高性能数据同步工具 - Apache SeaTunnel 整体架构运行原理
apache·datax·开源数据集成工具·超高性能数据集成工具·异构数据同步工具·比datax更好的工具
RestCloud1 年前
如何选择最适合企业的ETL解决方案?
数据仓库·etl·kettle·datax·数据处理·数据集成