pgBackRest on Ubuntu — PostgreSQL差分・並列バックアップ戦略

データベース

この記事のポイント

  • Ubuntu 24.04 LTS に apt install pgbackrest 1行でインストール可能(バージョン 2.50)
  • 差分バックアップはフルバックアップの約3分の1の時間(実測:10秒→3秒)で完了
  • 圧縮が標準で有効になっており、31.6MB のデータベースが 5.9MB に圧縮(81%削減)
  • process-max オプションで並列バックアップを有効にすると大容量DBでも高速化できる
  • pgbackrest info でバックアップ一覧・状態を常時確認できる

PostgreSQL のバックアップには pg_dump を使っている方が多いと思いますが、差分バックアップや並列転送に対応した pgBackRest を使うと、データベースが大きくなってからの運用がずっと楽になります。

実際に Ubuntu 24.04 の Docker コンテナで pgBackRest 2.50 + PostgreSQL 16.14 を動かし、フル→差分→増分バックアップを順番に実行してみました。差分バックアップがフルの約3分の1の時間で終わること、圧縮効率が高いことが数値で確認できました。

確認済み環境

Ubuntu 24.04 LTS(Docker 公式イメージ ubuntu:24.04)/ PostgreSQL 16.14 / pgBackRest 2.50-1build2 / 2026-06-22 実測

pgBackRest とは

pgBackRest は PostgreSQL 専用のバックアップ・リストアツールです。pg_dump と比べて次の点が異なります。

機能 pg_dump pgBackRest
バックアップ方式 論理バックアップ(SQL形式) 物理バックアップ(ファイルコピー)
差分・増分バックアップ 非対応 対応(WALアーカイブ活用)
並列バックアップ 非対応 対応(process-max で設定)
圧縮 オプション(gzip等) 標準(gz/bz2/lz4/zst)
リモートバックアップ 別途設定が必要 SSH経由で標準対応
大規模DBへの適性 △(時間・サイズともに増大) ◎(差分・並列で効率化)

自宅サーバーや VPS で PostgreSQL を運用しているなら、DB が数 GB を超えてきたタイミングで pgBackRest への移行を検討するとよいです。

インストール手順

手順1:パッケージを更新してインストールする

Ubuntu 24.04 の標準リポジトリに pgBackRest 2.50 が含まれています。追加リポジトリの設定は不要です。




ubuntu@vps: ~
$ sudo apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Reading package lists… Done
$ sudo apt-get install -y pgbackrest
Reading package lists… Done
The following NEW packages will be installed:
pgbackrest
Setting up pgbackrest (2.50-1build2) …
$ pgbackrest version
pgBackRest 2.50
pgBackRest 2.50 インストールログ(実測)
pgBackRest 2.50 インストールログ(実測)

インストール後にすぐ pgbackrest version が通ればOKです。Ubuntu 22.04 では 2.37 が入りますが、24.04 では 2.50 が利用でき、機能・パフォーマンスともに新しいので、これから構築するなら 24.04 を選んでください。

手順2:PostgreSQL を有効にする(アーカイブモード)

pgBackRest は WAL(Write-Ahead Log)アーカイブを使って差分・増分バックアップを実現します。PostgreSQL 側でアーカイブモードを有効にする設定が必要です。




ubuntu@vps: ~
$ sudo nano /etc/postgresql/16/main/postgresql.conf

以下の設定を追記または変更します。




postgresql.conf(追記箇所)
archive_mode = on
archive_command = ‘pgbackrest –stanza=demo archive-push %p’
wal_level = replica
max_wal_senders = 3

注意

archive_mode を変更したあとは PostgreSQL の再起動が必要です(sudo systemctl restart postgresql)。再起動するとアクティブな接続が切れるため、メンテナンス時間を確保してから作業してください。

手順3:pgbackrest.conf を作成する

pgBackRest の設定ファイルは /etc/pgbackrest/pgbackrest.conf に置きます。インストール直後は存在しないので作成します。




ubuntu@vps: ~
$ sudo mkdir -p /etc/pgbackrest /var/lib/pgbackrest /var/log/pgbackrest
$ sudo chown postgres:postgres /var/lib/pgbackrest /var/log/pgbackrest
$ sudo chmod 750 /var/lib/pgbackrest
$ sudo nano /etc/pgbackrest/pgbackrest.conf

設定ファイルの中身です。[demo] の部分は stanza 名(バックアップ対象の識別名)です。複数の PostgreSQL クラスタを管理する場合は stanza を複数作れます。




/etc/pgbackrest/pgbackrest.conf
[demo]
pg1-path=/var/lib/postgresql/16/main

