-
Notifications
You must be signed in to change notification settings - Fork 9
pgbackups
HerokuBackups アドオンを使うと Heroku の Postgres データベースのバックアップを簡単にキャプチャーし、管理できます。
アドオンをインストールします:
:::term
$ heroku addons:add pgbackups
Adding pgbackups to myapp... done
PGBackups にはバックアップの自動化を含むなどのいくつかのプランがあります。 各種プランへの切り替えは PGBackups Add-on page にある一覧を参照してください。
このプランでは、マニュアルでのキャプチャー・バックアップの管理・リストアができます。 違いは、管理できるバックアップの多さです。
インストールするには heroku addons:add pgbackups:basic
を実行してください。
これらのプランでもマニュアルでキャプチャーできます。さらにアプリケーションの DATABASE_URL コンフィグ変数が指し示すデータベースの夜間バックアップを行ってくれます。
auto-week プラントと auto-month プランの違いは自動でバックアップの保持期間です。 auto-week プランは7日間分のバックアップを保持します。 auto-month プランは、7日間分はもちろん、さらに5週間分のバックアップを保存します。
インストールするには heroku addons:add pgbackups:auto-week
を実行してください。
自動でとったバックアップは破棄されません。
バックアップは圧縮されます。従って、バックアップのサイズは、実際のデータベースのサイズより小さくなります。
プライマリーデータベースのバックアップの取り方を以下に示します:
:::term
$ heroku pgbackups:capture
HEROKU_POSTGRESQL_BLACK (DATABASE_URL) ----backup---> b251
Capturing... done
Storing... done
データベースを複数持っている場合は、バックアップ対象を選択できます。その方法を以下に示します:
:::term
$ heroku pgbackups:capture HEROKU_POSTGRESQL_PINK
HEROKU_POSTGRESQL_PINK ----backup---> b252
Capturing... done
Storing... done
新しいキャプチャーを取ったときに古いバックアップを自動削除する場合を以下に示します:
:::term
$ heroku pgbackups:capture --expire
全バックアップのサマリーリストを取得できます。 マニュアルで取ったバックアップの ID は 'b' から、自動でとったバックアップの ID は 'a' から始まります。
:::term
$ heroku pgbackups
ID | Backup Time | Size | Database
-----+---------------------+-------+------------------------
a226 | 2012/02/22 20:02.19 | 5.3KB | DATABASE_URL
a227 | 2012/02/23 20:02.19 | 5.3KB | DATABASE_URL
b251 | 2012/02/24 16:08.02 | 5.3KB | HEROKU_POSTGRESQL_BLACK
b252 | 2012/02/24 16:08.53 | 5.3KB | HEROKU_POSTGRESQL_PINK
10 分間利用可能なバックアップへの公開アクセス URL を作成できます。 この URL はマイグレーションもしくはエクスポートに使えます。
:::term
$ heroku pgbackups:url b004
"http://s3.amazonaws.com/hkpgbackups/[email protected]/b004.dump?AWSAccessKeyId=ABCD1234&Expires=1289261668&Signature=3mMBeKISewgEUDT%2FL5mRz4EYS4M%3D"
バックアップの削除もできます。プランにもよりますが、マニュアルでバックアップを削除できます。
:::term
$ heroku pgbackups:destroy b003
Backup b003 will be permanently deleted Are you sure (y/N)? y
Backup b003 deleted.
バックアップからデータベースを復旧できます。これは破壊的な操作です: 復旧操作は、既存のデータを無くしてバックアップの内容に置き換えます。復旧する前のデータベースの内容は回復できません。バックアップ b251 を DATABASE_URL のデータベースへ復旧する方法を以下に示します:
:::term
$ heroku pgbackups:restore DATABASE b251
HEROKU_POSTGRESQL_BLACK (DATABASE_URL) <---restore--- b251
HEROKU_POSTGRESQL_BLACK
2012/02/24 16:08.02
5.3KB
HEROKU_POSTGRESQL_PINK_URL のデータベースへバックアップを復旧する方法を以下に示します:
:::term
$ heroku pgbackups:restore HEROKU_POSTGRESQL_PINK b251
HEROKU_POSTGRESQL_PINK <---restore--- b251
HEROKU_POSTGRESQL_BLACK
2012/02/24 16:08.02
5.3KB
他でエクスポートした PostgreSQL データベースのデータがある場合、そのデータをオープンソースの pg_dump ツールを使って圧縮してください:
:::term
$ PGPASSWORD=mypassword pg_dump -Fc --no-acl --no-owner -h myhost -U myuser mydb > mydb.dump
どこかの HTTP アクセス URL を使ってアップロードします。推奨は Amazon S3 もしくは S3Fox です。 プライベートアクセスでファイルを作って、Heroku インポート用のテンポラリー認証 URL を作ります。 その URL をカット&ペーストして以下のコマンドを使います:
:::term
$ heroku pgbackups:restore DATABASE 'http://s3.amazonaws.com/.....mydb.dump?authparameters'
データベースを Heroku Postgres サービスから外に移動させたい場合、バックアップを取ってから、curl
や wget
もしくはブラウザなどのツールを使ってダウンロードします。例を以下に示します:
:::term
$ curl -o latest.dump `heroku pgbackups:url`
後で書きますが、バックアップ URL は 10 分間で失効します。
取得したダンプは pg_restore ツールを使って、ローカルデータベースに読み込めます。
:::term
$ pg_restore --verbose --clean --no-acl --no-owner -h myhost -U myuser -d mydb latest.dump
You can use pgbackups to transfer data from one app to another, say from your production app to your staging app. To do this, capture a backup on the primary app:
:::term
$ heroku pgbackups:capture --app myapp
Now retrieve the URL of the backup, and import from that backup into the secondary app:
$ heroku pgbackups:restore DATABASE `heroku pgbackups:url --app myapp` --app myapp-staging
Note that the restore is going into the database at DATABASE_URL of myapp-staging, but using the URL of the latest backup from myapp.
PGBackups は、とても大きなサイズのバックアップを複数のファイルに分けます。
その場合、heroku pgbackups:url
は2つもしくはそれ以上のファイルを表示します。
:::term
$ heroku pgbackups:url
"https://s3.amazonaws.com/hkpgbackups/[email protected]/a292.dump.aa?AWSAccessKeyId=ABCetc
https://s3.amazonaws.com/hkpgbackups/[email protected]/a292.dump.ab?AWSAccessKeyId=ABCetc"
これらのファイルは unix の split
ユーティリティで作られているので、使う前につなげて利用します。
:::term
$ cat a292.dump.aa a292.dump.ab > a292.dump