0
0

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 1 year has passed since last update.

Rails & PostgreSQL: 本番環境のバックアップとローカルでの復元手順

Last updated at Posted at 2023-10-07

はじめに

個人で運営しているRailsアプリケーションでDBにPostgreSQLを使用しています。
データ数が多くなってきたため、本番と同等のデータで開発をしたく本記事では、本番環境のバックアップとローカル環境での復元方法の手順を記述しています。

概要図

1 本番環境のサーバーでバックアップコマンドを使用してdumpファイルを取得します。
2 dumpファイルをS3へアップロードします。
3 ローカル環境にてS3バケットからdumpファイルをダウンロードします。
4 ダウンロードしたdumpファイルをローカル環境のDBへリストアします。

DBバックアップ・リストア手順.png

本番環境でのバックアップ

下記スクリプトを用意して、本番環境のサーバーにて実行します。

backup.sh
#!/bin/bash
source ~/.bashrc
# スクリプトのディレクトリを取得
script_dir=$(dirname "$0")

# 「Backup」ディレクトリを作成
backup_dir="$script_dir/backup"
mkdir -p "$backup_dir"

# バックアップファイルの保存先とファイル名を指定
DATE=$(date +%Y%m%d_%H%M%S)
backup_file="$backup_dir/db_schema_${DATE}.dump"

# データベース接続情報を指定
host="$DB_HOST"
port="$PORT"
username="$DATABASE_USERNAME"
database="$DATABASE_NAME"
password="$DATABASE_PASSWORD"

# pg_dumpコマンドを実行してバックアップを作成
PGPASSWORD="$password" pg_dump --file "$backup_file" --host "$host" --port "$port" --username "$username"   --verbose --format=c --blobs --no-owner --no-privileges --inserts --encoding "UTF8" --schema "public" "$database"

# S3へアップロード
sudo aws s3 cp "$backup_file" s3://[サービス名]/production/

ローカル環境での復元

restore.shell
#!/bin/bash

# S3バケット名とプレフィックス(ディレクトリパス)を指定
bucket_name=[バケット名]
prefix="production/"

# S3バケット内のオブジェクト一覧を取得し、最新のオブジェクトを検索
latest_object=$(aws s3api list-objects-v2 --profile [プロファイル名] --bucket "$bucket_name" --prefix "$prefix" --query "sort_by(Contents, &LastModified) | [-1]" --output json)

# 最新のオブジェクトからファイル名を取得
latest_object_key=$(echo "$latest_object" | jq -r '.Key')

# ダウンロードするファイルの名前を動的に設定(ここではオブジェクトキーの末尾を使用)
backup_file="downloaded_files/$(basename "$latest_object_key")"

# S3からファイルをダウンロード
aws s3 cp "s3://$bucket_name/$latest_object_key" "$backup_file" --profile [プロファイル名]


# データベース接続情報を指定
host="db"
port="5432"
username=[ユーザー名]
password=[パスワード]
database=[サービス名]

# pg_restoreコマンドを実行してバックアップを作成
PGPASSWORD="$password" pg_restore --host "$host" --port "$port" --username "$username" --dbname "$database" --no-owner --no-privileges --clean --verbose --schema "public" "$backup_file"

注意点

  • 環境変数の取り扱い: 上記のスクリプトは環境変数を利用しています。これらの変数が正しく設定されていることを確認してください。また、パスワードなどの機密情報は公開しないようにしましょう。

  • sudoの使用: sudoを使用してS3にファイルをアップロードしていますが、必要に応じて適切な権限を持つユーザーで操作することを推奨します。

  • データの取り扱い: 本番環境のデータは機密情報を含む場合があります。取り扱いには十分注意し、不必要に外部に公開しないよう心がけてください。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?