datax datax-web 同步 mysql 数据(单机部署)

版本说明
datax 3.0
datax-web 2.1.2
mysql MySQL8 MariaDB10

datax 部署

  1. 准备环境: linux, java8, python3
    需要 java 和 jps
    sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk/bin/java 300
    sudo update-alternatives --install /usr/bin/jps jps /usr/lib/jdk/jdk/bin/jps 300

其中, /usr/lib/jdk/jdk/ 是 jdk 的安装位置

  1. 下载,官方github给出了编译后的jar压缩包地址 datax.tar.gz
    源码编译打包使用 maven 命令 mvn -U clean package assembly:assembly -Dmaven.test.skip=true
    结果在 target 里, 和下载的 一样是 datax.tar.gz

  2. 解压到自己希望的位置上 tar -zxvf datax3.tar.gz

  3. (可选) 替换 python3 适用的脚本. 把 bin 下的三个文件替换为 datax-web 提供的 python3 版本

  4. 测试 datax 命令行. 在 datax 目录下
    python3 bin/datax.py job/job.json
    有如下输出即表示成功(当然这只是从memery读,写到console的这一种)

2021-09-27 18:37:26.012 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2021-09-27 18:37:15
任务结束时刻                    : 2021-09-27 18:37:26
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0
  1. 替换 mysql 驱动为 8.x. 见后文注意

datax-web 部署

  1. 下载源码 git@github.com:WeiYe-Jing/datax-web.git

  2. 编译打包 mvn clean install (百度网盘的下载速度还不如clone编译的快呢)

  3. 解压到希望的位置 tar -zxvf datax-web-2.1.2.tar.gz

  4. 执行 ./bin/install.sh
    按照提示初始话 datax-web 自己的配置数据库

  5. 配置datax (我这里忽略了email 的配置)
    vim modules/datax-executor/bin/env.properties

## PYTHON脚本执行位置
#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=/home/aaa/bin/datax3/bin/datax.py

如果使用 python3, 把要使用的 python 放到 PATH 的前面(注意 PATH 里要能找到 python 命令, python3不行,尽管在datax里#! 指定了 python3)
vim modules/datax-executor/bin/datax-executor.sh

PATH=/opt/minconda/mypyenv/bin:$PATH

修改了环境变量需要重启服务

  1. 替换 mysql 驱动为 8.x. 见后文注意

datax-web 使用

  1. 启动 web 服务
    启动服务 ./bin/start-all.sh
    停止服务 ./bin/stop-all.sh
    jps 查看服务, 如果存在下面两个进程,即成功运行
    DataXAdminApplication
    DataXExecutorApplication

  2. 访问 web 服务
    访问(注意后面的路径/index.html 不能丢,这里没有默认重定向)
    http://ip:9527/index.html
    默认用户名 admin 密码 123456
    登录后在 "用户管理" 里修改密码

  3. 执行数据同步,依次进行如下操作
    创建项目
    添加数据源
    创建任务模板
    任务构建(有坑,见后文)
    任务管理里启动任务
    日志管理里查看执行日志

datax 命令行使用

执行一次数据同步
python3 bin/datax.py job/stream2stream.json

查看 job 配置模板
python3 bin/datax.py -r mysqlreader -w mysqlwriter
其中, -r 参数指定使用的 reader, -w 参数指定使用的 writer. 有哪些 reader writer 可以查看 plugin 目录.

注意

  • jdbcUrl 需要参数 serverTimezone=Asia/Shanghai, 否则会有类似下面的报错报错:
Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).]. - 具体错误信息为:...

2021-09-27 01:14:32 [AnalysisStatistics.analysisStatisticsLog-53] 2021-09-27 01:14:32.737 [job-0] ERROR RetryUtil - Exception when calling callable, 异常Msg:Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).].  -  具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
2021-09-27 01:14:32 [AnalysisStatistics.analysisStatisticsLog-53] com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).].  -  具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
2021-09-27 01:14:32 [AnalysisStatistics.analysisStatisticsLog-53]   at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26) ~[datax-common-0.0.1-SNAPSHOT.jar:na]
  • mysql8需要更换jdbcDriver mysql-connector, 注意有三处
    1. datax里 plugin/reader/mysqlreader/libs 的 mysql-connector-java-5.1.34.jar
    2. datax里 plugin/writer/mysqlwriter/libs 的 mysql-connector-java-5.1.34.jar
    3. datax-web里 modules/datax-admin/lib 的 mysql-connector-java-5.1.47.jar
cp mysql-connector-java-8.0.22.jar ~/bin/datax3/plugin/reader/mysqlreader/libs
cp mysql-connector-java-8.0.22.jar ~/bin/datax3/plugin/writer/mysqlwriter/libs
cp mysql-connector-java-8.0.22.jar ~/bin/datax-web-2.1.2/modules/datax-admin/lib
  • jdbc驱动类: mysql8的驱动与之前版本不同, 注意中间的 cj. 为 com.mysql.cj.jdbc.Driver

  • job 配置里 setting 不能有 byte 参数.(见后文)

  • job 配置 json 里的 writer 里, "writeMode": "update" 可以覆盖更新.

  • 在 writer 里,写入前禁用索引,写入后打开索引,可以适当提高写入速度(如果业务允许的话)

下面是 mysql 的写法. /*!40000 xxx */是 mysql 的方言指令,不是注释

            "preSql": [
              "LOCK TABLES `aim_table_name` WRITE",
              "/*!40000 ALTER TABLE `aim_table_name` DISABLE KEYS */"
            ],
            "postSql": [
              "/*!40000 ALTER TABLE `aim_table_name` ENABLE KEYS */",
              "UNLOCK TABLES"
            ],

job 配置示例(json里不支持注释,这里的注释只做说明用)

{
  "job": {
    "setting": {
      "speed": {
        "channel": 3
        // 下面这个参数不能有了
        // , "byte": 1048576
      },
      "errorLimit": {
        "record": 0,
        "percentage": 0.02
      }
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "xxx加密的",
            "password": "yyy加密的",
            "column": [
              "`id`",
              // 省略
            ],
            "splitPk": "",
            "connection": [
              {
                "table": [
                  "tab_name_from"
                ],
                "jdbcUrl": [
                  "jdbc:mysql://<ip or domain>:<port>/db_name?serverTimezone=Asia/Shanghai"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "mysqlwriter",
          "parameter": {
            "username": "aaa加密的",
            "password": "bbb加密的",
            // 对于 mysql, writeMode 为 update 时会执行覆盖更新
            "writeMode": "update",
            "column": [
              "`id`",
              // 省略
            ],
            // 写入前临时禁用索引
            "preSql": [
              "LOCK TABLES `tab_name_to` WRITE",
              "/*!40000 ALTER TABLE `tab_name_to` DISABLE KEYS */"
            ],
            // 写入后打开索引
            "postSql": [
              "/*!40000 ALTER TABLE `tab_name_to` ENABLE KEYS */",
              "UNLOCK TABLES"
            ],
            "connection": [
              {
                "table": [
                  "tab_name_to"
                ],
                "jdbcUrl": "jdbc:mysql://<ip or domain>:<port>/db_name?serverTimezone=Asia/Shanghai"
              }
            ]
          }
        }
      }
    ]
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容