MySQL & Embulk
1.MySQLセットアップ
・問題
MySQL起動のコマンドが”mysql -user root -password”だと起動しない
・解決策
"mysql -uroot -p"だと起動する
2.Embulkのセットアップ
(1)java.io.FileNotFoundException: C:\Program%20Files\embulk\embulk-0.11.4.jar
・コマンド
java -jar embulk-0.11.4.jar example ./try1
・問題
Manifest unavailable: I/O error in reading JAR.
java.io.FileNotFoundException: C:\Program%20Files\embulk\embulk-0.11.4.jar (指定されたパスが見つかりません。)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(Unknown Source)
at java.util.zip.ZipFile.<init>(Unknown Source)
at java.util.jar.JarFile.<init>(Unknown Source)
at java.util.jar.JarFile.<init>(Unknown Source)
at org.embulk.cli.CliManifest$Holder.getManifest(CliManifest.java:57)
at org.embulk.cli.CliManifest$Holder.<clinit>(CliManifest.java:20)
at org.embulk.cli.CliManifest.getManifest(CliManifest.java:16)
at org.embulk.cli.Main.main(Main.java:17)
Exception in thread "main" java.lang.NullPointerException
at org.embulk.cli.SelfContainedJarFiles$StaticInitializer.addFromManifest(SelfContainedJarFiles.java:40)
at org.embulk.cli.Main.main(Main.java:20)
・原因
Program配下だとエラーになる。
C:\Program Files\ フォルダは、Windowsのシステムディレクトリの一部であり、通常はアプリケーションのインストール先として使用されます。このフォルダに対する書き込みや実行には、管理者権限が必要になる場合があります。特に、Javaなどのアプリケーションがこのディレクトリ内のファイルにアクセスしようとする場合、適切な権限がないとエラーが発生することがあります。
・解決策
Cドライブ直下に移動して”C:\embulk>java -jar embulk-0.11.4.jar example ./try1”を実行
(2)C:\embulk>java -jar embulk-0.11.4.jar install "org.embulk:embulk-output-s3"
・問題
このメッセージを見る限り、インストールに問題が発生しています。エラーメッセージは「Bad artifact coordinates」となっており、指定されたアーティファクト座標が正しくないことが原因です。
・解決策
①gitで該当バージョンを探す
②バージョンを指定する
java -jar embulk-0.11.4.jar install "org.embulk:embulk-output-s3:1.7.1"
(3)~の意味
・問題
~/.embulk/embulk.properties: これは、Embulkの設定ファイルのパスを表しています。~ は、LinuxやmacOSで一般的に使われる「ホームディレクトリ」を指すショートカットです。~/.embulk/embulk.propertiesは、ホームディレクトリの中にある .embulk という隠しフォルダ内に embulk.properties という設定ファイルを作成することを意味しています。
・解決策
Windowsでは、~は通常ユーザープロファイルディレクトリ(例: C:\Users\YourUsername)を指しますが、隠しフォルダの .embulk がその中に存在しない場合は、自分で作成する必要があります。
設定ファイルは、C:\Users\YourUsername\.embulk\embulk.properties というパスに作成します。
YourUsernameは、あなたのWindowsユーザー名です。
(4)C:\Users\togba.embulk\embulk.properties does not exist. Ignored.
・コマンド
C:\embulk>java -jar C:\embulk\embulk-0.11.4.jar gem install embulk -v 0.11.4
・問題
C:\embulk>java -jar C:\embulk\embulk-0.11.4.jar gem install embulk -v 0.11.4
[37m2024-08-18 22:09:45.067 +0900 [DEBUG] (main): C:\Users\togba.embulk\embulk.properties does not exist. Ignored.
[0;39m[32m2024-08-18 22:09:45.071 +0900 [INFO] (main): m2_repo is set as a sub directory of embulk_home: C:\Users\togba.embulk\lib\m2\repository
[0;39m[32m2024-08-18 22:09:45.072 +0900 [INFO] (main): gem_home is set as a sub directory of embulk_home: C:\Users\togba.embulk\lib\gems
[0;39m[32m2024-08-18 22:09:45.072 +0900 [INFO] (main): gem_path is set empty.
[0;39m[37m2024-08-18 22:09:45.072 +0900 [DEBUG] (main): Embulk system property "default_guess_plugin" is set to: "gzip,bzip2,json,csv"
[0;39mJRuby is not configured well to run "gem". Configure the Embulk system property "jruby".
・原因
「C:\Users\togba.embulk\embulk.properties」ではなく
「C:\Users\togba.embulk\lib\embulk.properties」になっている
(5)Ruby is not configured well to run "gem". Configure the Embulk system property "jruby".
・コマンド
C:\embulk>java -Xmx1024m -jar C:\embulk\embulk-0.11.4.jar gem install embulk -v 0.11.4
・問題
[32m2024-08-18 22:23:07.453 +0900 [INFO] (main): m2_repo is set as a sub directory of embulk_home: C:\Users\togba.embulk\lib\m2\repository
[0;39m[32m2024-08-18 22:23:07.461 +0900 [INFO] (main): gem_home is set as a sub directory of embulk_home: C:\Users\togba.embulk\lib\gems
[0;39m[32m2024-08-18 22:23:07.464 +0900 [INFO] (main): gem_path is set empty.
[0;39m[37m2024-08-18 22:23:07.464 +0900 [DEBUG] (main): Embulk system property "default_guess_plugin" is set to: "gzip,bzip2,json,csv"
[0;39mJRuby is not configured well to run "gem". Configure the Embulk system property "jruby".
・原因
プロパティを修正した際、jが2つになっていた。(凡ミス)
jruby=file:///C:/embulk/lib/jjruby-complete-9.4.8.0.jar
(6)embulk: 'embulk' is not an embulk command.
・コマンド
C:\embulk>java -Xmx1024m -jar C:\embulk\embulk-0.11.4.jar embulk gem install msgpack
・問題
embulk: 'embulk' is not an embulk command.
Usage: embulk [common options] <command> [command options]
・原因
x.x.x.jar の後のembulkが不要
・解決策
embulk gem install msgpack
でなく、
gem install msgpack
(7)Error: InputPlugin 'mysql' is not found.
・コマンド
java -Xmx1024m -jar C:\embulk\embulk-0.11.4.jar guess ./test1/seed1.yml -o config1.yml
・問題
Error: InputPlugin 'mysql' is not found.
・原因
java -jar embulk-X.Y.Z.jar install "org.embulk:embulk-input-s3:0.6.0"
でインストールしようとしていた。
・解決策
java -Xmx1024m -jar C:\embulk\embulk-0.11.4.jar gem install embulk-output-s3
(補足)
コマンドプロンプトで「embulk gem install embulk -v 0.11.4」がエラーになる理由と、「java -jar embulk-X.Y.Z.jar gem install embulk -v 0.11.4」でうまくいく理由について説明します。
背景
Embulkは、データの転送や変換に特化したツールです。Embulk自体はJavaで実装されており、Embulkのプラグインや他のパッケージをインストールするためには、EmbulkのRubyバインディング(Gem)を利用します。
エラーになる理由
embulk gem install embulk -v 0.11.4 を実行した際にエラーが発生するのは、以下の理由が考えられます。
Embulkのバージョンの違い:
実行しているEmbulkコマンドが対応するバージョンのRuby Gemを探そうとする際に、指定したバージョン(0.11.4)のEmbulkと互換性がない場合、エラーが発生する可能性があります。
パスの設定や環境の問題:
実行環境で、インストールされているEmbulkのバージョンやJavaのパスが正しく設定されていない場合、embulk コマンドが適切に動作しないことがあります。
Embulkコマンド自体の問題:
インストールされているEmbulkのバージョンに不具合があり、特定のバージョンのGemをインストールできないことも考えられます。
解決方法でうまくいく理由
一方、java -jar embulk-X.Y.Z.jar gem install embulk -v 0.11.4 でうまくいく理由は以下の通りです。
正確なEmbulkバージョンの指定:
このコマンドでは、特定のEmbulkバージョン(X.Y.Z)を明示的に指定してJavaのJarファイルとして実行しています。これにより、指定したバージョンに対応した正確な環境でGemのインストールが行われます。
独立した環境での実行:
java -jar コマンドを使ってEmbulkを実行することで、Embulk自体が他の環境設定やインストールされている他のバージョンに依存せずに動作します。そのため、正確なバージョンのGemのインストールが成功します。
要するに、java -jar を使うことで、正確なバージョンのEmbulkを指定して動作させるため、依存関係や互換性の問題が回避され、インストールがうまくいったのです。
(8)Error: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.
・コマンド
java -Xmx1024m -jar C:\embulk\embulk-0.11.4.jar preview config1.yml
・問題
Error: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.
・原因
caching_sha2_password はMySQL 8.0で導入された新しいデフォルトの認証プラグインです。しかし、あなたが使用しているJDBCドライバ(mysql-connector-java-5.1.44.jar)はこの認証プラグインをサポートしていません。
・解決策
MySQLの認証方式を変更する
MySQLサーバーで使用する認証方式を古い mysql_native_password に変更します。
具体的には、以下のようにMySQLでユーザーの認証プラグインを変更します。
・SQL
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
(9)Error: java.sql.SQLException: The server time zone value '???? (?W????)' is unrecognized or represents more than one time zone.
・コマンド
C:\embulk>java -Xmx1024m -jar C:\embulk\embulk-0.11.4.jar preview config1.yml
・問題
Error: java.sql.SQLException: The server time zone value '???? (?W????)' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
・原因
MySQLサーバーのタイムゾーンが正しく設定されていない、またはクライアントのJDBC接続で明示的なタイムゾーンが指定されていないことが原因です。The server time zone value '???? (?W????)' の部分が示すように、タイムゾーン情報が不明または不正な文字列として認識されています。
・解決策
ymlにcolumn_options:とoptions:を追加
in:
type: mysql
host: localhost
user: root
password: Gasu1312!
database: testdb
table: users
column_options:
last_update: {type: string, timestamp_format: '%Y/%m/%d %H:%M:%S', timezone: +0900}
closed_account_time: {type: string, timestamp_format: '%Y/%m/%d %H:%M:%S', timezone: +0900}
select: '*'
options: {serverTimezone: 'Asia/Tokyo'}
(10)mysql/testdb/users.000.00.csv~mysql/testdb/users.007.00.csvの7ファイルできている
・原因
デフォルト設定で並行処理するようになっている。
・解決策
①設定変更
②後処理を追加
(11)'source' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
・コマンド
C:\embulk~.embulk\bin>source ~/.bashrc
・問題
・解決策
Windows PowerShellで該当パスへ移動して.(ドット)で実行
PS C:\embulk~.embulk\bin> . .~.bashrc