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?

Dockerで学ぶPostgreSQL オフライン物理バックアップ

Last updated at Posted at 2025-07-15

目的

この記事では、Dockerを使って、PostgreSQLのオフライン物理バックアップを取得・リストアする手順をステップバイステップで紹介します。

前提条件

Dockerのインストール
psqlのインストール

手順

postgresのimageをpull

docker pull postgres:14.15

バックアップ元DBの起動と停止

バックアップ元で使用するvolumeの作成

docker volume create v_postgresql_src_offline_physical_backup

バックアップ元DBを起動

docker run --name postgresql_src_offline_physical_backup -v v_postgresql_src_offline_physical_backup:/var/lib/postgresql/data  -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=db_src -p 5432:5432 -d postgres:14.15

データの更新と確認

PGPASSWORD=postgres psql -U postgres -h localhost -p 5432 -d db_src -c "CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL);"
PGPASSWORD=postgres psql -U postgres -h localhost -p 5432 -d db_src -c "INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'), ('Bob', 'bob@example.com'), ('Charlie', 'charlie@example.com');"
PGPASSWORD=postgres psql -U postgres -h localhost -p 5432 -d db_src -c "SELECT * FROM users;"

バックアップ元DBを停止

docker exec -u postgres postgresql_src_offline_physical_backup pg_ctl -D /var/lib/postgresql/data stop

バックアップ処理

Dockerのpostgresだとpg_ctl stopするとコンテナが停止するので、volumeに対してbusyboxでバックアップ・リストア処理を行います。

busyboxのimageをpull

docker pull busybox

バックアップを取得

docker run --rm -v v_postgresql_src_offline_physical_backup:/data -v ./:/backup busybox tar czvf /backup/my_volume_backup.tar.gz -C data .

リストア処理

リストア先で使用するvolumeの作成

docker volume create v_postgresql_dst_offline_physical_backup

リストア処理

docker run --rm -v v_postgresql_dst_offline_physical_backup:/data -v ./:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C data/

リストア先DBを起動

docker run --name postgresql_dst_offline_physical_backup -v v_postgresql_dst_offline_physical_backup:/var/lib/postgresql/data  -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=db_src -p 5432:5432 -d postgres:14.15

リストアされたデータの確認

PGPASSWORD=postgres psql -U postgres -h localhost -p 5432 -d db_src -c "SELECT * FROM users;"

後処理

リストア先サーバーの停止

docker exec -u postgres postgresql_dst_offline_physical_backup pg_ctl -D /var/lib/postgresql/data stop

バックアップ元のpostgres

docker rm postgresql_src_offline_physical_backup
docker volume rm v_postgresql_src_offline_physical_backup

リストア先のpostgres

docker rm postgresql_dst_offline_physical_backup
docker volume rm v_postgresql_dst_offline_physical_backup

使用したイメージ

docker rmi postgres:14.15
docker rmi busybox

参考にした記事

https://lets.postgresql.jp/documents/technical/backup/3 の「5. オフライン・バックアップとリストア」

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?