Skip to content
toydev edited this page Aug 31, 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.

バックアップからの復旧

You can restore a backup into a database. This is a destructive operation: the restore operation will drop existing data and replace it with the contents of the backup. The contents of the database prior to a restore will not be recoverable. To restore backup b251 into the database at 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

To restore that backup to the database at HEROKU_POSTGRESQL_PINK_URL instead, the operation would be:

:::term
$ heroku pgbackups:restore HEROKU_POSTGRESQL_PINK b251                                                                                                                        

HEROKU_POSTGRESQL_PINK  <---restore---  b251
                                        HEROKU_POSTGRESQL_BLACK
                                        2012/02/24 16:08.02
                                        5.3KB

Importing from a backup

If you have an existing PostgreSQL database you'd like to export from elsewhere, dump it in compressed format using the open source pg_dump tool:

:::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.

Upload it somewhere with an HTTP accessible URL. We recommend using Amazon S3 and S3Fox. Create the file with private access and create a temporary authorized URL for the Heroku import. Then cut and paste that URL into your restore command:

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

Exporting via a backup

If you'd like to move your database out of the Heroku Postgres service, take a backup and then download it using a variety of tools such as curl, wget, or a web browser. For example:

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

Note that the backup URLs will expire 10 minutes after they are issued.

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

You can then load this dump into your local database using the pg_restore tool, just as Heroku does when you initiate a restore:

:::term
$ pg_restore --verbose --clean --no-acl --no-owner -h myhost -U myuser -d mydb latest.dump

Transfers

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.

Large backups

PGBackups splits very large backups into multiple files. When this happens, heroku pgbackups:url will display two or more separate files窶俳ne for each part.

:::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"

These files were created with the unix split utility, and must be joined together before use.

:::term
$ cat a292.dump.aa a292.dump.ab > a292.dump
Clone this wiki locally