HerokuアプリのDBをバックアップするにはpgbackupsというアドオンを利用する。昨日書いた方法との主な違いは、今回のはHerokuのサーバー上にバックアップされることと、フォーマットの変換はできないこと、あたりかな。バックアップ処理を自動化する場合は今回の方法が良いみたい。
アドオン追加
まず、heroku
コマンドが使えるgemのherokuを最新の状態にする。
$ gem update heroku
次に、対象のHerokuアプリにpgbackupsアドオンを追加する。Basicタイプは無料。
$ heroku addons:add pgbackups:basic --app heroku-hello-world
これで準備完了。
バックアップ
Heroku(Amazon S3)上にバックアップするには以下のようにコマンドを実行する。
$ heroku pgbackups:capture --app heroku-hello-world
DATABASE_URL --backup--> b001
Capturing... done
Storing... done
以下のコマンドで、現在保存されているバックアップの一覧を見ることが出来る。
$ heroku pgbackups --app heroku-hello-world
ID | Backup Time | Size | Database
b001 | 2011/02/22 04:54.43 | 23.6KB | SHARED_DATABASE_URL
無料では2個まで
無料のBasicタイプでは、バックアップできるファイル数の上限は2個。
$ heroku pgbackups --app heroku-hello-world
ID | Backup Time | Size | Database
b001 | 2011/02/22 04:54.43 | 23.6KB | SHARED_DATABASE_URL
b002 | 2011/02/22 05:29.41 | 23.6KB | SHARED_DATABASE_URL
上のように既にバックアップファイルが2個ある状態で、さらにバックアップをしようとすると、以下のようにエラーとなる。
$ heroku pgbackups:capture --app heroku-hello-world
DATABASE_URL --backup--> error
! must delete a backup before creating a new one
なので、古いほうを捨てて新しいファイルでバックアップをする。その場合は、以下のように--expire
オプションを付ける。
$ heroku pgbackups:capture --expire --app heroku-hello-world
DATABASE_URL --backup--> b003
Capturing... done
Storing... done
$ heroku pgbackups --app heroku-hello-world
ID | Backup Time | Size | Database
b002 | 2011/02/22 05:29.41 | 23.6KB | SHARED_DATABASE_URL
b003 | 2011/02/22 05:33.22 | 23.6KB | SHARED_DATABASE_URL
手動で削除
バックアップされているファイルを手動で削除する場合は、以下のdestroy
を使う。
$ heroku pgbackups:destroy b003 --app heroku-hello-world
Backup b003 deleted.
リストア
現在バックアップされているファイルから、HerokuアプリのDBにリストアする場合は、以下のようにコマンドを実行する。
$ heroku pgbackups:restore b004 --app heroku-hello-world
SHARED_DATABASE_URL (DATABASE_URL) <--restore-- b004
! WARNING: Potentially Destructive Action
! This command will affect the app: heroku-hello-world
! To proceed, type "heroku-hello-world" or re-run this command with --confirm heroku-hello-world
> heroku-hello-world
Retreiving... done
Restoring... done
ダウンロード
Heroku上でバックアップしたデータを、ローカルにダウンロードするには以下のように実行する。
$ heroku pgbackups:url b004 --app heroku-hello-world
[http://s3.amazonaws.com/hkpgbackups/...](http://s3.amazonaws.com/hkpgbackups/...)
$ curl "http://s3.amazonaws.com/hkpgbackups/..." -o b004.dump
上記のようにダウンロード用のURLが表示されるので、ブラウザを使って直接アクセスしてもダウンロード可能。
ダンプファイルをローカルのPostgreSQLにリストア
Herokuのドキュメントを参考に、以下のpg_restore
コマンドを使って、ダウンロードしたダンプファイルをローカルのPostgreSQLにリストアする。
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U ruedap -d mydb b004.dump
-h
でホスト名、-U
でユーザー名、-d
でDB名を指定して、最後にリストアしたいダンプファイルを指定する。Railsアプリであれば、config/database.yml
にユーザー名やDB名は指定してあるはず。
HerokuにPG Backupsというアドオンが加わり、Heroku上のPostgreSQLからダンプ取得・リストアが簡単にできるようにな... - Sooey heroku の db バックアップ周り - HsbtDiary(2011-01-12) Herokuのpgbackupsからデータをリストアする - komagata [p0t]