'commit'
This commit is contained in:
86
Doc/6、DataX配置/setup_cron.sh
Normal file
86
Doc/6、DataX配置/setup_cron.sh
Normal file
@@ -0,0 +1,86 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================
|
||||
# DataX 增量同步定时任务配置脚本
|
||||
# 适用系统: Rocky Linux 9 / CentOS / RHEL
|
||||
# 功能: 添加每10分钟执行一次的 crontab 任务
|
||||
# ==========================================
|
||||
|
||||
# 1. 基础配置
|
||||
# 假设您将整个文件夹上传到了 /usr/local/datax
|
||||
WORK_DIR="/usr/local/datax"
|
||||
SCRIPT_NAME="run_jobs_inc.sh"
|
||||
SCRIPT_PATH="$WORK_DIR/$SCRIPT_NAME"
|
||||
# 日志存放位置,建议单独放在 logs 目录
|
||||
LOG_FILE="$WORK_DIR/logs/datax_inc_cron.log"
|
||||
|
||||
# 2. 检查环境
|
||||
echo "正在检查环境..."
|
||||
|
||||
# 检查工作目录
|
||||
if [ ! -d "$WORK_DIR" ]; then
|
||||
echo "错误: 工作目录 $WORK_DIR 不存在"
|
||||
echo "请先将 DataX 配置相关文件上传至服务器的 $WORK_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查脚本是否存在
|
||||
if [ ! -f "$SCRIPT_PATH" ]; then
|
||||
echo "错误: 执行脚本 $SCRIPT_PATH 不存在"
|
||||
echo "请确保 $SCRIPT_NAME 位于 $WORK_DIR 目录下"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 创建日志目录
|
||||
if [ ! -d "$(dirname "$LOG_FILE")" ]; then
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
echo "创建日志目录: $(dirname "$LOG_FILE")"
|
||||
fi
|
||||
|
||||
# 3. 赋予执行权限
|
||||
echo "正在赋予脚本执行权限..."
|
||||
chmod +x "$SCRIPT_PATH"
|
||||
|
||||
# 4. 配置 Crontab
|
||||
# 任务定义: 每10分钟执行一次 (*/10)
|
||||
# >> $LOG_FILE 2>&1 : 将标准输出和错误输出都追加写入日志文件
|
||||
CRON_CMD="*/10 * * * * /bin/bash $SCRIPT_PATH >> $LOG_FILE 2>&1"
|
||||
|
||||
# 检查任务是否已存在 (避免重复添加)
|
||||
# 使用 grep 查找包含脚本路径的行
|
||||
EXISTING_JOB=$(crontab -l 2>/dev/null | grep "$SCRIPT_PATH")
|
||||
|
||||
if [ -n "$EXISTING_JOB" ]; then
|
||||
echo "警告: 检测到该脚本的定时任务已存在:"
|
||||
echo " $EXISTING_JOB"
|
||||
echo "----------------------------------------"
|
||||
read -p "是否先删除旧任务再重新添加? (y/n): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "已取消操作,未修改 Crontab。"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 移除旧任务 (通过 grep -v 反向过滤掉包含脚本路径的行)
|
||||
# 注意: 这会保留其他不相关的定时任务
|
||||
crontab -l 2>/dev/null | grep -v "$SCRIPT_PATH" | crontab -
|
||||
echo "旧任务已移除"
|
||||
fi
|
||||
|
||||
# 添加新任务
|
||||
# (crontab -l; echo "new job") | crontab - 这种写法可以保留原有任务并追加新任务
|
||||
(crontab -l 2>/dev/null; echo "$CRON_CMD") | crontab -
|
||||
|
||||
# 5. 验证与提示
|
||||
echo "----------------------------------------"
|
||||
echo "✅ 定时任务设置成功!"
|
||||
echo "----------------------------------------"
|
||||
echo "当前用户的 Crontab 列表:"
|
||||
crontab -l
|
||||
echo "----------------------------------------"
|
||||
echo "执行策略: 每10分钟执行一次"
|
||||
echo "日志文件: $LOG_FILE"
|
||||
echo "----------------------------------------"
|
||||
echo "提示: 请确保 crond 服务正在运行"
|
||||
echo "检查命令: systemctl status crond"
|
||||
echo "启动命令: systemctl start crond"
|
||||
@@ -1,28 +1,102 @@
|
||||
#### 一、下载
|
||||
# DataX 同步部署与使用说明
|
||||
|
||||
https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
|
||||
#### 一、下载与安装 DataX
|
||||
|
||||
#### 二、部署
|
||||
1. **下载 DataX 包**
|
||||
官方下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
|
||||
|
||||
1、将 `datax.tar.gz` 文件放到`/usr/local/` 目录下
|
||||
2. **部署到服务器**
|
||||
将压缩包上传并解压到 `/usr/local/` 目录:
|
||||
```shell
|
||||
cd /usr/local
|
||||
tar zxvf datax.tar.gz
|
||||
# 解压后应当存在 /usr/local/datax 目录
|
||||
```
|
||||
|
||||
```shell
|
||||
cd /usr/local
|
||||
tar zxvf datax.tar.gz
|
||||
```
|
||||
#### 二、配置部署
|
||||
|
||||
2、将配置文件目录中所有`json`文件放到 `/usr/local/datax/conf/` 目录下
|
||||
注意:将实际情况修改`json`文件中数据库连接信息。
|
||||
本方案包含**全量同步**和**增量同步**两套策略,请按以下步骤部署配置文件和脚本。
|
||||
|
||||
3、将 `run_jobs.sh` 脚本放到 `/usr/local/` 目录下
|
||||
1. **上传文件**
|
||||
请将本地 `d:\dsWork\aiData\Doc\6、DataX配置\` 目录下的以下内容上传至服务器 `/usr/local/datax/` 根目录下:
|
||||
|
||||
* 文件夹 `json_full/` (存放全量JSON配置)
|
||||
* 文件夹 `json_inc/` (存放增量JSON配置)
|
||||
* 脚本 `run_jobs_full.sh`
|
||||
* 脚本 `run_jobs_inc.sh`
|
||||
* 脚本 `setup_cron.sh`
|
||||
|
||||
```shell
|
||||
chmod +x run_jobs.sh
|
||||
```
|
||||
**上传后的服务器目录结构应如下所示:**
|
||||
```text
|
||||
/usr/local/datax/
|
||||
├── bin/
|
||||
├── conf/
|
||||
├── json_full/ <-- 新增:全量配置目录
|
||||
├── json_inc/ <-- 新增:增量配置目录
|
||||
├── run_jobs_full.sh <-- 新增:全量执行脚本
|
||||
├── run_jobs_inc.sh <-- 新增:增量执行脚本
|
||||
└── setup_cron.sh <-- 新增:定时任务安装脚本
|
||||
```
|
||||
|
||||
#### 三、运行
|
||||
2. **赋予执行权限**
|
||||
```shell
|
||||
cd /usr/local/datax
|
||||
chmod +x *.sh
|
||||
```
|
||||
|
||||
```shell
|
||||
/usr/local/run_jobs.sh
|
||||
```
|
||||
3. **修改数据库密码 (如有需要)**
|
||||
脚本中已配置好默认的数据库连接信息。如需修改,请编辑 `run_jobs_full.sh` 和 `run_jobs_inc.sh` 中的 `PARAMS` 变量:
|
||||
```bash
|
||||
PARAMS="-Dsrc_user=... -Dsrc_pwd=... -Ddest_user=... -Ddest_pwd=..."
|
||||
```
|
||||
|
||||
#### 三、运行策略说明
|
||||
|
||||
**1. 全量同步 (Full Sync)**
|
||||
* **适用场景**:系统初始化,或数据出现严重偏差需要彻底重跑时。
|
||||
* **同步逻辑**:
|
||||
1. 执行 `TRUNCATE` 清空 Doris 目标表。
|
||||
2. 从 MySQL 读取全量数据写入 Doris。
|
||||
* **手动执行命令**:
|
||||
```shell
|
||||
cd /usr/local/datax
|
||||
./run_jobs_full.sh
|
||||
```
|
||||
|
||||
**2. 增量同步 (Incremental Sync)**
|
||||
* **适用场景**:日常持续数据同步(高频)。
|
||||
* **同步逻辑**:
|
||||
1. **不删除**任何历史数据(无空窗期)。
|
||||
2. 读取 MySQL 中 ID 最大的 **10000条** 记录(覆盖新增和最近更新的数据)。
|
||||
3. 推送到 Doris,利用 Doris 的 **Unique Key** 主键模型自动完成“存在即更新,不存在即插入” (Upsert)。
|
||||
* **手动执行命令**:
|
||||
```shell
|
||||
cd /usr/local/datax
|
||||
./run_jobs_inc.sh
|
||||
```
|
||||
|
||||
#### 四、自动化定时任务配置
|
||||
|
||||
我们提供了一键配置脚本,用于在 Rocky Linux 9 / CentOS 等系统中设置自动调度。
|
||||
|
||||
1. **执行安装脚本**
|
||||
```shell
|
||||
cd /usr/local/datax
|
||||
./setup_cron.sh
|
||||
```
|
||||
*该脚本会自动添加 Crontab 任务,配置为每 10 分钟执行一次增量同步。*
|
||||
|
||||
2. **验证与日志**
|
||||
* **查看任务**:`crontab -l`
|
||||
* **查看日志**:自动同步的日志会保存在 `/usr/local/datax/logs/datax_inc_cron.log`
|
||||
```shell
|
||||
tail -f /usr/local/datax/logs/datax_inc_cron.log
|
||||
```
|
||||
|
||||
#### 五、重要注意事项
|
||||
|
||||
1. **Doris 表模型要求**
|
||||
目标 Doris 表必须使用 **Unique Key** 模型(建表时指定 `UNIQUE KEY(id)`),否则增量同步会导致大量重复数据。
|
||||
|
||||
2. **Python 环境**
|
||||
DataX 依赖 Python 环境(推荐 Python 2.7 或 3.x)。脚本默认调用 `/usr/bin/python`,如果您的 Python 路径不同,请修改脚本头部的 `DATAX_PY` 变量。
|
||||
|
||||
Reference in New Issue
Block a user