諸事情で MySQL から PostgreSQL にデータを移行しなければならなくなったので taps を使ってみた。
#taps gem
taps は、データのインポート/エクスポートを用意に実現するシンプルなgem。
##インストール
$ gem instal taps
$ gem instal sqlite3 # 標準でsqlite3を使おうとするので必要ぽい
$ gem instal mysql # 移行元:MySQL
$ gem instal pg # 移行先:PostgreSQL
サーバ
taps は sinatra アプリケーションとして動作し、http経由でデータをやり取りする。
また、簡易的なセキュリティ対策として、httpのためのユーザ名とパスワードを設定する必要がある。
$ taps server mysql://localdbuser:localdbpass@localhost/dbname httpuser httppassword
任意のDBを指定する際は [DB_TYPE]://[DB_USERNAME]:[DB_PASSWD]@[DB_HOST]/[DB_NAME]
みたいな感じで。
クライアント
taps サーバは標準で5000番ポートで動作しているのでそこに接続する。(下記の例ではホスト example.com で動作しているものとする)
$ taps pull postgres://dbuser:dbpassword@localhost/dbname http://httpuser:httppassword@example.com:5000
-
taps pull
サーバ側DBからデータを取得する。 -
postgres://dbuser:dbpassword@localhost/dbname
localhost で動作している postgresql をディスティネーションにする。
アクセス権限さえあれば localhostに限らず、どこのサーバでの利用できる。 -
http://httpuser:httppassword@example.com:5000
前述のtaps サーバに接続する。httpuser
とhttppassword
は起動時に指定したもの。
クライアントで tap push
にすれば、サーバ側で指定したDBにデータをインポートすることも出来る。
実行例
実行するとこんな感じでぐりぐりデータを移行してくれる。スキーマも拾ってくれるので便利。
$ taps pull postgres://dbuser:dbpassword@localhost/dbname http://httpuser:httppassword@example.com:5000
Receiving schema
Schema: 0% | | ETA: --:--:--
Schema: 33% |============================================= | ETA: 00:00:00
Schema: 66% |=========================================================================================== | ETA: 00:00:00
Schema: 100% |===========================================================================================================================================| Time: 00:00:01
Receiving data
3 tables, 600 records
page: 100% |===========================================================================================================================================| ETA: 00:00:00
see also: