Datax部署遇到的问题

348 阅读2分钟

写在前面

离线数据同步比较好用的一个工具。但是在部署或实际使用中,会遇到一些问题。在这里记录一下。

安装部署遇到问题

python版本导致执行同步sql提示错误

错误描述

## Cannot run program "python": error=2, No such file or directory

问题分析及解决方案

使用dataX,需要python环境。Linux默认会安装,有的安装2.x版本,而我这里Linux服务器使用的3.x版本。只能使用python3执行相应的job任务。但是datax默认使用python来执行相应的job任务。

可以建立软连接。
因为Ubuntu自带的python没有/usr/bin/python该目录,data-web源码中默认调用/usr/bin/python,解决方法可以搭建软连接  
ln -s /usr/bin/python3 /usr/bin/python

参考资料

https://gitee.com/complex/datax-web/issues/I40EB6

使用中遇到的问题

mysql数据库版本不兼容8.x

datax中mysql默认是5.*,若同步的数据库8.x高版本,就会失败,提示错误

2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] java.sql.SQLException: Could not retrieve transation read-only status server
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:996) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:924) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:870) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:902) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:892) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3607) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3576) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.PreparedStatement.checkReadOnlySafeStatement(PreparedStatement.java:1114) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1134) ~[mysql-connector-java-5.1.34.jar:5.1.34]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doOneInsert(CommonRdbmsWriter.java:382) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.doBatchInsert(CommonRdbmsWriter.java:362) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.startWriteWithConnection(CommonRdbmsWriter.java:297) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter$Task.startWrite(CommonRdbmsWriter.java:319) [plugin-rdbms-util-0.0.1-SNAPSHOT.jar:na]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.alibaba.datax.plugin.writer.mysqlwriter.MysqlWriter$Task.startWrite(MysqlWriter.java:78) [mysqlwriter-0.0.1-SNAPSHOT.jar:na]
2024-06-14 14:54:31 [AnalysisStatistics.analysisStatisticsLog-53] 	at com.alibaba.datax.core.taskgroup.runner.WriterRunner.run(WriterRunner.java:56) [datax-core-0.0.1-SNAPSHOT.jar:na]

解决方法

方法一,
mysqlwriter/libs下的mysql驱动mysql-connector-java-8.0.25.jar。我这里列举出来已经调整后的驱动。(我是使用这个方法,就能正常往8.x版本的mysql数据库同步数据了。

PS,其实网络上的解决方法,都从解决问题的角度出发,可能又很多不同实现方式,归根到底解决问题。方法二,是比较详细的一种方案。但是我还没尝试,第一种方式已经满足了我的需求)


方式二,从源码角度,改一些驱动名称,还有一些相关参数。可以参考这位博主,写的蛮详细。
https://blog.csdn.net/weixin_41640312/article/details/132019719