datax3.0 无法连接数据库记录排错过程

本文记录了DataX3.0在win10环境下,尝试连接MySQL8.0.18数据库时遇到的问题及解决过程。问题包括:DataX的mysql驱动不兼容MySQL8.0、JDK版本不一致。通过更新mysql驱动包到8.0.18版本和确保JDK版本为1.8,最终成功解决了连接问题。

数据环境

  • DataX安装环境:win10
  • 源数据库:云主机,MySQL8.0.18
  • 目标数据库:云主机,MySQL8.0.18

软件环境

配置源库和目标库

  • 切换到datax的安装目录
cd F:\datax
  • 查看配置文件模板命令
python bin/datax.py -r mysqlreader -w mysqlwriter

模板如下:

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
  Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.


  Please refer to the mysqlreader document:
       https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md 

  Please refer to the mysqlwriter document:
       https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md 

  Please save the following configuration as a json file and  use
       python {DATAX_HOME}/bin/datax.py {JSON_FILE_NAME}.json 
  to run the job.

  {
      "job": {
          "content": [
              {
                  "reader": {
                      "name": "mysqlreader", 
                      "parameter": {
                          "column": [], 
                          "connection": [
                              {
                                  "jdbcUrl": [], 
                                  "table": []
                              }
                          ], 
                          "password": "", 
                          "username": "", 
                          "where": ""
                      }
                  }, 
                  "writer": {
                      "name": "mysqlwriter", 
                      "parameter": {
                          "column": [], 
                          "connection": [
                              {
                                  "jdbcUrl": "", 
                                  "table": []
                              }
                          ], 
                          "password": "", 
                          "preSql": [], 
                          "session": [], 
                          "username": "", 
                          "writeMode": ""
                      }
                  }
              }
          ], 
          "setting": {
              "speed": {
                  "channel": ""
              }
          }
      }
  }
  • 创建配置文件

    具体配置项目说明参见官网 https://github.com/alibaba/DataX

  • 将上面配置模板copy下来放在配置json文件中后,进行以下改写:

{
      "job": {
          "content": [
              {
                  "reader": {
                      "name": "mysqlreader", 
                      "parameter": {
                          "column": [这里需要所有列的话可以直接填"*",否则需要自己填写每个需要的列],  
                          "connection": [
                              {   
                                  "jdbcUrl": [
                                      "jdbc:mysql://ip:端口/数据库名?userSSL=false&serverTimezone=UTC"
                                  ],  
                                  "table": ["表名"]   
                              }   
                          ],  
                          "password": "密码", 
                          "username": "用户名", 
                          "where": "查询条件,没有可为空,例子:date_time <= DATE_FORMAT($(date_time),'%Y-%m-%d')"
                      }   
                  },  
                  "writer": {
                      "name": "mysqlwriter", 
                      "parameter": {
                          "column": [
                              "id",
                              "name"
                          ],  
                          "connection": [
                              {   
                                  "jdbcUrl": "jdbc:mysql://127.0.0.1:3306/test?userSSL=false&serverTimezone=UTC", (这里数据库版本为8.0以上的,数据库名后面必须加上两个参数,不然会报错的)
                                  "table": [
                                      "test_db"
                                  ]   
                              }   
                          ],  
                          "password": "root", 
                          "preSql": [], 
                          "session": [], 
                          "username": "root", 
                          "writeMode": "insert"
                      }   
                  }   
              }   
          ],  
          "setting": {
              "speed": {
                  "channel": "1"
               }
          }
      }
  }

第一次运行

  • 执行命令:
 python bin/datax.py job/mysql2mysql.json
果不其然报错了:

image-20200319100828504

按照报错信息开始分析原因
  • 确认配置文件中所有参数没有误写的情况,进入下一步

image-20200319101147630

  • 校验数据库是否可以正常连接,如正常进入下一步

    1、确认mysql数据库版本(我这里的mysql版本为8.0.18)

    2、查询相关问题后得知,datax3.0的mysql驱动包是不支持mysql8.0以上版本的,所以我这里将datax的mysql驱动包进行更新替换

    • 根据mysql数据库版本进行下载对应的mysql驱动包,下载地址:https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-8.0.18.zip
    • 解压后进行替换 datax\plugin\reader\mysqlreader\libs\mysql-connector-java-5.1.34.jar 为mysql-connector-java-8.0.18.jar

第二次运行

  • 执行命令:
python bin/datax.py job/mysql2mysql.json
emmm…还是报错:

image-20200319102516242

按照报错信息开始分析原因

报错信息显示jdk版本不一致,所以我们打开终端输入一下命令:

 java -version

image-20200319102846704

image-20200319103033525

这里我们可以看到jdk版本为1.7的,但是环境变量和本地的包都是1.8的,那么问题就知道了,win10系统中是有可能出现这样的问题的,如果是自己的电脑可以参考这个文章:https://www.cnblogs.com/zhangzhonghui/p/10678028.html
如果自己没有权限的话,那就好办了,让系统管理员安排一下,嘿嘿~
成功解决上述问题后

第三次运行

  • 执行命令:
 python bin/datax.py job/mysql2mysql.json

image-20200319104729976

Nice!成功!

最后,datax中的where条件是可以使用动态传参的形式进行运行的,也可以实现多表同步实现,详细介绍:http://www.lhtry.net/blog/detail/29

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值