pg_dumpコマンドとDockerボリュームで簡単バックアップ!PostgreSQLコンテナからダンプを生成
DockerコンテナからPostgreSQLダンプを生成する方法
pg_dumpコマンドを使用する
これは、最も一般的でシンプルな方法です。以下のコマンドを実行することで、コンテナ内のデータベースからダンプファイルを生成することができます。
docker exec -it <コンテナID> pg_dump -U <ユーザー名> -d <データベース名> > <ダンプファイル名>
<コンテナID>
: ダンプを生成するPostgreSQLコンテナのID<ユーザー名>
: PostgreSQLデータベースにログインするためのユーザー名<データベース名>
: ダンプを生成するデータベース名<ダンプファイル名>
: 生成されるダンプファイルの名前
例:
docker exec -it 745f12345678 pg_dump -U postgres -d mydatabase > mydatabase.dump
このコマンドを実行すると、mydatabase.dump
という名前のダンプファイルが作成されます。
Dockerボリュームを使用すると、コンテナ内のデータをホストマシンに永続的に保存することができます。この方法を使用すれば、pg_dump
コマンドを実行せずにダンプファイルを生成することができます。
以下の手順で、Dockerボリュームを使用してPostgreSQLダンプを生成することができます。
- PostgreSQLコンテナを起動時に、データディレクトリをDockerボリュームとしてマウントします。
- ホストマシン上で、Dockerボリュームからダンプファイルをコピーします。
docker run -d --name my-postgres -p 5432:5432 -v postgresql-data:/var/lib/postgresql/data postgres:14
上記のコマンドを実行すると、postgresql-data
という名前のDockerボリュームが作成され、コンテナ内の/var/lib/postgresql/data
ディレクトリにマウントされます。
このボリュームからダンプファイルを生成するには、以下のコマンドを実行します。
docker cp my-postgres:/var/lib/postgresql/data/mydatabase.dump mydatabase.dump
補足事項
- 上記のコマンドを実行する前に、必ずPostgreSQLコンテナが起動していることを確認してください。
- ダンプファイルは、圧縮して保存することができます。圧縮するには、
pg_dump
コマンドのオプションに-c
を指定します。 - 特定のテーブルのみをダンプするには、
-t
オプションを使用します。
PostgreSQLダンプ生成用サンプルコード
pg_dumpコマンドを使用する
#!/bin/bash
# 環境変数から必要な情報取得
CONTAINER_ID=${1:-"745f12345678"} # デフォルトコンテナID
USERNAME=${2:-"postgres"} # デフォルトユーザー名
DATABASE_NAME=${3:-"mydb"} # デフォルトデータベース名
DUMP_FILE_NAME=${4:-"mydb.dump"} # デフォルトダンプファイル名
# コンテナ内に移動
docker exec -it $CONTAINER_ID bash
# ダンプ生成
pg_dump -U $USERNAME -d $DATABASE_NAME > $DUMP_FILE_NAME
使用方法:
- 上記コードを
dump.sh
などの名前で保存します。 - 以下のコマンドを実行して、ダンプファイルを生成します。
bash dump.sh <コンテナID> <ユーザー名> <データベース名> <ダンプファイル名>
bash dump.sh 745f12345678 postgres mydb mydatabase.dump
Dockerボリュームを使用する
#!/bin/bash
# 環境変数から必要な情報取得
CONTAINER_ID=${1:-"745f12345678"} # デフォルトコンテナID
DUMP_FILE_NAME=${2:-"mydb.dump"} # デフォルトダンプファイル名
# ホストマシンにダンプファイルをコピー
docker cp $CONTAINER_ID:/var/lib/postgresql/data/$DUMP_FILE_NAME $DUMP_FILE_NAME
bash copy_dump.sh <コンテナID> <ダンプファイル名>
bash copy_dump.sh 745f12345678 mydatabase.dump
補足
- 上記のサンプルコードは、あくまでも基本的な例です。必要に応じて、オプションなどを追加して使用してください。
- 生成されたダンプファイルは、安全な場所に保存してください。
DockerコンテナからPostgreSQLダンプを生成するその他の方法
Docker Composeを使用すると、複数のコンテナをまとめて定義して起動することができます。この機能を利用して、PostgreSQLコンテナとダンプファイルを生成するコンテナを一緒に起動し、自動的にダンプファイルを生成することができます。
version: "3.9"
services:
db:
image: postgres:14
volumes:
- postgresql-data:/var/lib/postgresql/data
dump:
image: busybox
volumes:
- postgresql-data:/var/lib/postgresql/data
- dump:/dump
depends_on:
- db
entrypoint: ["sh", "-c", "pg_dump -U postgres -d mydatabase > /dump/mydb.dump"]
上記の設定で docker-compose up
コマンドを実行すると、db
コンテナと dump
コンテナが起動し、/dump/mydb.dump
という名前のダンプファイルが生成されます。
バックアップツールを使用する
Dockerコンテナのバックアップを専門とするツールを使用することもできます。これらのツールは、PostgreSQLデータベースを含むコンテナのバックアップを自動的にスケジュールして、ダンプファイルを生成することができます。
これらのツールは、商用版とオープンソース版が用意されています。
クラウドサービスを使用する
Amazon RDSやGoogle Cloud SQLなどのクラウドサービスを使用している場合は、サービス側で提供されるバックアップ機能を利用して、PostgreSQLデータベースのダンプファイルを生成することができます。
注意事項
上記の方法を使用する場合は、それぞれの方法のドキュメントをよく読んでから使用してください。また、ダンプファイルを生成する前に、必ずPostgreSQLコンテナが起動していることを確認してください。
DockerコンテナからPostgreSQLダンプを生成するには、様々な方法があります。自分に合った方法を選択して、データベースのバックアップを定期的に取得するようにしましょう。
postgresql docker containers