最近、再び heroku を触ることがあって db のバックアップとかリストアをいじっていたのでメモ。
基本的な方法だとdb:pullとdb:pushを使う。最初に taps を gem で入れておく。あとは
heroku db:push postgres://user:pass@localhost/app
とかそういう感じ。これは localhost とか適当な場所に postgresql とかを動かさないとダメなので要注意。
最近追加された方法としては addons:pgbackups を使う。
heroku addons:add pgbackups:basic
これは heroku で用意している共有データベースにバックアップするというもの。実際にはS3に放り込んでいるみたい。
heroku pgbackups:capture
で今の瞬間のDBを保存。バックアップの一覧を確認したいときは
heroku pgbackups
を使うとIDと共に一覧が出てくる。バックアップのダンプを手元に持ってきたい場合は
heroku pgbackups:url b001
とか実行するとS3のURLが出てくる。b001の部分はDB IDで省略した場合は最後にバックアップされたもののURLが出てくる。なのでワンライナーで持ってきたい場合は公式ドキュメントにあるように
curl -o latest.dump `heroku pgbackups:url`
と実行すればいいみたい。
ちなみにpgbackupsで持ってきたダンプデータは psql にリダイレクトで突っ込む方法ではなく、pg_restore を使わないとダメみたい。今日は pgbackups で手元に持ってきたダンプデータを使ってリストアしようと思ったけど、何故かうまく行かなかったので pg_restore と db:push を経由するという方法をとったんだけど、何が原因なのかなあ。
ほんとに heroku はなんかすごいことになってるね。production で使っていくには、もう少し素振りが必要っぽい。
今日書いたことはドキュメントにだいたい書いてあるので詳しくはそっちへ。
いつの間にかニコニコ動画で公開されていたのであった。中の人お疲れ様です。
http://www.nicovideo.jp/watch/sm12972926
テストとか文化についてしゃべったつもりなので興味のある方は是非どうぞ。