🐳
Dockerで構築したPostgreSQLデータベースのバックアップとリストア手順
はじめに
Next.jsを使って個人開発をしています。
Dockerで構築したPostgreSQLのデータベースをバックアップ・リストアする方法を調べました。
バックアップ手順
1. コンテナ名の確認
まず、バックアップを取りたいPostgreSQLデータベースのコンテナ名を確認します。
docker ps
2. バックアップの実行
pg_dumpを使用してデータベースのバックアップを作成します。docker execでコンテナ内のpg_dump を実行しています。
docker exec <コンテナ名> pg_dump --clean --if-exists -U <DBユーザー名> <DB名> > backup.sql
-
<コンテナ名>
: Dockerのコンテナ名 -
--clean
: データベース内のテーブルが削除されてからリストアが実行 -
--if-exists
: DROP文にIF EXISTSが追加され、削除対象のテーブルが存在しない場合にDROP文が実行されなくなる。--clean
が指定されていることで有効になる -
-U <DBユーザー名>
: PostgreSQLのユーザー名 -
> backup.sql
: ファイルをホストマシン上に保存
リストア手順
1. リストアの実行
psqlを使用して、バックアップファイルからデータをリストアします。
cat backup.sql | docker exec -i <コンテナ名> psql -U <DBユーザー名> -d <新しいDB名>
-
-i
: 標準入力(stdin)を有効にする(ファイルの中身を渡すため) -
-d <新しいDB名>
: リストア先のDB名
ボリュームを利用したデータ永続化
コンテナが削除されてもデータが保持されるようにする場合は、docker-compose.yamlに以下を追記します。
docker-compose.yaml
services:
db:
...
volumes:
# ボリューム名:コンテナのマウント先ディレクトリ
- postgres-data:/var/lib/postgresql/data
volumes:
# postgres-dataというボリュームを作成
postgres-data:
これで、docker compose up --buildコマンドを実行するとpostgres-dataボリュームを持ったdbコンテナが作成できます。
おわりに
-
バックアップ :
pg_dump
を使用して、PostgreSQLのデータをSQLテキスト形式でバックアップする。 -
リストア :
psql
を使用して、バックアップを指定したデータベースにリストアする。
この方法で、ローカル環境で立ち上げたDocker上のPostgreSQLデータベースをバックアップし、リストアすることができます。
Discussion