Madogiwa Blog

主に技術系の学習メモに使っていきます。

RubyonRails:herokuのDBを開発環境(ローカル)へリストア(復元)する。

はじめに

herokuで運営しているサービス(https://moook.herokuapp.com/)の本番環境のデータを開発環境に反映させたときの手順をメモφ(..)

前提

環境

今回の手順を行った環境は下記の通りです。

title memo
Production環境 heroku
Rails ver 5.1.2
DB postgresql

手順

herokuでDBのバックアップを実行

herokuにログインした状態で下記コマンドを実行します。

rem バックアップ取得コマンド
$ heroku pg:backups:capture

Starting backup of postgresql-asymmetrical-20043... done

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.

Backing up DATABASE to b002... done

最後の行にある'b002'という文言が、バックアップの目印になります。

バックアップファイルをダウンロードする。

rem 先程取得したバックアップのURLを取得
$ heroku pg:backups:url b002

https://xfrtu.s3.amazonaws.com/6026beb4-c189-4732-b78b...

取得したURLにブラウザからアクセスするとバックアップファイルをダウンロード出来ます。

バックアップを開発環境のDBにリストア

下記コマンドを使って開発環境に本番環境DBのバックアップをリストアします。
下記のような実行結果になればOK。

$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U user_name -d db_name backup_file_path
省略
pg_restore: setting owner and privileges for INDEX "public.taggings_idx"
pg_restore: setting owner and privileges for INDEX "public.taggings_idy"
pg_restore: setting owner and privileges for FK CONSTRAINT "public.favorites fk_rails_72d9d9e5bf"
pg_restore: setting owner and privileges for FK CONSTRAINT "public.favorites fk_rails_d15744e438"
title memo
user_name DBのユーザー名※1
db_name 対象のDB名※2
backup_file_path バックアップファイルのパス

※1:DBのユーザー名の確認方法 rails dbコマンドを実行し、posgresqlから下記コマンドを実行して確認

$ rails db
$ db_name=# SELECT usename FROM pg_user;
 usename
---------
 UserName
(1 row)

※2:DB名の確認方法 database.ymldatabaseの項目を確認

database.yml

development:
  <<: *default
  database: appname_development

参考

www.workabroad.jp

以上