🐳

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