Skip to content
toydev edited this page Sep 8, 2012 · 11 revisions

原文

HerokuBackups アドオンを使うと Heroku の Postgres データベースのバックアップを簡単にキャプチャーし、管理できます。

アドオンのインストール

アドオン

アドオンをインストールします:

:::term
$ heroku addons:add pgbackups
Adding pgbackups to myapp... done

アドオンのプラン

PGBackups にはバックアップの自動化を含むなどのいくつかのプランがあります。 各種プランへの切り替えは PGBackups Add-on page にある一覧を参照してください。

Plus プラン

このプランでは、マニュアルでのキャプチャー・バックアップの管理・リストアができます。 違いは、管理できるバックアップの多さです。

インストールするには heroku addons:add pgbackups:basic を実行してください。

auto-week プランと auto-month プラン

これらのプランでもマニュアルでキャプチャーできます。さらにアプリケーションの 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
Be sure to use single quotes around the temporary S3 URL, as it contains ampersands and other characters that will confuse your shell otherwise.

どこかの HTTP アクセス URL を使ってアップロードします。推奨は Amazon S3 もしくは S3Fox です。 プライベートアクセスでファイルを作って、Heroku インポート用のテンポラリー認証 URL を作ります。 その URL をカット&ペーストして以下のコマンドを使います:

:::term
$ heroku pgbackups:restore DATABASE 'http://s3.amazonaws.com/.....mydb.dump?authparameters'

バックアップ経由のエクスポート

データベースを Heroku Postgres サービスから外に移動させたい場合、バックアップを取ってから、curlwget もしくはブラウザなどのツールを使ってダウンロードします。例を以下に示します:

:::term
$ curl -o latest.dump `heroku pgbackups:url`

後で書きますが、バックアップ URL は 10 分間で失効します。

This will usually generate some warnings, due to differences between your Heroku database and a local database, but they are generally safe to ignore.

取得したダンプは 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
Clone this wiki locally