データを守る!DockerでPostgreSQLデータベースのバックアップと復元を行う7つの方法
前提条件
- Dockerがインストールされていること
- PostgreSQLデータベースがDockerコンテナで実行されていること
バックアップ方法
DockerでPostgreSQLデータベースのバックアップを取る方法はいくつかありますが、ここでは代表的な2つの方法を紹介します。
pg_dump
コマンドは、PostgreSQLデータベースのバックアップを取るための公式ツールです。このコマンドを使うには、以下の手順を実行します。
- PostgreSQLコンテナに接続します。
docker exec -it <コンテナ名> bash
pg_dump
コマンドを実行して、データベースのバックアップを取ります。
pg_dump -U postgres -d <データベース名> > backup.dump
このコマンドを実行すると、<データベース名>.dump
という名前のバックアップファイルが作成されます。
Dockerボリュームを使うと、コンテナ内のデータをホストマシンに保存することができます。この方法を使うには、以下の手順を実行します。
- Docker Composeファイルに、データベースのデータを保存するためのボリュームを定義します。
volumes:
- db-data:/var/lib/postgresql/data
docker-compose up
コマンドを実行して、コンテナを起動します。
docker-compose up
- ホストマシンから、ボリュームに保存されているデータベースファイルをコピーします。
cp /var/lib/postgresql/data/backup.dump ./
この方法を使うと、コンテナを停止することなく、データベースのバックアップを取ることができます。
復元方法
DockerでPostgreSQLデータベースを復元するには、以下の手順を実行します。
docker-compose stop
- バックアップファイルからデータベースを復元します。
pg_restore -U postgres -d <データベース名> < backup.dump
docker-compose up
これらの手順を実行することで、バックアップファイルからデータベースを復元することができます。
- DockerでPostgreSQLデータベースを運用する場合、定期的にバックアップを取ることを習慣化しましょう。
- 万が一データベースが破損した場合、バックアップファイルから復元することで、データを失うことなく復旧することができます。
バックアップ
# コンテナに接続する
docker exec -it <コンテナ名> bash
# pg_dumpコマンドを使ってデータベースのバックアップを取る
pg_dump -U postgres -d <データベース名> > backup.dump
このコードは、pg_dump
コマンドを使って、<データベース名>
という名前のデータベースのバックアップをbackup.dump
というファイルに保存します。
復元
# コンテナを停止する
docker-compose stop
# バックアップファイルからデータベースを復元する
pg_restore -U postgres -d <データベース名> < backup.dump
# コンテナを起動する
docker-compose up
このコードは、pg_restore
コマンドを使って、backup.dump
というファイルから<データベース名>
という名前のデータベースを復元します。
【SQL超入門講座】11.データベースのバックアップと復元する方法 - YouTube
この動画では、Pythonを使ってDockerで構築されたPostgreSQLデータベースのバックアップと復元を行う方法を解説しています。
これらのリソースを参考にして、ご自身の環境に合わせてサンプルコードをカスタマイズしてください。
Dockerで構築されたPostgreSQLデータベースのバックアップと復元を行うその他の方法
- pgBackRestをインストールします。
pip install pgbackrest
pgbackrest backup --stanza=my_database
pgbackrest restore --stanza=my_database
WALバックアップは、PostgreSQLデータベースのトランザクションログをバックアップする方法です。WALバックアップを使うには、以下の手順を実行します。
docker exec -it <コンテナ名> bash
- WALバックアップを取るためのコマンドを実行します。
pg_basebackup -D /var/lib/postgresql/data/backup -X stream
pg_restore -D /var/lib/postgresql/data/ -V /var/lib/postgresql/data/backup
Dockerコンテナのスナップショットを使うと、コンテナの状態を特定の時点に保存することができます。スナップショットを使うには、以下の手順を実行します。
- Dockerコンテナのスナップショットを作成します。
docker container snapshot create <コンテナ名>
docker container restore <スナップショット名>
Dockerで構築されたPostgreSQLデータベースのバックアップと復元を行う方法はいくつかあります。それぞれの方法にはメリットとデメリットがあるので、ご自身の環境に合った方法を選択してください。
database postgresql backup