0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HerokuのPGBackupでバックアップとリストアを行う

Last updated at Posted at 2022-04-19

環境

Ubuntu20.4

参考

PGBackupの公式サイト
https://devcenter.heroku.com/articles/heroku-postgres-backups

はじめに

HerokuでPGbackupsを使って、PostgreSQLのデータのバックアップ/リストアを行うには、2通りのやり方があります。1つは、Herokuのサーバー上にバックアップダンプを作成して、サーバー上にあるバックアップダンプからリストアする方法。もう1つは、サーバー上に作成したバックアップダンプを、自分のローカル環境にダウンロードして、ローカル環境にあるバックアップダンプからリストアする方法です。

Herokuのサーバー上にバックアップダンプを作る場合は、スケジューリングして、定期的にバックアップダンプを作成することができるが、ローカル環境にダウンロードする場合は、スケジューリングができず、手動で行うしか方法はないようです。ローカル環境にバックアップダンプがあれば、Railsの開発環境やテスト環境にリストアして、本番環境と全く同じデータの状態を作り出すことができます。「開発環境では正常に動作しているのに、本番環境だとエラーになるぅ!」といった場合、本番データを使ってデバックしてみたくなるときもあるはずです。

ただし、PGbackupsを使うと、データベース単位で、全テーブルに対し、一括でバックアップダンプを作成し、全テーブルを一括でリストアします。テーブル単位でバックアップ/リストアしたい場合は、PGbackupを使わず、PostgreSQLのコマンドを使って行うことになるでしょう。

Herokuのサーバー上にバックアップダンプを作成して、サーバー上にあるバックアップダンプからリストアする方法は、以前、こちらに記事を書いたことがあります。
https://qiita.com/pyon_kiti_jp/items/fa32fb5a5bc8d49ce40b

今回は、Herokuのサーバー上に作成したバックアップダンプを、ローカル環境ダウンロードして、ローカル環境からHerokuのリストアしてみます。

では、やってみましょう!

やったこと

Herokuにログインします。

$heroku login --interactive

ログインできていることを確認します。

$heroku whoami

バックアップを行う対象のアプリ名を確認します。

$heroku apps

バックアップダンプの一覧を表示して、ダウンロードする対象のバックアップダンプのIDを確認します。

$heroku pg:backups --app アプリ名

バックアップダンプをローカル環境にダウンロードする方法には2つあります。1つ目の方法は、IDとアプリ名を指定してダウンロードする方法です。次のコマンドを実行すると、ダウンロード元のURLが自動生成されます。生成されたURLをコピーして、ブラウザで指定したURLを表示すると、ダンプファイルがダウンロードされます。この方法だと、なぜだが、dumpの拡張子が付いていません。また、長いダンプファイル名が付いて作成されます。リストアする時は、入力しやすい適当なファイル名にリネームして、dumpの拡張子も付けて、リストアした方がベターです。

URLの有効期限は60分です。バックアップダンプを作成してから、60分以内にダウンロードを行ってください。

$heroku pg:backups:url ID --app アプリ名

このコマンドでも、ダンプファイルをローカル環境にダウンロードすることができます。上記のやり方よりシンプルな方法です。latest.dumpという名前で、カーソルのあるディレクトリにダウンロードされます。IDの指定は不要です。ダンプファイルのタイムスタンプを判断して、最新のバックアップダンプをダウンロードします。IDを指定して、過去履歴のダンプファイルをダウンロードしたい場合は、上記のやり方で行うことになります。

$heroku pg:backups:download

ローカル環境にあるバックアップダンプをHerokuにリストアするときのコマンドです。localhostmyusermydbは、各自の環境に合わせて設定します。設定内容を確認する方法は、ブラウザからHerokuのサイトを表示して、Datastores-アプリ名-Settings-Database Credentialsを表示すると、確認することができます。

無題.png

下記のコマンドでは、リストアするダンプファイルは、カーソルがあるディレクトリに、latest.dumpという名前で保存されていることを前提にして記述しています。latestという名前にリネームしないとリストアできないということはありません。ファイル名は任意です。(dump拡張子を省略しても大丈夫ないかは確認していません。悪しからず。)

ローカル環境のPostgreSQL(開発環境、もしくは、テスト環境)にバックアップダンプをリストアする場合は、Railsを使って開発している場合に限定して書くが、database.ymlに記述している、データベース名、ユーザー名、パスワードを指定すると、ローカル環境に、リストアされます。

database.yml
development:
	database: xxxxx_development
test:
	database: xxxxx_test
$pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump

コマンドを実行するとパスワードを聞かれます。HerokuのPostgreSQLに接続するためのパスワードです。設定情報を見るとやたら長いパスワードが設定されています。1文字づつ手入力しなくてもコピペで対応できます。コピペしたパスワードは画面表示されませんが、ペーストしてEnterを押すと、リストアが走ります。

Herokuからログアウトします。

$heroku logout
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?