Herokuのバックアップとリストア

Heroku Postgres の SQL データベースのバックアップ方法とリストア方法を確認できます。

images/cards/Heroku_logo.svg.webp

目次

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

参考

関連記事