Heroku Cli での Heroku Postgres バックアップ運用

Heroku Postgres のバックアップ・リストア運用についてまとめました。

バックアップ

公式のドキュメントは以下を参照

Heroku PGBackups | Heroku Dev Center

Importing and Exporting Heroku Postgres Databases with PG Backups | Heroku Dev Center

バックアップの状態確認

heroku pg:backups で確認可能です。

 heroku pg:backups --app sushi
=== Backups
ID    Backup Time                Status                              Size    Database
----  -------------------------  ----------------------------------  ------  --------
b013  2015-03-18 19:03:16 +0000  Running                                     IVORY
b011  2015-02-18 17:55:38 +0000  Finished 2015-02-18 17:55:39 +0000  1.9GB   IVORY
b010  2015-02-17 19:14:43 +0000  Finished 2015-02-17 19:14:48 +0000  1.9GB   IVORY
b004  2015-02-11 19:00:55 +0000  Finished 2015-02-17 19:14:48 +0000  1.9GB   IVORY

==== Restores
ID    Restore Time               Status                              Size    Database
----  -------------------------  ----------------------------------  ------  --------
r002  2015-03-16 17:33:19 +0000  Finished 2015-03-16 17:33:19 +0000  1.9GB   IVORY
r001  2015-03-15 12:13:44 +0000  Failed 2015-03-15 12:13:47 +0000    1.7GB   IVORY

スケジュールの状態確認は heroku pg:backups:schedules で実施できます。

$ heroku pg:backups:schedules --app sushi
Current backup schedules:
RED: daily at 2:00 (America/Los_Angeles)

バックアップの設定は pg:backups:schedule コマンドで以下のように設定可能です。

$ heroku pg:backups:schedule DATABASE_URL --at '02:00 Asia/Tokyo' --app sushi

手動でのバックアップを作成する場合 pg:backups:capture コマンドを使用します。

$ heroku pg:backups:capture --app sushi

バックアップのリストア

pg:backups:restore コマンドでリストアが可能です。

$ heroku pg:backups:restore b101 DATABASE_URL --app sushi

例えば本番バックアップ sushi::b101 を他のアプリに移す場合は以下のようなコマンドを実行します。

$ heroku pg:backups:restore sushi::b101 DATABASE_URL --app sushi-staging

データベースのコピー

pg:copy でDBの複製を行うことも可能です。

$ heroku pg:copy COBALT GREEN --app sushi

バックアップのリストア同様、アプリケーションをまたいでのコピーも以下のような形で実行可能です。

heroku pg:copy sushi::ORANGE GREEN --app sushi-staging

データベースのインポート

ローカル の Postgres で作成したデータを Heroku 上にインポートする際には、 pg_dump で作成したダンプファイルを URLでアクセス可能な場所に公開する必要があります。

公開URLを用いて pg:backups:restore コマンドを利用すれば以下のような形で DBのインポートを実現可能です。

$ heroku pg:backups:restore 'https://s3.amazonaws.com/me/items/3H0q/mydb.dump' DATABASE_URL

データベースのエクスポート

Heroku 上の Postgres の出力には、 capturedownload コマンドの利用が便利です。

$ heroku pg:backups:capture
$ heroku pg:backups:download

上記のコマンドを実行すると手元に latest.dump ファイルが作成されます。作成された dump ファイルは pg_restore を利用して以下のようにローカルのDBに取り込むことが可能です。

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です