Datax連接mySql8.0.11升級驅動方法
-
需求:用datax技術把數據從gauseDb導入到mySql數據庫
-
問題:按正常datax配置pgsqlReder和mySqlWriter后,報錯信息如下:
2021-06-13 00:36:13.310 [job-0] ERROR JobContainer - Exception when job run
com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[讀取數據庫數據失敗. 請檢查您的配置的 column/table/where/querySql或者向 DBA 尋求幫助.]. - 執行的SQL為: delete from wjybjy.wjybjy_sy where t_month='2021-05' 具體錯誤信息為:java.sql.SQLException: Could not retrieve transation read-only status server
-
解決問題:搜索錯誤信息‘Could not retrieve transation read-only status server’
得到結果是jdbc驅動包和mysql的版本對不上,目標庫mysql是8.0.11版本,而datax中jdbc的版本是5.1.32
開始驅動升級
-
第一步下載源碼:
https://github.com/alibaba/DataX/archive/master.zip下載。
2.二步修改mysql-connector-java驅動的版本號:
找到位於 {DataX_source_code_home}/mysqlreader/ 和 {DataX_source_code_home}/mysqlwriter/ 下的 pom.xml文件,將version的值改為8.0.X(可以直接搜索‘mysql-connector-java’快速定位,X寫你自己想要的 版本號)
如果你只用到了mysql的寫,可以只修改mysqlwriter目錄下的xml文件。
3.第三步修改zeroDateTimeBehavior的值convertToNull 為 CONVERT_TO_NULL:
編輯{DataX_source_code_home}/plugin-rdbms- util/src/main/java/com/alibaba/datax/plugin/rdbms/util/DataBaseType.java
全文替換 convertToNull 為 CONVERT_TO_NULL;
全文替換"com.mysql.jdbc.Driver"為"com.mysql.cj.jdbc.Driver",
4.第四步通過maven打包:(本人是參考Git上開發者提供的操作步驟來的)
下載maven並按裝,配置環境變量
用maven重新編輯構建發布mvn -U clean package assembly:assembly -Dmaven.test.skip=true
在這里可以修改DataX目錄下的pom.xml和package.xml,只構建打包需要的reader和writer.
打包成功后的DataX包位於 {DataX_source_code_home}/target/datax/datax/ ,查看datax/plugin/writer/mysqlwriter/libs/目錄,已經包含新版的驅動jar包
拷貝整個 {DataX_source_code_home}/target/datax/目錄下的datax目錄,到需要用到服務器。
json格式如下:
{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [
{
"reader": {
"name": "postgresqlreader",
"parameter": {
"connection": [
{
"querySql":["select t_month,t_code,t_type,t_name,t_value from mdl_ddpt_wjy.wjybjy_sy where t_month='$month'"],
"jdbcUrl": ["jdbc:postgresql://192.123.84.11:25308/DB_ZTK"]
}
],
"password": "Liantong12#$",
"username": "renshedb1"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "insert",
"username": "root",
"password": "Perfect1",
"column": [
"t_month",
"t_code",
"t_type",
"t_name",
"t_value"
],
"session": [
"set session sql_mode='ANSI'"
],
"preSql": [
"delete from wjybjy.wjybjy_sy where t_month='$month'"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://192.125.30.169:3306/wjybjy?useUnicode=true&characterEncoding=gbk&useSSL=false&serverTimezone=UTC",
"table": [
"wjybjy_sy"
]
}
]
}
}
}]
}
}
其中mysqlwriter 中:
"jdbcUrl": "jdbc:mysql://192.125.30.169:3306/wjybjy?useUnicode=true&characterEncoding=gbk&useSSL=false&serverTimezone=UTC",
需要注意的幾點:1.writer中不能帶[]; reader中必須帶[]。
2.需要加&useSSL=false&serverTimezone=UTC"
3."setting": {
"speed": {
"channel": 1
}
},
必須設置速度,但不能設置byte。