[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
log-level-console=info
start-fast=y

start-fast=y は「チェックポイントを待たずにバックアップを開始する」設定です。通常のチェックポイント間隔(デフォルト5分)を待たずにすぐ開始できるので、開発環境での動作確認がしやすくなります。

手順4:stanza を作成する

stanza は「このバックアップセットはどの PostgreSQL クラスタに属するか」を管理する概念です。設定ファイルを書いたら初回だけ作成コマンドを実行します。




ubuntu@vps: ~
$ sudo -u postgres pgbackrest –stanza=demo stanza-create
INFO: stanza-create command begin 2.50
INFO: stanza-create command end: completed successfully

バックアップを実行する

①フルバックアップ

最初は必ずフルバックアップから始めます。差分・増分バックアップはフルバックアップを起点にするためです。




ubuntu@vps: ~
$ sudo -u postgres pgbackrest –stanza=demo backup –type=full
INFO: backup command begin 2.50
INFO: execute non-exclusive backup start: backup begins after the next regular checkpoint completes
INFO: backup start archive = 000000010000000000000003, lsn = 0/3000028
INFO: full backup size = 31.6MB, file total = 969
INFO: backup command end: completed successfully (10120ms)

私の実測環境(Docker コンテナ、10万行・31.6MB)ではフルバックアップは 10.1秒で完了しました。

②差分バックアップ

差分バックアップ(--type=diff)は、直前のフルバックアップからの変更分だけをバックアップします。フルが終わったあとにデータを追加して実行した結果です。




ubuntu@vps: ~
$ sudo -u postgres pgbackrest –stanza=demo backup –type=diff
INFO: last backup label = 20260622-025931F, version = 2.50
INFO: diff backup size = 11.4MB, file total = 969
INFO: backup command end: completed successfully (3034ms)

差分バックアップは3.0秒で完了。フルの約3分の1の時間です。バックアップ対象が「変更されたファイルだけ」なので当然といえば当然ですが、数値で確認できると安心します。

③増分バックアップ

増分バックアップ(--type=incr)は、直前のバックアップ(フル・差分・増分どれでも)からの変更分をバックアップします。最も変更量が少ない状態で実行するため、日次バックアップに向いています。




ubuntu@vps: ~
$ sudo -u postgres pgbackrest –stanza=demo backup –type=incr
INFO: incr backup size = 11.9MB, file total = 969
INFO: backup command end: completed successfully (3040ms)
バックアップ所要時間比較 フル/差分/増分(実測)
バックアップ所要時間比較 フル/差分/増分(実測)
バックアップストレージ使用量 圧縮効果(実測)
バックアップストレージ使用量 圧縮効果(実測)

バックアップ状態を確認する

pgbackrest info を実行すると、蓄積されたバックアップの一覧と状態が確認できます。




ubuntu@vps: ~
$ sudo -u postgres pgbackrest –stanza=demo info
stanza: demo
status: ok
cipher: none

db (current)
wal archive min/max (16): 000000010000000000000001/000000010000000000000007

full backup: 20260622-025931F
timestamp start/stop: 2026-06-22 02:59:31 / 2026-06-22 02:59:40
database size: 31.6MB, database backup size: 31.6MB
repo1: backup set size: 5.9MB, backup size: 5.9MB

diff backup: 20260622-025931F_20260622-025941D
timestamp start/stop: 2026-06-22 02:59:41 / 2026-06-22 02:59:43
database size: 33.5MB, database backup size: 11.4MB
repo1: backup set size: 6.5MB, backup size: 3.6MB
backup reference list: 20260622-025931F

incr backup: 20260622-025931F_20260622-025944I
timestamp: 2026-06-22 02:59:44 / 2026-06-22 02:59:46
database size: 34.0MB, database backup size: 11.9MB
repo1: backup set size: 6.6MB, backup size: 3.7MB
pgbackrest info バックアップ一覧(実測)
pgbackrest info バックアップ一覧(実測)

backup reference list の行が差分・増分バックアップの起点を示しています。差分はフルバックアップを参照し、増分は差分と以前のフル両方を参照している様子がわかります。リストアするときは pgBackRest が自動でこのチェーンを辿って完全なデータを復元してくれます。

並列バックアップで高速化する

大容量のデータベース(数十GB以上)を扱うなら、process-max オプションで並列処理を有効にすることを検討してください。




/etc/pgbackrest/pgbackrest.conf(並列バックアップ設定)
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
process-max=4
compress-type=lz4
log-level-console=info
start-fast=y

process-max=4 は「4並列でファイルをバックアップ・リストアする」設定です。VPS の vCPU 数に合わせて設定するとよいです。また、compress-type=lz4 は gzip(デフォルト)より圧縮率は少し下がりますが、速度が速い圧縮方式です。I/O よりも CPU が先にボトルネックになる環境では lz4 の方が向いています。

リストア手順

バックアップからデータを復元するには restore コマンドを使います。実行前に PostgreSQL を停止する必要があります。




ubuntu@vps: ~
$ sudo systemctl stop postgresql
$ sudo -u postgres pgbackrest –stanza=demo restore
INFO: restore command begin 2.50
INFO: restore backup set 20260622-025931F_20260622-025941D
INFO: write updated /var/lib/postgresql/16/main/postgresql.auto.conf
INFO: restore command end: completed successfully
$ sudo systemctl start postgresql

デフォルトでは最新のバックアップからリストアします。特定の時点(PITRで特定の時刻まで)に戻したい場合は --target オプションで時刻を指定できますが、通常の運用では最新でリストアすれば十分です。

注意

リストアは既存の PostgreSQL データディレクトリ(/var/lib/postgresql/16/main)を上書きします。必ず PostgreSQL を停止してから実行し、リストア先に十分なディスク容量があることを確認してください。

自動バックアップを cron で設定する

本番運用では cron で定期バックアップを設定します。よく使われるのは「週次フル+日次差分」の組み合わせです。




ubuntu@vps: ~
$ sudo crontab -u postgres -e



postgres の crontab(例)
# 毎週日曜 02:00 にフルバックアップ
0 2 * * 0 pgbackrest –stanza=demo backup –type=full

# 月〜土 02:00 に差分バックアップ
0 2 * * 1-6 pgbackrest –stanza=demo backup –type=diff

これで毎週フルバックアップが1回、毎日差分バックアップが取られます。repo1-retention-full=2 の設定なら、フルバックアップ2世代分(約2週間)のデータが保持されます。

Ubuntu バージョン別のパッケージ比較

Ubuntu 22.04 vs 24.04 pgBackRest/PostgreSQL バージョン比較(実測)
Ubuntu 22.04 vs 24.04 pgBackRest/PostgreSQL バージョン比較(実測)

Ubuntu 22.04 と 24.04 では、pgBackRest と PostgreSQL のデフォルトバージョンが異なります。実測(apt-cache policy)で確認した結果、22.04 では pgBackRest 2.37 + PostgreSQL 14、24.04 では pgBackRest 2.50 + PostgreSQL 16.14 が標準で入ります。

新規構築なら迷わず 24.04 を選んでください。既存の 22.04 環境で最新版を使いたい場合は、公式 APT リポジトリ(pgdg)を追加することで 24.04 同等のバージョンを入れることができます。

よくあるエラーと解決策

①「ERROR: archive-push command not found」が出る

PostgreSQL の archive_command に書いたパスで pgbackrest が見つからない場合です。




確認コマンド
$ which pgbackrest
/usr/bin/pgbackrest
$ sudo -u postgres which pgbackrest
/usr/bin/pgbackrest

postgres ユーザーの PATH に /usr/bin が含まれているか確認してください。含まれていない場合は archive_command をフルパス(/usr/bin/pgbackrest --stanza=demo archive-push %p)で書きます。

②「WARNING: WAL segment exists in the archive prior to the current database system identifier」が出る

既存のアーカイブディレクトリに別のクラスタのWALが残っている場合です。テスト環境でリセットするときに起きやすい。




解決手順(stanza を再作成する)
$ sudo -u postgres pgbackrest –stanza=demo stop
$ sudo -u postgres pgbackrest –stanza=demo stanza-delete –force
$ sudo -u postgres pgbackrest –stanza=demo stanza-create
INFO: stanza-create command end: completed successfully

③バックアップが「failed」になる

まず /var/log/pgbackrest/ にあるログファイルを確認します。よくある原因は「WAL アーカイブディレクトリの権限不足」と「PostgreSQL が archive_mode=on で起動していない」の2つです。




ログ確認
$ sudo tail -50 /var/log/pgbackrest/demo-backup.log
ERROR: archive-push WAL file … transfer failed
$ ls -la /var/lib/pgbackrest/
$ sudo -u postgres pgbackrest –stanza=demo check
INFO: check command end: completed successfully

pgbackrest check コマンドはアーカイブの疎通を確認するコマンドです。バックアップを実行する前にこれで確認しておくと問題を早期に発見できます。

まとめ

pgBackRest は Ubuntu 24.04 に apt install pgbackrest 1行で入り、差分・増分バックアップがすぐ使えます。今回の実測では差分バックアップがフルの約3分の1の時間(10秒→3秒)で完了し、ストレージも圧縮で 81% 削減できました。

  • フルバックアップ(10万行・31.6MB):10.1秒 / 圧縮後 5.9MB(Ubuntu 24.04 実測)
  • 差分バックアップ(+2万行追加後):3.0秒 / 差分のみ 3.6MB
  • 増分バックアップ(+5,000行追加後):3.0秒 / 差分のみ 3.7MB
  • process-max で並列化、compress-type=lz4 で高速圧縮も選択可能
  • cron で「週次フル+日次差分」を設定すれば本番運用に十分

自宅サーバーや VPS で PostgreSQL を育てているなら、今のうちに pgBackRest を仕込んでおくとあとで助かります。VPS を検討中の方はこちらも参考にどうぞ。

コメント

タイトルとURLをコピーしました