目的
この記事では、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. オフライン・バックアップとリストア」