はじめに:あなたはDATAXをインストールして使用初めて、またはサーバーMySQLバージョンが<= 5.7である、私の以前のエッセイを参照してくださいhttps://www.cnblogs.com/zifan/p/9194793.html。
背景:MySQLは5.6から8.0.19にアップグレードした後、元の通常はDATAX間違っを実行していることがわかりました。
エラーメッセージ:(ページズームを参照してください)での私の最初の一見
1 2020 - 03 - 18 10:00:10.038 [ 00 - 0 - -writer] StdoutPluginCollector ERROR 2トランザクションの独立読み取り取得できませんでした:java.sql.SQLExceptionというが唯一ステータスサーバ 3 com.mysql.jdbc.SQLError.createSQLExceptionで(SQLError.java:996)〜[mysqlの-コネクタ- Javaベース5.1。34の.jar:5.1。34 ] 4:com.mysql.jdbc.SQLError.createSQLException(SQLError.javaで935〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34 ] 5:com.mysql.jdbc.SQLError.createSQLException(SQLError.javaで924〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34 ] 6:com.mysql.jdbc.SQLError.createSQLException(SQLError.javaで870〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34 ] 7:com.mysql.jdbc.SQLError.createSQLException(SQLError.javaで902〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34 ] 8:com.mysql.jdbc.SQLError.createSQLException(SQLError.javaで892〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34 ] 9:com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.javaで3607〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34 ] 10:com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.javaで3576〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34] 11 com.mysql.jdbc.PreparedStatement.checkReadOnlySafeStatement(PreparedStatement.java:で1114年)〜[MySQLのコネクタ- Javaベース5.1。34の.jar:5.1。34 ] 12:com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.javaで1134〜[MySQLのコネクタ- Javaベース)5.1。34の.jar:5.1。34 ] 13:com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter $ Task.doOneInsert(CommonRdbmsWriter.javaで382 [プラグインRDBMS-util-)0.0。1 - SNAPSHOT.jarに:NA] 14:com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter $ Task.doBatchInsert(CommonRdbmsWriter.javaで362 [プラグインRDBMS-util-)0.0。1 - SNAPSHOT.jarに:NA] 15 com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter $ Task.startWriteWithConnection(CommonRdbmsWriter.java:で297)[プラグインRDBMS-util- 0.0。1 - SNAPSHOT.jarに:NA] 16 com.alibaba.datax.plugin.rdbms.writer.CommonRdbmsWriter $ Task.startWrite(CommonRdbmsWriter.java:で319)[プラグインRDBMS-util- 0.0。1 - SNAPSHOT.jarに:NA] 17:com.alibaba.datax.plugin.writer.mysqlwriter.MysqlWriter $ Task.startWrite(MysqlWriter.javaで78 [mysqlwriter-)0.0。1 - SNAPSHOT.jarに:NA] 18 com.alibaba.datax.core.taskgroup.runner.WriterRunner.runで(WriterRunner.java:56)[DATAX-コア- 0.0。1 - SNAPSHOT.jarに:NA] 19 java.lang.Thread.run(Thread.java:で748)NA:1.8 .0_241] 20ます。java.sql.SQLException:起因する未知のシステム変数' tx_read_only '
ただ、最初と最後の行に焦点を当てます。あなたが百度に行く最初の行は、情報のいくつかは、あなたが「トランザクション分離レベル」参照の下にデータベースを設定できるようにすることを教えてくれます:https://www.cnblogs.com/jeffen/p/6005410.html
SET GLOBALのTRANSACTION_ISOLATION = ' READ-COMMITTED ' ;
また、私はまだ与えられてMysql8の観点から、試してみましたが、他のMySQLバージョンあなたは、このソリューションを試すことができます。参考:https://www.cnblogs.com/lewic/p/10685004.html、究極の原因はまだ問題ではありませんバージョンを推進すべきである見つけます。
見てみましょう最後の行:ます。java.sql.SQLException:不明なシステム変数「tx_read_only」、情報のほとんどは、ドライブが一貫性のないバージョン管理の問題であることを示しています。上記をまとめると、死の唯一の原因は、そこにある「ドライブバージョンのMySQLの間違った」であるので、解決策は、自然のドライブをアップグレードすることです。
元のドライブを初めて目:
LL {%Datax_Path} /プラグイン/ライター/ mysqlwriter / libsに/ | grepのmysqlの-CON
2020年3月23日の時点では、GitHubの MySQLドライバのダウンロード最新DATAXのtarパッケージは、MySQLコネクタ- Javaベース5.1.34.jarが含まれています。それは、ああ、誰かがインターネットからの最初の8直接ダウンロードのだと思う等にドライブスローを交換します。この時間と一致していません、
参考:https://blog.csdn.net/jason_9527/article/details/100995505
私は何の問題を考えていませんが、問題を完全に解決することはできませんが、アウト警告、いくつかの誤りがあるでしょう。例えば:
1、ERROR:zeroDateTimeBehavior = convertToNull要改为CONVERT_TO_NULL
2、WARN:ロードクラス`はcom.mysql.jdbc.Driverを" 。これは推奨されません。新しいドライバクラスは`com.mysql.cj.jdbc.Driverです" 。ドライバは自動的にSPIを介して登録され、ドライバクラスの手動ローディングは、一般的に不要です。 図3は、 WARN:サーバーなしのSSL接続を確立する」の本人確認をお勧めしません。MySQLの5.5.45+によると、5.6.26+と5.7.6+要件のSSL接続は、デフォルトであれば、明示的なオプションISNによって確立されなければならない"トンセット。既存のアプリケーションがSSLを使用していないの遵守についてverifyServerCertificateプロパティがに設定されている「偽」。あなたはuseSslオプション=設定することで、明示的無効SSLに必要偽 =、またはセットuseSslオプションを真とトラストストアを提供するために、サーバ証明書の検証。
採用「ソースコードを変更、それを自分でコンパイル」すべての問題を解決するためのアプローチをする必要があり、私たちはそう。参考:http://www.manongjc.com/detail/14-iexdburliccybhe.html
最初のステップダウンロード出典:
https://github.com/alibaba/DataX/archive/master.zip gitのクローンモードまたは直接ダウンロード。
第二段階は、修正版のmysql-コネクタ-javaの主導します:
見つけて {DataX_source_code_home} / mysqlreader /と {} DataX_source_code_homeバージョン8.0.Xの値を変更し、/ /のmysqlwriterでpom.xmlファイルを(直接「mysqlのコネクタ-Javaの迅速な位置決めのために検索することができ、Xは、あなた自身を書きたいです)バージョン番号へ
あなただけの書き込みMySQLを使用する場合は、ディレクトリのみmysqlwriterでxmlファイルを変更することができます。
第3のステップは、値convertToNull zeroDateTimeBehavior 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交換されます
#CHRIP {DataX_source_code_home} / convertToNullすべてのファイルのファイルを検索し、交換するために、フォルダの文字列に含まれている
{} DataX_source_code_home /プラグインRDBMSのvimを -util / srcに/メイン/ javaの/ COM /アリババ/ DATAX /プラグイン/ RDBMS / utilの/ DataBaseType.java 全文を交換する#次に、コマンドモード :%sの/ convertToNull / CONVERT_TO_NULL /
あなたは第四、五段階の直接包装DATAXをスキップする場合は、完璧なソリューションその他の警告をしたい場合これは、プログラムが正しく実行された、継続するための手順に従ってください。
第四段階は、JDBCドライバの名前を変更することであるcom.mysql.cj.jdbc.Driverはcom.mysql.jdbc.Driverです
VI {DataX_source_code_home} /プラグインRDBMS-utilの/ SRC /メイン/ジャワ/ COM /アリババ/ DATAX /プラグイン/ RDBMS / UTIL / DataBaseType.java VI {DataX_source_code_home} / adswriter / SRC /メイン/ジャワ/ COM /アリババ/ DATAX /plugin/writer/adswriter/load/AdsHelper.java
全文ははcom.mysql.jdbc.Driver com.mysql.cj.jdbc.Driver交換されます。
第五工程JDBCリンク追加useSslオプション= falseを設定:
例えば:pythonのdatax.py file.json、file.jsonの設定項目: "jdbcUrlと": "JDBC:MySQLの:。?// $ {} writer_gateway / OMS&useUnicode = characterEncoding =真のUTF-8 &= useSslオプションをfalseに "、
パッキン達人による第6のステップ :(参照開発者が提供するGitの手順に)
CD {DataX_source_code_home} MVN -Uきれいなパッケージには、組立:組立-Dmaven.test.skip = 真
成功、ログショー次包装:
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------ -----------------------
[INFO]は合計時間:午前8時12分
2015-12-13T16:26:48 + 08 [情報]で終了します:00
[INFO]最終的なメモリ:133M / 960M
[INFO] ------------------------------------ -----------------------------
データX {} DataX_source_code_home /ターゲット/ DATAX / DATAX /位置成功包装袋の後、DATAX /プラグイン/ライター/ mysqlwriter / libsに/ディレクトリを参照、新しいドライバーと、既にジャーパッケージが含まれています
最後のステップ:
DATAXは、その後、ご希望の場所への移動を実行することです:pythonのdatax.py ./file.json、これまでのところ、OVER