embulkでCData Driversを使ってMySQLとつなぐ
CData Driversとは
ODBC
JDBC
...etc
などの形式を使ってさまざまなデータにアクセスするdriverです。
今回試すこと
上記のCData DriversのJDBC MySQLプラグインを使ってアクセスしてデータを取得してくるというところまでです。
環境
MySQLサーバー
プロキシサーバー
embulkが動くサーバー
CData MySQL Driver
前提の知識
mysqlに接続することができる
まず、CData Driversを使う前にMySQLにアクセスできるかの確認をします。
プロキシサーバーを使っていない場合は「プロキシサーバーを通じてMySQLにつながるかの確認」を飛ばして進めてください。
MySQLにつながるかの確認
mysqlにはmycliを使って確認しました。
mycli -u [db側のユーザー] -p -d [db側のデータベース]
mycli -u hoge -p -d foobar
hoge: ユーザー名
foobar: データベース名
プロキシサーバーを通じてMySQLにつながるかの確認
まずポートフォワーディングを通します。
ssh -i [sshのkey] -p [sshのport] -f -N -C -L [host側のport]:[db側のhost]:[db側のport] [sshのuser]@[sshのhost]
ssh -i aaa.key -p 22 -f -N -C -L 3306:db.foobar.com:3306 ssh_user@ssh_host
次にmysqlにアクセスします。
mycli -u [db側のユーザー] -h 127.0.0.1:[上のポートフォワーディングで指定したhost側のport] -p -d [db側のデータベース]
mycli -u hoge -h 127.0.0.1:3306 -p -d foobar
MySQLへCData JDBC MySQL Pluginを使ってembulkでアクセスする
embulk
cdataさんで用意されているpluginはinputプラグインのみなのでinputの部分の説明をします。
embulk pluginのインストールと設定
cdataさんのpluginは評価版があります。
下記のURLのページの「ダウンロード評価版」からダウンロードできます。
基本的にはWindowsもMacもLinuxも使い方は同じです。
jarファイルがlibフォルダの直下にあると思うので、それがあるかを確認してください。
Mac版(dmg)
/Application/CData JDBC Driver for MySQL 2021/lib/cdata.jdbc.mysql.jar
Linux版(zip)
解凍すると下記のフォルダができます。
MySQLJDBCDriver/setup.jar
下記のコマンドを叩くとライセンスの認証とinstallされる場所が選択できます。
選択肢は1で進めてください。
java -jar ./MySQLJDBCDriver/setup.jar
デフォルトだと自分がいる場所がインストールする場所になっているので好きな場所においてください。
embulk gem install embulk-input-jdbc
embulk gem install [output用のembulk plugin]
embulkで使うとき
通常のconfig.yml
in:
type: jdbc
driver_path: ./MySQLJDBCDriver/lib/cdata.jdbc.mysql.jar
driver_class: cdata.jdbc.mysql.MySQLDriver
url: jdbc:mysql:User=hoge;Password=hogehoge;Database=foobar;Server=db.foobar.com;
sshあり(key)のconfig.yml
in:
type: jdbc
driver_path: ./MySQLJDBCDriver/lib/cdata.jdbc.mysql.jar
driver_class: cdata.jdbc.mysql.MySQLDriver
url: jdbc:mysql:User=hoge;Password=hogehoge;Database=foobar;Server=db.foobar.com;UseSSH=TRUE;SSHAuthMode=Public_Key;SSHPort=22;SSHServer=ssh_host;SSHUser=ssh_user;SSHClientCert=./aaaaaaa.key;SSHClientCertType=PUBLIC_KEY_FILE;
sshあり(password)のconfig.yml
in:
type: jdbc
driver_path: ./MySQLJDBCDriver/lib/cdata.jdbc.mysql.jar
driver_class: cdata.jdbc.mysql.MySQLDriver
url: jdbc:mysql:User=hoge;Password=hogehoge;Database=foobar;Server=db.foobar.com;UseSSH=TRUE;SSHAuthMode=Password;SSHPort=22;SSHServer=ssh_host;SSHUser=ssh_user;SSHPassword=aaaaaaa;
このconfig.ymlをembulkサーバーで実行します
embulk run config.yml
実際の本番環境ではconfig.yml.liquidを使っています。
logの確認方法
JDBC URLの部分にLogfile=[logを起きたい場所];Verbosity=5;を追加します。
この設定によってLogfileで指定した場所にlogfileが吐き出されます。
補足
embulkやSSLの部分も新しく下記の記事で説明するようにしておきます。
embulk
後ほど記載
ssl
後ほど記載
Discussion