手軽にPostgreSQLからMysqlへデータを移行する
HerokuはRDBとしてPostgreSQLが無料で利用できます。が、我々SonicGardenはSKIPの開発を通してAmazonEC2 - Linux - MySQL - Ruby on Rails での開発が中心としてやってきました。
youRoomは初期段階まずはheroku上に構築し、その後コスト面からSonicGardenが得意EC2に移動しました。その際、DBをPostgreSQLのままEC2上に移動しました。
しかし、MySQLの方が運用ノウハウもあるということから、PostgreからMySQLへの移行を検討していますが、ダンプを直接IN/OUTすると、バイナリデータなどがうまく動かないなど問題がありました。
そこで、tapsというrubyのツール/ライブラリを利用してデータをPostgreSQLからMySQLへの移行を試してみました。これは、herokuのgemでも利用されているライブラリで、ローカルの環境からHerokuのDBへデータ移行を行う際にも内部で利用されます。
http://github.com/ricardochimal/taps
実際に、成功した例を以下に紹介します。
まずは、以下のコマンドでインポートするmysql側にアクセスする口をHTTPで用意します。
taps server mysql://root@localhost/youroom_development?encoding=utf8 mataki pass
上のコマンドで開けたHTTPに対して、以下のコマンドでPUSHします。
taps push postgres://postgres@localhost/youroom_development http://mataki:pass@localhost:5000
上の例では、同じサーバ上でデータをやり取りして、コンバートしましたが別サーバで通信することもできます。なのでHTTPで通信するようにしているんでしょうね。内部は、sinatraを利用していたりするのでソースを見てみるのも面白いかと思います。
注意点としては、