最初に素早く作って素早く公開したアプリがherokuでPostgreSQLを使っていたが、データベースの無料枠を超えてしまって、herokuに課金し続けてとくに問題ない日々を過ごしていたが、アプリを気軽にどんどん増やす環境を作っておきたかったのでアプリ毎に課金する必要が出るのは避けたくなった。
なのでvpsを契約してmysql(いつも使っているので使いやすいため)に移行する方法。RDS使うようにしようって時にもやり方特に変わらんと思う。
tapsを使う。
gem install taps
taps server mysql://{移行先user}:{移行先pass}@{移行先host}/{移行先database}?encoding=utf8 {一時的なuser} {一時的なpass}
taps push postgres://{移行元user}:{移行元pass}@{移行元host}/{移行元database} http://{一時的なuser}:{一時的なpass}@localhost:5000
例
taps server mysql://myaamori@dondondo-natu/musashino-animeshion?encoding=utf8 shiro bako
taps push postgres://yano@youkan/musashino-animeshion http://shiro:bako@localhost:5000
とかとか。
最初は自分のlocal環境のmysqlに入れて試して、問題なかったのでmysql_dump
でsql出して移行先に入れた。だけど一旦localに入れる必要はなかったと思う。encodingの指定しないと文字化けするっぽい。
postgresの指定はheroku config
のDATABASE_URL
の設定そのままでいける。herokuコマンドでtaps使ってるっぽいので割と信頼できる。
あとはアプリのdb接続をmysqlにしたり念のための確認やらバックアップやりなんやらをしておいて
heroku maintenance:on
heroku config:add DATABASE_URL=mysql://{移行先user}:{移行先pass}@{移行先host}/{移行先database}
heroku maintenance:off
でオッケー
vps管理になるので監視とか最適な設定とか必要になるでしょうのでそこら辺は別途いい感じにしましょう。RDSにしたほうが金余分にかかるけど全く意識しないメリットデカイのでそっちでもいいかなぁとか考えたり。