Datax-web数据同步工具

Datax-web部署

# 参考官方文档
https://github.com/alibaba/DataX/blob/master/userGuid.md
# 下载datax已经封装好的文件,不推荐源码自己编译
https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.tar.gz
# 检查python环境是否存在,python2.python3都可以
[root@test-200 ~]# python -V
Python 2.7.5

# 上传文件到/home然后去解压
[root@test-200 ~]# cd /home/
# 解压文件
[root@test-200 home]# tar xf datax.tar.gz
[root@test-200 home]# python /home/datax/bin/datax.py  /home/datax/job/job.json
2025-03-12 16:43:04.945 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2025-03-12 16:42:54
任务结束时刻                    : 2025-03-12 16:43:04
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

# 说明datax是可用的
# 修改配置文件 
# 否则后面同步数据会出现在 有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数的问题
[root@test-200 home]# vim /home/datax/conf/core.json

"com.alibaba.datax.core.transport.channel.memory.MemoryChannel",
                "speed": {
                    "byte": -1,
                    "record": -1
# 把"byte": -1 改为 "byte":3000000
# 修改后内容如下

"com.alibaba.datax.core.transport.channel.memory.MemoryChannel",
                "speed": {
                    "byte":3000000,
                    "record": -1

Datax-web部署

# 参考官方文档
https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md
# 下载文件
# 作者封装好的程序,同样不推荐自己编译源码 因为也会报错
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg  提取码:cpsk 
# 同样上传到/home
[root@test-200 home]# tar xf datax-web-2.1.2.tar.gz
[root@test-200 home]# cd /home/datax-web-2.1.2/bin
[root@test-200 bin]# bash install.sh
# 输入4个y完成安装
# 我这里是本地没有安装mysql的,如果你安装了的mysql会调用直接退出即可使用配置文件配置

安装Mysql

# 推荐使用5.7版本的数据库,使用8.0会导致admin无法链接数据库暂时不知道什么原因
docker run -d --name mysql_datax -p 3306:3306 -v datax_web_mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_USER=datax -e MYSQL_PASSWORD=123456 -e MYSQL_DATABASE=datax_web --restart always mysql:5.7.44

[root@test-200 bin]# cd /home/datax-web-2.1.2/bin/db
# 拷贝sql文件到mysql容器中导入数据
[root@test-200 db]# docker cp datax_web.sql mysql_datax:/root 
Successfully copied 21.5kB to mysql_datax:/root

# 导入数据
[root@test-200 bin]# docker exec -it mysql_datax  bash 
bash-4.2# mysql -udatax -p123456 datax_web < /root/datax_web.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
bash-4.2# exit
exit
# 配置数据库
[root@test-200 db]# cd /home/datax-web-2.1.2/modules/datax-admin/conf
[root@test-200 conf]# cat bootstrap.properties 
#Database
DB_HOST=192.168.116.200
DB_PORT=3306
DB_USERNAME=datax
DB_PASSWORD=123456
DB_DATABASE=datax_web
# 配置调用datax文件
[root@test-200 bin]# sed -i s#PYTHON_PATH=#PYTHON_PATH=/home/datax/bin/datax.py#g /home/datax-web-2.1.2/modules/datax-executor/bin/env.properties

启动Datax-web

# 务必进去这个文件夹中启动 不然会起不来
[root@test-200 bin]# cd /home/datax-web-2.1.2/bin
[root@test-200 bin]# bash start-all.sh 
2025-03-12 17:11:31.391 [INFO] (5034)  Try To Start Modules In Order 
2025-03-12 17:11:31.400 [INFO] (5042)  ####### Begin To Start Module: [datax-admin] ######
2025-03-12 17:11:31.409 [INFO] (5050) load environment variables
2025-03-12 17:11:31.690 [INFO] (5050) /usr/local/jdk1.8.0_211/bin/java
2025-03-12 17:11:31.693 [INFO] (5050) Waiting DATAX-ADMIN to start complete ...
2025-03-12 17:11:31.843 [INFO] (5050) DATAX-ADMIN start success
2025-03-12 17:11:31.856 [INFO] (5277)  ####### Begin To Start Module: [datax-executor] ######
2025-03-12 17:11:31.869 [INFO] (5285) load environment variables
2025-03-12 17:11:32.299 [INFO] (5285) /usr/local/jdk1.8.0_211/bin/java
2025-03-12 17:11:32.302 [INFO] (5285) Waiting DATAX-EXEXUTOR to start complete ...
2025-03-12 17:11:32.543 [INFO] (5285) DATAX-EXEXUTOR start success
[root@test-200 bin]# jps
5524 DataXExecutorApplication
5227 DataXAdminApplication
5579 Jps       

[root@test-200 bin]# netstat -tnlp | grep java 
tcp6       0      0 :::9527                 :::*                    LISTEN      5227/java           
tcp6       0      0 :::9504                 :::*                    LISTEN      5524/java           
tcp6       0      0 :::9999                 :::*                    LISTEN      5524/java 
# 访问ip:9527/index.html
http://192.168.116.200:9527/index.html
默认账号密码
admin/123456

避坑


# 添加mysql5.7 数据库源时无法连接到数据库
# 报错如下
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link

# jdbc url 这里如果按下面写会无法链接
jdbc:mysql://192.168.1.123:3306/test 

# 正确方式加入后面这串就好了
&connectTimeout=30000&socketTimeout=60000
jdbc:mysql://192.168.1.123:3306/test?useSSL=false&connectTimeout=10000&socketTimeout=30000

Datax-web 使用

增量同步

以时间方式增量同步

数据库两边先确保 源端数据库 和 同步端数据库的表信息一致。

1、项目管理-添加 -输入项目名称和描述 这里主要后续好区分各项目任务

image-20251111142259935

2、数据源管理-添加-数据源选择你数据同步的客户端如我是同步clickhouse数据库的数据,那么就选择clickhouse

数据源名称 区分数据源的标记,自定义

用户名 使用数据库同步的账号-建议高权限的用户,避免出现各种问题

密码 使用对应用户的密码

jdbc url {ip}:{port}/{database} 改为对应ip:端口:库名

测试连接 Success 确定 数据源添加成功

image-20251111142130964

添加源数据库信息后在添加需要同步的目标端数据库信息 方式和上方一样

3、任务构建

任务管理-任务构建-数据库源选择源端的数据库信息-数据库表名选择需要同步的表名-表所有字段选择需要同步的字段一般都是全选-下一步

image-20251111143531538

步骤2中 配置目标端数据的数据源信息 – 下一步

image-20251111143748486

步骤3中 全选所有字段-下一步

image-20251111144013268

步骤4中 构建-复制构建出的信息

image-20251111144209985

4、任务管理

执行器 datax执行器

路由策略 轮询

阻塞处理 丢弃后续调度

任务类型 DataX任务

所属任务 选择项目名

辅助参数 时间自增

任务名称 自定义名称

Cron 选择多久执行一次同步的时间

增量开始时间 选择你需要从那天时间开始同步,如需全量数据选择你初始数据前的时间

增量时间字段 -DstartTime=’%s’ 注意startTime可以自定义需和下方操作where条件一致

image-20251111144426191

查询字段时间格式查源表一条数据 如 process_time: 2025-11-11 01:01:47 这种就是 yyy-MM-dd HH:mm:ss 时间格式

image-20251111144953224

添加时间自增的where条件

在源端信息的splitPk上面一行加入 “where”: “process_time > ${startTime}”, 确定保存

image-20251111150159622

5、任务管理-操作-执行一次-查询日志-日志查看-刷新日志(需要手动点击刷新,不会自动刷新)

image-20251111150330455

image-20251111150636951

6、任务管理-找到对应任务名-状态启动绿色按钮 这样开启了自动增量同步

image-20251111150733561

以主键id方式增量同步

配置数据源信息参考上方,这里配置id方式增量的参数信息

辅助参数 主键自增

增量主键开始ID 0表示先全量同步后续增量 ,如果需要增量那么直接写目标端的最大id加1

reader标选择目前同步的表,主键选择id

image-20251111152442259

粘贴构建的信息,加入where条件 “where”: “id > ${startId}”,

image-20251111152505210

确定保存-任务管理-操作-执行一次-查询日志-查看日志-开启自动执行状态

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。