目次
0. Introduction
-
対象となる読者
- Heroku Postgres の SQL データベースのバックアップやリストアをしたい方
-
本記事の価値
- Heroku Postgres の SQL データベースのバックアップ方法とリストア方法を確認できます。
-
前提
- Heroku でアプリケーション開発をしている方、運用している方
- Heroku アプリケーションにて、Heroku Postgres の SQL データベースを利用している方
1. 自動バックアップ
Heroku には定期的にバックアップを自動取得してくれる便利なサービスがあります。業務アプリ等を運用している場合は、稼働時間を避けてスケジュールを設定してください。
# 現在のバックアップの状況を確認。設定がない場合
heroku pg:backups:schedules -a #{app_name}
▸ No backup schedules found on ⬢ #{app_name}
▸ Use heroku pg:backups:schedule to set one up
# スケジュールを設定
heroku pg:backups:schedule HEROKU_POSTGRESQL_BLUE_URL --at 06:00 -a #{app_name}
※ DATABASE_URL --at '04:00 Asia/Tokyo' -a #{app_name}
※ と設定は出来たが、うまくバックアップしてくれなかった(設定も消えた)こともあった。
# スケジュール確認
heroku pg:backups:schedules -a #{app_name}
=== Backup Schedules
DATABASE_URL: daily at 4:00 Asia/Tokyo
# バックアップ確認
heroku pg:backups -a #{app_name}
2. 手動バックアップ
不定期に手動でバックアップをとることもできます。
heroku pg:backups capture -a #{app_name}
3. バックアップをダウンロード(CUI)
ここでは、“b000"というバックアップをダウンロードする例を示します。
heroku pg:backups:download b000 -a #{app_name}
4. バックアップをダウンロード(GUI)
Heroku の管理コンソール(Web)へログインした後、「Resources」→「Durability」→「ダウンロードボタン」(一覧表示されている最新のものを選択)により、バックアップをダウンロードすることができます。Heroku PostgreSQL のバックアップには、pg_dump(テキスト形式)とバイナリ形式のものとの 2 種類があります。

バックアップのダウンロード画面
5. バックアップのリストア
本番環境(ここでは"app_name_production"とする)からステージング環境(ここでは"app_name_staging"とする)にリストアする場合は、以下のようになる。
# 1. バックアップ取得
heroku pg:backups:capture -a #{app_name_staging}
# 2. 検証用アプリケーション側にリストア
heroku pg:backups:restore `heroku pg:backups public-url -a #{app_name_production}` -a #{app_name_staging}
本番環境のバックアップをステージング環境の特定の DB にリストア
本番環境のバックアップ(ここでは"a314"とする)をステージング環境の DB(ここでは DB の URL を"HEROKU_POSTGRESQL_YELLOW_URL"とする)にリストアする。
heroku pg:backups:restore #{app_name_production}::a314 HEROKU_POSTGRESQL_YELLOW_URL -a #{app_name_staging}
DB を切り替えたい場合
Heroku アプリケーションが、DATABASE_URL で DB にアクセスしており、HEROKU_POSTGRESQL_BLUE_URL と HEROKU_POSTGRESQL_YELLOW_URL がある場合、BLUE から YELLOW に変更するためには環境変数を変更します。
DATABASE_URL: postgres://XXXXX
HEROKU_POSTGRESQL_BLUE_URL: postgres://XXXXX
HEROKU_POSTGRESQL_YELLOW_URL: postgres://YYYYY
heroku config:set DATABASE_URL=postgres://YYYYY