xengineer’s diary

結果、メモ的な内容になっています。

herokuのpostgres dataのbackup/restore

今回は、herokuのpostgresからデータをbackup(export)して、

違うpostgresインスタンスにデータをrestore(import)したので、そのメモ。

まず、色んなとこに出てる、heroku pgbackups がなくなっている!

heroku pg:backupsを使えとのことでした。

ざっくりフロー

  • backupする
  • restoreする
  • 確認する

です。

backupする

バックアップ取る側のアプリ名を、<backup_app_name>としてます。 リストアする側は、<restore_app_name>ね。

$ heroku pg:backups capture --app <backup_app_name>
Use Ctrl-C at any time to stop monitoring progress; the backup
will continue running. Use heroku pg:backups info to check progress.
Stop a running backup with heroku pg:backups cancel.

HEROKU_POSTGRESQL_SILVER ---backup---> b002

Backup completed

これで、バックアップ完了。

heroku上でDBのバックアップを確認すると、

f:id:xengineer:20151106184013p:plain

こんな感じにちゃんと取れてるのが見える。

b003があるのは、二回やってみたから。

restoreする

次は、リストア。

下記コマンドを実行する。

pgbackups時代に存在した、pgbackup urlはなくなって、pg:backups public-urlになったらしい。

DATABASE_URLは、たぶん、--app <restore_app_name>でもいけると思う。

$ heroku pg:backups restore `heroku pg:backups public-url --app <backup_app_name>` DATABASE_URL

 !    WARNING: Destructive Action
 !    This command will affect the app: cedar-14-app-root4
 !    To proceed, type "cedar-14-app-root4" or re-run this command with --confirm cedar-14-app-root4

> cedar-14-app-root4
Use Ctrl-C at any time to stop monitoring progress; the backup
will continue restoring. Use heroku pg:backups to check progress.
Stop a running restore with heroku pg:backups cancel.

r001 ---restore---> DATABASE
Restore completed

これで無事データ移行完了!

確認する

一応ちゃんと確認したかったので、

$ heroku pg:psql
$ heroku pg:psql --app <restore_app_name>
---> Connecting to HEROKU_POSTGRESQL_SILVER_URL (DATABASE_URL)

psql (9.3.5, server 9.3.9)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
cravitee::SILVER=> \z
                                       Access privileges
 Schema |            Name             |   Type   | Access privileges | Column access privileges
--------+-----------------------------+----------+-------------------+--------------------------
 public | images                      | table    |                   |
....
....
中略
....
....
 public | users                       | table    |                   |
(27 rows)

これでテーブル確認できたので、移行完了!

終わり。