Herokuのデータベースをバックアップ・リストアする方法
2018/05/29
こんにちは、okutani(@okutani_t)です。本記事では、Herokuで利用しているDBのデータをバックアップ・リストアする方法について解説しています。
今回は、Heroku公式が対応している「Heroku Postgres」を対象にしています。
本記事では、「バックアップ方法」「バックアップデータのダウンロード方法」「リストア方法」について解説していきます。
なお、Herokuのかんたんな使い方は以下のページを参考にしてください。
それでは、HerokuのDBをバックアップする方法から見ていきましょう。
参考Heroku PGBackups | Heroku Dev Center
スポンサーリンク
もくじ
バックアップ方法
バックアップの方法には「手動バックアップ」「自動バックアップ」があるので、それぞれ解説していきます。
ターミナル上で手動バックアップ
手動バックアップ方法は以下の手順でおこないます。
$ heroku pg:backups:capture -a アプリ名
上記コマンドで、Heroku上にバックアップを記録してくれます。
バックアップの一覧をターミナルで確認する場合は以下。
$ heroku pg:backups -a アプリ名
Backups
ID Created at Status Size Database
──── ───────────────────────── ─────────────────────────────────── ─────── ────────
b001 2017-09-17 07:08:48 +0000 Completed 2017-09-17 07:08:51 +0000 44.46kB DATABASE
=== Restores
No restores found. Use heroku pg:backups:restore to restore a backup
=== Copies
No copies found. Use heroku pg:copy to copy a database to another
「bxxx」という形式でバックアップがおこなえていることが確認できました。
バックアップの詳細を見たい場合は、以下のコマンドで調べることができます。「bxxx」は対応するIDに置き換えてください。
$ heroku pg:backups:info bxxx -a アプリ名
バックアップをおこなった日付やバックアップ時のlogなどが確認できました。
バックアップをキャンセルしたい場合は、以下のコマンドを利用します。
$ heroku pg:backups:cancel -a アプリ名
キャンセルコマンドの利用頻度は低いかと思いますが、覚えておくと良いですね。
Web管理画面上で手動バックアップ
Heroku管理画面上でも手動バックアップをおこなうことができます。
「Heroku Postgres」→「Durability」→「Create Manual Backup」をクリックすればOK。
手動バックアップがおこなえることが確認できました。
自動(定期)バックアップ
次に自動(定期)バックアップの方法について解説します。
ターミナル上で以下のコマンドを実行してみてください。
$ heroku pg:backups schedule DATABASE_URL --at '02:00 Asia/Tokyo' -a アプリ名
「DATABASE_URL」にどのような値が設定されているか確認したい場合、以下のコマンドで表示することができます。
$ heroku config -a アプリ名 | grep URL
DATABASE_URL: postgres://baixfsksrbngzk:xxxxx
HEROKU_POSTGRESQL_OLIVE_URL: postgres://baixfsksrbngzk:xxxxx
私の環境では「HEROKU_POSTGRESQL_OLIVE_URL」と「DATABASE_URL」が同じ値が設定されていたので、そのまま「DATABASE_URL」を利用しました。
スケジュールの確認は以下。
$ heroku pg:backups:schedules -a アプリ名
=== Backup Schedules
DATABASE_URL: daily at 2:00 Asia/Tokyo
設定した定期実行の削除は以下のコマンド。
$ heroku pg:backups unschedule DATABASE_URL -a アプリ名
Unscheduling DATABASE_URL daily backups... done
これで自由に自動バックアップを設定することができます。
バックアップデータのダウンロード
バックアップデータのダウンロード方法について解説していきます。
ターミナルからダウンロード
手元のPCにバックアップデータをダウンロードしたい場合、以下のコマンドを実行します。
$ heroku pg:backups:download bxxx -a アプリ名
「bxxx」の箇所は実際のバックアップデータのIDを入力してください。
「latest.dump」という名前のバックアップデータがダウンロードできました。
Web管理画面上からダウンロード
Web管理画面上からもDBのデータをダウンロードすることができます。
「Heroku Postgres」→「Durability」→「Download」をクリック。
これで手元のPCにバックアップデータをダウンロードすることができます。
リストア方法
リストア方法について見ていきます。
本番環境へリストア
リストアをおこなうことで、バックアップをおこなった時点の状態に戻すことができます。
$ heroku pg:backups restore bxxx -a アプリ名
上記のコマンドを入力すると、以下の文が表示されます。アプリ名を入力してEnterを押せば実行されます。
▸ WARNING: Destructive Action
▸ This command will affect the app アプリ名
▸ To proceed, type アプリ名 or re-run this command with --confirm
▸ アプリ名
> (アプリ名を入力してEnter)
「--confirm
」オプションをつけて実行しても大丈夫なようです。
これでかんたんに本番環境にリストアすることができました。
ローカル環境へリストア
取得したバックアップデータを、自分のローカル環境に反映させる方法について解説します。
以下のコマンドを実行。「localhost」「myuser」「mydb」はご自身のPostgreSQLの環境に合わせて変更してください。「latest.dump」はダウンロードしたバックアップデータのファイル名です。
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump
これでローカル環境にバックアップデータを反映させることができました。
※もし、「pg_restore: [archiver] unsupported version (1.13) in file header」とエラーが出た場合は、PostgreSQLを最新版に更新すればバックアップが正常におこなわれます
バックアップ履歴の保持数について
バックアップを残せる数は、プランによって決まっています。執筆現在のバックアップ保持数は以下のとおりです。
Hobby-Dev | 2 |
---|---|
Hobby-Basic | 5 |
Standard-* | 25 |
Premium-*, Enterprise | 50 |
参考Heroku PGBackups | Heroku Dev Center
まとめ
Herokuで利用しているPostgreSQLでのバックアップ、リストア方法について解説しました。
ローカル環境に本番データを入れたい場合にもよく活用するかと思うので、覚えておくとよいですね。
Herokuユーザーの参考になれば幸いです。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク