🌟

embulkでCData Driversを使ってMySQLとつなぐ

2021/12/24に公開

CData Driversとは

https://www.cdata.com/jp/drivers/

ODBC
JDBC
...etc
などの形式を使ってさまざまなデータにアクセスするdriverです。


今回試すこと

上記のCData DriversのJDBC MySQLプラグインを使ってアクセスしてデータを取得してくるというところまでです。
https://www.cdata.com/jp/drivers/mysql/jdbc/

環境

MySQLサーバー
プロキシサーバー
embulkが動くサーバー

CData MySQL Driver

前提の知識

mysqlに接続することができる


まず、CData Driversを使う前にMySQLにアクセスできるかの確認をします。
プロキシサーバーを使っていない場合は「プロキシサーバーを通じてMySQLにつながるかの確認」を飛ばして進めてください。

MySQLにつながるかの確認

mysqlにはmycliを使って確認しました。
https://www.mycli.net/

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
https://www.embulk.org/

cdataさんで用意されているpluginはinputプラグインのみなのでinputの部分の説明をします。

embulk pluginのインストールと設定

cdataさんのpluginは評価版があります。
下記のURLのページの「ダウンロード評価版」からダウンロードできます。
https://www.cdata.com/jp/drivers/mysql/download/jdbc/

cdata jdbc mysql plugin

基本的には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