TECHSCORE BLOG

クラウドCRMを提供するシナジーマーケティングのエンジニアブログです。

WAL-G で PostgreSQL の バックアップ & リストア する

はじめに

万一の障害や操作ミスなどに備えてデータベースのバックアップは必要不可欠です。 さまざまなバックアップ管理ツールがありますが、今回は WAL-G というツールでデータをバックアップとリストアする方法を紹介します。

WAL-Gとは

WAL-G公式ドキュメント)は PostgreSQL のバックアップ・リストアツールである WAL-E の後継として開発されたツールです。
WAL-E の機能を継承しているため、 WAL-E と同様にベースバックアップと WAL アーカイブを使用して、特定の時点または最新の状態にデータを復元することができます。
WAL-E と比べて復旧時の復元速度が 4 倍速くなるなど、多くの改善が加えられて PostgreSQL はもちろん、さまざまなデータベースや圧縮形式をサポートしています。
ベースバックアップと WAL アーカイブを圧縮・暗号化して Amazon S3 などのクラウドストレージサービスに保存できるので、安全性・信頼性の高いバックアップを確保できます。

対応データベース PostgreSQL、MySQL/MariaDB、SQLServer
MongoDB、FoundationDB など
圧縮形式 lz4(デフォルト)、lzma、zstd、brotli
対応ストレージ Amazon S3、Google Cloud Storage
Azure、Swift、Local Filesystem

 

主要コマンド

WAL-G では主に以下のコマンドを利用して、バックアップの作成やリストアを行います。  

コマンド 実行方法 説明
backup-list 手動 現在保存されているベースバックアップのリストを取得
backup-push 手動または自動 (cron など) ベースバックアップを作成
wal-push 自動
→ postgresql.conf のパラメタ設定(archive_command)
WAL をアーカイブ
backup-fetch 手動 ベースバックアップから PostgreSQL データディレクトリを復元
wal-fetch 自動
→ postgresql.conf のパラメタ設定(restore_command)
アーカイブから WAL を取得
(PostgreSQL 11 以前のバージョンでは recovery.conf に設定)

実際の使用例

以下、AWS の EC2 上に PostgreSQL をインストールした環境を用意し、WAL-G を用いて別の EC2 上の PostgreSQL にバックアップ、リストアしてみます。

準備

テスト環境

テスト環境は AWS 上に構築しています。

リージョン ap-northeast-1 (東京)
OS バージョン Amazon Linux release 2
インスタンスタイプ t2.micro
PostgreSQL バージョン 14.3
WAL-G バージョン v0.2.19

※PostgreSQL のインストールについては割愛します。
※テスト用にサンプルデータベースをインポートしました。

バックアップ

1.WAL-G のインストール

PostgreSQL サーバ (main-server)に WAL-G をインストールします。

[root@main-server]

$ wget https://github.com/wal-g/wal-g/releases/download/v0.2.19/wal-g.linux-amd64.tar.gz
$ tar -C /usr/local/bin -xvf wal-g.linux-amd64.tar.gz
$ chown postgres:postgres /usr/local/bin/wal-g

2.バケットの作成

S3 にバックアップファイルを保存するバケット「test1-wal-g」を作成します。

[root@main-server]

$ aws s3 mb s3://test1-wal-g --region ap-northeast-1
make_bucket: test1-wal-g

$ aws s3 ls
2023-04-13 13:37:06 test1-wal-g

3.環境変数の設定

必要な環境変数をセットして wal-g コマンドを実行できるようにシェルスクリプトを作成しておきます。

[root@main-server]

$ vi /usr/local/bin/wal-g.sh
===================================================================
#!/bin/bash

export WALG_S3_PREFIX="s3://test1-wal-g"
export AWS_REGION="ap-northeast-1"
export PGPORT="5432"
export PGHOST="/var/run/postgresql"

exec /usr/local/bin/wal-g "$@"
===================================================================

$ chmod +x /usr/local/bin/wal-g.sh

4.WALアーカイビングの有効化

postgresql.conf を修正し、WAL を S3 に保存できるように設定します。

[postgres@main-server]

$ vi /var/lib/pgsql/data/postgresql.conf
===================================================================
archive_mode = on
archive_command = '/usr/local/bin/wal-g.sh wal-push %p'
===================================================================

## 再起動して設定を反映
$ pg_ctl restart -D  /var/lib/pgsql/data/

5.ベースバックアップ取得

現状確認
[postgres@main-server]

$ /usr/local/bin/wal-g.sh backup-list
INFO: 2023/04/20 09:54:13.417790 No backups found

まだバックアップを実施していないので 「No backups found」が表示されます。

バックアップの取得

backup-push を実行し、バックアップを取得します。 今回は手動で実行しますが、cron に設定して定期的に取得することも可能です。

[postgres@main-server]

$ /usr/local/bin/wal-g.sh backup-push /var/lib/pgsql/data/

INFO: 2023/04/20 10:00:30.410056 Doing full backup.
INFO: 2023/04/20 10:00:30.418543 Calling pg_start_backup()
INFO: 2023/04/20 10:00:30.476542 Walking ...
INFO: 2023/04/20 10:00:30.476716 Starting part 1 ...
INFO: 2023/04/20 10:00:30.926517 Finished writing part 1.
INFO: 2023/04/20 10:00:31.248065 Starting part 2 ...
INFO: 2023/04/20 10:00:31.248220 /global/pg_control
INFO: 2023/04/20 10:00:31.260142 Finished writing part 2.
INFO: 2023/04/20 10:00:31.260746 Calling pg_stop_backup()
INFO: 2023/04/20 10:00:32.313514 Starting part 3 ...
INFO: 2023/04/20 10:00:32.323001 backup_label
INFO: 2023/04/20 10:00:32.323218 tablespace_map
INFO: 2023/04/20 10:00:32.323374 Finished writing part 3.
INFO: 2023/04/20 10:00:32.442400 Wrote backup with name base_000000010000000000000073
バックアップ一覧の確認

利用可能なバックアップが表示されます。

[postgres@main-server]

$ /usr/local/bin/wal-g.sh backup-list
name                          last_modified        wal_segment_backup_start
base_000000010000000000000073 2023-04-20T10:00:33Z 000000010000000000000073
S3 の確認

basebackups_005 、wal_005 フォルダが作成され、lz4 形式で圧縮されたファイルが保存されていることが確認できます。

[postgres@main-server]

$ aws s3 ls s3://test1-wal-g/basebackups_005/base_000000010000000000000073/tar_partitions/
2023-04-20 10:00:32   14087188 part_001.tar.lz4
2023-04-20 10:00:33        538 part_003.tar.lz4
2023-04-20 10:00:32        495 pg_control.tar.lz4

$ aws s3 ls s3://test1-wal-g/wal_005/
2023-04-20 10:00:31      66005 000000010000000000000072.lz4
2023-04-20 10:00:32        269 000000010000000000000073.00000028.backup.lz4
2023-04-20 10:00:32      66124 000000010000000000000073.lz4

※フォルダ名の「005」という数字は S3 にバックアップを保存するための、WAL-G のストレージフォーマットのバージョンを表しています。 このバージョンは前身である WAL-E の v0.5 で、初めて導入された安定版です。

参考:

リストア

main-server と同じ環境の PostgreSQL サーバをもう1台(restore-server)作成し、S3 のバックアップファイルから復旧可能な最新の状態にリストアします。

1.ベースバックアップの展開

S3 に保存されているベースバックアップから PostgreSQL データディレクトリを展開します。

実行前の確認
[postgres@restore-server]

$ ls -l /var/lib/pgsql/data/
total 0
展開

「LATEST」を指定し、S3 から最新のベースバックアップを展開します。

[postgres@restore-server]

$ /usr/local/bin/wal-g.sh backup-fetch /var/lib/pgsql/data/ LATEST

INFO: 2023/04/20 10:03:16.786633 LATEST backup is: 'base_000000010000000000000073'
INFO: 2023/04/20 10:03:16.943107 Finished decompression of part_003.tar.lz4
INFO: 2023/04/20 10:03:16.943205 Finished extraction of part_003.tar.lz4
INFO: 2023/04/20 10:03:19.096730 Finished decompression of part_001.tar.lz4
INFO: 2023/04/20 10:03:19.096841 Finished extraction of part_001.tar.lz4
INFO: 2023/04/20 10:03:19.119384 Finished decompression of pg_control.tar.lz4
INFO: 2023/04/20 10:03:19.119398 Finished extraction of pg_control.tar.lz4
INFO: 2023/04/20 10:03:19.119404
Backup extraction complete.
実行後の確認
[postgres@restore-server]

$ ls -l /var/lib/pgsql/data/
total 96
-rw------- 1 postgres postgres   253 Apr 20 10:03 backup_label
drwx------ 6 postgres postgres    54 Apr 20 10:03 base
-rw------- 1 postgres postgres    30 Apr 20 10:03 current_logfiles
drwx------ 2 postgres postgres  4096 Apr 20 10:03 global
drwx------ 2 postgres postgres     6 Apr 20 10:03 log
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_commit_ts
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_dynshmem
-rw------- 1 postgres postgres  4695 Apr 20 10:03 pg_hba.conf
-rw------- 1 postgres postgres  1636 Apr 20 10:03 pg_ident.conf
drwx------ 4 postgres postgres    68 Apr 20 10:03 pg_logical
drwx------ 4 postgres postgres    36 Apr 20 10:03 pg_multixact
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_notify
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_replslot
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_serial
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_snapshots
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_stat
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_stat_tmp
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_subtrans
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_tblspc
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_twophase
-rw------- 1 postgres postgres     3 Apr 20 10:03 PG_VERSION
drwx------ 2 postgres postgres     6 Apr 20 10:03 pg_wal
drwx------ 2 postgres postgres    18 Apr 20 10:03 pg_xact
-rw------- 1 postgres postgres    88 Apr 20 10:03 postgresql.auto.conf
-rw------- 1 postgres postgres 28817 Apr 20 10:03 postgresql.conf
-rw------- 1 postgres postgres     0 Apr 20 10:03 tablespace_map

2.WAL アーカイブを使用したリカバリの設定

postgresql.conf の修正

S3 から WAL アーカイブを取得できるように設定を追加します。

[postgres@restore-server]

$ vi /var/lib/pgsql/data/postgresql.conf
===================================================================
restore_command = '/usr/local/bin/wal-g.sh wal-fetch "%f" "%p"'
===================================================================
recovery.signal の作成

PostgreSQL バージョン 12 以上で WAL アーカイブを用いてデータベースを復元するには recovery.signal ファイルが必要です。このファイルがある状態で PostgreSQL を起動すると restore_command で設定したコマンドが実行され、WAL が再生されます。ファイルの中身は空のままで問題ありません。
復元が完了すると、recovery.signal ファイルは自動的に削除されます。

[postgres@restore-server]

$ touch /var/lib/pgsql/data/recovery.signal

3.起動

PostgreSQL の起動
[root@restore-server]

$ systemctl start postgresql.service
ログの確認
[root@restore-server]

$ cat /var/lib/pgsql/data/log/postgresql-XXX.log

2023-04-20 10:04:21.340 UTC [3938] LOG:  database system was interrupted; last known up at 2023-04-20 10:00:30 UTC
2023-04-20 10:04:21.340 UTC [3938] LOG:  creating missing WAL directory "pg_wal/archive_status"
ERROR: 2023/04/20 10:04:21.516662 Archive '00000002.history' does not exist.
2023-04-20 10:04:21.518 UTC [3938] LOG:  starting archive recovery
2023-04-20 10:04:21.788 UTC [3938] LOG:  restored log file "000000010000000000000073" from archive
2023-04-20 10:04:21.833 UTC [3938] LOG:  redo starts at 0/73000028
2023-04-20 10:04:21.834 UTC [3938] LOG:  consistent recovery state reached at 0/73000100
2023-04-20 10:04:21.835 UTC [3934] LOG:  database system is ready to accept read-only connections
ERROR: 2023/04/20 10:04:21.995562 Archive '000000010000000000000074' does not exist.
2023-04-20 10:04:21.996 UTC [3938] LOG:  redo done at 0/73000100 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.16 s
2023-04-20 10:04:22.247 UTC [3938] LOG:  restored log file "000000010000000000000073" from archive
ERROR: 2023/04/20 10:04:22.444755 Archive '00000002.history' does not exist.
2023-04-20 10:04:22.445 UTC [3938] LOG:  selected new timeline ID: 2
2023-04-20 10:04:22.495 UTC [3938] LOG:  archive recovery complete
2023-04-20 10:04:22.701 UTC [3934] LOG:  database system is ready to accept connections

処理が完了し、データベースに接続できる状態になりました。

4.データの確認

各データベースのデータ件数が一致していることが確認できました。

main-server (バックアップ元)
[postgres@main-server]$ psql -d dvdrental -c "SELECT pg_class.relname , pg_class.reltuples FROM pg_stat_user_tables INNER JOIN pg_class ON pg_stat_user_tables.relname = pg_class.relname order by cast(pg_class.reltuples as numeric) desc;"

    relname    | reltuples
---------------+-----------
 rental        |     16044
 payment       |     14596
 film_actor    |      5462
 inventory     |      4581
 film          |      1000
 film_category |      1000
 address       |       603
 city          |       600
 customer      |       599
 actor         |       200
 country       |       109
 category      |        16
 language      |         6
 staff         |         2
 store         |         2
(15 rows)
restore-server (リストア先)
[postgres@restore-server]$ psql -d dvdrental -c "SELECT pg_class.relname , pg_class.reltuples FROM pg_stat_user_tables INNER JOIN pg_class ON pg_stat_user_tables.relname = pg_class.relname order by cast(pg_class.reltuples as numeric) desc;"

    relname    | reltuples
---------------+-----------
 rental        |     16044
 payment       |     14596
 film_actor    |      5462
 inventory     |      4581
 film          |      1000
 film_category |      1000
 address       |       603
 city          |       600
 customer      |       599
 actor         |       200
 country       |       109
 category      |        16
 language      |         6
 staff         |         2
 store         |         2
(15 rows)

おまけ

特定の時点に戻したい場合

リカバリ時刻を指定して復旧することもできます。
一例として、誤ってテーブルを削除してしまったデータベースを時刻指定で削除前の状態に戻してみます。

$ psql -d dvdrental -c "select count(*) from address;"
 count
-------
   603
(1 row)

$ psql -d dvdrental -c "drop table address cascade"
DROP TABLE

$ psql -d dvdrental -c "select count(*) from address;"
ERROR:  relation "address" does not exist
LINE 1: select count(*) from address;
ベースパックアップの特定

ベースバックアップリストから展開するベースバックアップを特定します。

$ /usr/local/bin/wal-g.sh backup-list
name                          last_modified        wal_segment_backup_start
base_0000000400000000000000AF 2023-04-21T03:19:12Z 0000000400000000000000AF
base_0000000400000000000000B1 2023-04-21T03:21:31Z 0000000400000000000000B1

テーブルを削除したのは JST で 2023-04-21 12:20 過ぎでした。backup-list で表示される時刻は UTC なので、last_modified が 2023-04-21 03:20 の直前であるベースバックアップを探します。

$ RECOVERY_TARGET_TIME="2023-04-21 03:20:00"
$ /usr/local/bin/wal-g.sh backup-list | grep base | awk '{print $1,$2}' | while read backup time; do
   if [[ $(date -d "$time" +%s) -le $(date -d "$RECOVERY_TARGET_TIME" +%s) ]]; then
      echo $backup;
   fi;
done | tail -n 1
base_0000000400000000000000AF 

base_0000000400000000000000AF を展開すればよいことが分かります。

展開

上記で特定したベースバックアップを展開します。

$ rm  -rf /var/lib/pgsql/data/*

$ /usr/local/bin/wal-g.sh backup-fetch /var/lib/pgsql/data/ base_0000000400000000000000AF

INFO: 2023/04/21 07:55:21.523002 Finished decompression of part_003.tar.lz4
INFO: 2023/04/21 07:55:21.523017 Finished extraction of part_003.tar.lz4
INFO: 2023/04/21 07:55:23.763362 Finished decompression of part_001.tar.lz4
INFO: 2023/04/21 07:55:23.763482 Finished extraction of part_001.tar.lz4
INFO: 2023/04/21 07:55:23.783184 Finished decompression of pg_control.tar.lz4
INFO: 2023/04/21 07:55:23.783198 Finished extraction of pg_control.tar.lz4
INFO: 2023/04/21 07:55:23.783205
Backup extraction complete.
postgresql.conf の修正
$ vi /var/lib/pgsql/data/postgresql.conf 
===================================================================
recovery_target_time = '2023-04-21 03:20:00'
===================================================================
起動
$ touch /var/lib/pgsql/data/recovery.signal
$ pg_ctl start -D  /var/lib/pgsql/data/
ログの確認
$ cat /var/lib/pgsql/data/log/postgresql-XXX.log

2023-04-21 08:06:06.262 UTC [10247] LOG:  database system was interrupted; last known up at 2023-04-21 03:19:09 UTC
2023-04-21 08:06:06.262 UTC [10247] LOG:  creating missing WAL directory "pg_wal/archive_status"
2023-04-21 08:06:06.377 UTC [10247] LOG:  restored log file "00000005.history" from archive
2023-04-21 08:06:06.481 UTC [10247] LOG:  restored log file "00000006.history" from archive
2023-04-21 08:06:06.586 UTC [10247] LOG:  restored log file "00000007.history" from archive
2023-04-21 08:06:06.682 UTC [10247] LOG:  restored log file "00000008.history" from archive
ERROR: 2023/04/21 08:06:06.825288 Archive '00000009.history' does not exist.
2023-04-21 08:06:06.826 UTC [10247] LOG:  starting point-in-time recovery to 2023-04-21 03:20:00+00
2023-04-21 08:06:06.935 UTC [10247] LOG:  restored log file "00000008.history" from archive
2023-04-21 08:06:07.208 UTC [10247] LOG:  restored log file "0000000400000000000000AF" from archive
ERROR: 2023/04/21 08:06:07.401323 Archive '00000004.history' does not exist.
2023-04-21 08:06:07.514 UTC [10247] LOG:  restored log file "00000005.history" from archive
2023-04-21 08:06:07.618 UTC [10247] LOG:  restored log file "00000006.history" from archive
2023-04-21 08:06:07.725 UTC [10247] LOG:  restored log file "00000007.history" from archive
2023-04-21 08:06:07.730 UTC [10247] LOG:  redo starts at 0/AF000028
2023-04-21 08:06:07.730 UTC [10247] LOG:  consistent recovery state reached at 0/AF000100
2023-04-21 08:06:07.731 UTC [10245] LOG:  database system is ready to accept read-only connections
データの確認
$ psql -d dvdrental -c "select count(*) from address;"
 count
-------
   603
(1 row)

削除した address テーブルが復旧していることを確認できました。

バックアップを削除する

バックアップはどんどんたまり続けるので定期的に削除する必要があります。
delete コマンドで残したい世代数を指定またはすべてのバックアップを削除します。

削除前の確認
[postgres@main-server]

$ /usr/local/bin/wal-g.sh backup-list
name                          last_modified        wal_segment_backup_start
base_000000010000000000000059 2023-04-17T10:22:35Z 000000010000000000000059
base_00000001000000000000005A 2023-04-17T10:22:39Z 00000001000000000000005A
base_00000001000000000000005C 2023-04-17T10:22:42Z 00000001000000000000005C

$ aws s3 ls s3://test1-wal-g/basebackups_005/
                           PRE base_000000010000000000000059/
                           PRE base_00000001000000000000005A/
                           PRE base_00000001000000000000005C/
2023-04-17 10:22:35     186624 base_000000010000000000000059_backup_stop_sentinel.json
2023-04-17 10:22:39     186625 base_00000001000000000000005A_backup_stop_sentinel.json
2023-04-17 10:22:42     186625 base_00000001000000000000005C_backup_stop_sentinel.json

$ aws s3 ls s3://test1-wal-g/wal_005/
2023-04-17 10:22:33      66005 000000010000000000000058.lz4
2023-04-17 10:22:34        268 000000010000000000000059.00000028.backup.lz4
2023-04-17 10:22:34      66123 000000010000000000000059.lz4
2023-04-17 10:22:37        268 00000001000000000000005A.00000028.backup.lz4
2023-04-17 10:22:37      66125 00000001000000000000005A.lz4
2023-04-17 10:22:40      66006 00000001000000000000005B.lz4
2023-04-17 10:22:41        270 00000001000000000000005C.00000028.backup.lz4
2023-04-17 10:22:41      66124 00000001000000000000005C.lz4
残したい世代数を指定して削除
## 2世代分を残して削除
$ /usr/local/bin/wal-g.sh delete retain 2 --confirm

INFO: 2023/04/17 10:24:21.565101 Start delete
INFO: 2023/04/17 10:24:21.565191 retrieving permanent objects
INFO: 2023/04/17 10:24:21.902116 Objects in folder:
INFO: 2023/04/17 10:24:21.902242        will be deleted: basebackups_005/base_000000010000000000000059_backup_stop_sentinel.json
INFO: 2023/04/17 10:24:21.902350        will be deleted: wal_005/000000010000000000000058.lz4
INFO: 2023/04/17 10:24:21.902430        will be deleted: wal_005/000000010000000000000059.00000028.backup.lz4
INFO: 2023/04/17 10:24:21.902492        will be deleted: wal_005/000000010000000000000059.lz4
INFO: 2023/04/17 10:24:21.902619        will be deleted: basebackups_005/base_000000010000000000000059/metadata.json
INFO: 2023/04/17 10:24:21.902713        will be deleted: basebackups_005/base_000000010000000000000059/tar_partitions/part_001.tar.lz4
INFO: 2023/04/17 10:24:21.902793        will be deleted: basebackups_005/base_000000010000000000000059/tar_partitions/part_003.tar.lz4
INFO: 2023/04/17 10:24:21.902839        will be deleted: basebackups_005/base_000000010000000000000059/tar_partitions/pg_control.tar.lz4
削除後の確認
$ /usr/local/bin/wal-g.sh backup-list
name                          last_modified        wal_segment_backup_start
base_00000001000000000000005A 2023-04-18T13:22:39Z 00000001000000000000005A
base_00000001000000000000005C 2023-04-18T13:22:42Z 00000001000000000000005C

$ aws s3 ls s3://test1-wal-g/basebackups_005/
                           PRE base_00000001000000000000005A/
                           PRE base_00000001000000000000005C/
2023-04-17 10:22:39     186625 base_00000001000000000000005A_backup_stop_sentinel.json
2023-04-17 10:22:42     186625 base_00000001000000000000005C_backup_stop_sentinel.json

$ aws s3 ls s3://test1-wal-g/wal_005/
2023-04-17 10:22:37        268 00000001000000000000005A.00000028.backup.lz4
2023-04-17 10:22:37      66125 00000001000000000000005A.lz4
2023-04-17 10:22:40      66006 00000001000000000000005B.lz4
2023-04-17 10:22:41        270 00000001000000000000005C.00000028.backup.lz4
2023-04-17 10:22:41      66124 00000001000000000000005C.lz4
すべて削除
$ /usr/local/bin/wal-g.sh delete everything --confirm

INFO: 2023/04/17 10:26:38.892159 retrieving permanent objects
INFO: 2023/04/17 10:26:39.147707 Objects in folder:
INFO: 2023/04/17 10:26:39.147793        will be deleted: basebackups_005/base_00000001000000000000005A_backup_stop_sentinel.json
INFO: 2023/04/17 10:26:39.147860        will be deleted: basebackups_005/base_00000001000000000000005C_backup_stop_sentinel.json
INFO: 2023/04/17 10:26:39.147902        will be deleted: wal_005/00000001000000000000005A.00000028.backup.lz4
INFO: 2023/04/17 10:26:39.147968        will be deleted: wal_005/00000001000000000000005A.lz4
INFO: 2023/04/17 10:26:39.148018        will be deleted: wal_005/00000001000000000000005B.lz4
INFO: 2023/04/17 10:26:39.148045        will be deleted: wal_005/00000001000000000000005C.00000028.backup.lz4
INFO: 2023/04/17 10:26:39.148112        will be deleted: wal_005/00000001000000000000005C.lz4
INFO: 2023/04/17 10:26:39.148154        will be deleted: basebackups_005/base_00000001000000000000005A/metadata.json
INFO: 2023/04/17 10:26:39.148179        will be deleted: basebackups_005/base_00000001000000000000005C/metadata.json
INFO: 2023/04/17 10:26:39.148231        will be deleted: basebackups_005/base_00000001000000000000005A/tar_partitions/part_001.tar.lz4
INFO: 2023/04/17 10:26:39.148265        will be deleted: basebackups_005/base_00000001000000000000005A/tar_partitions/part_003.tar.lz4
INFO: 2023/04/17 10:26:39.148301        will be deleted: basebackups_005/base_00000001000000000000005A/tar_partitions/pg_control.tar.lz4
INFO: 2023/04/17 10:26:39.148349        will be deleted: basebackups_005/base_00000001000000000000005C/tar_partitions/part_001.tar.lz4
INFO: 2023/04/17 10:26:39.148374        will be deleted: basebackups_005/base_00000001000000000000005C/tar_partitions/part_003.tar.lz4
INFO: 2023/04/17 10:26:39.148396        will be deleted: basebackups_005/base_00000001000000000000005C/tar_partitions/pg_control.tar.lz4
確認
$ /usr/local/bin/wal-g.sh backup-list
INFO: 2023/04/17 10:27:16.607639 No backups found

$ aws s3 ls s3://test1-wal-g/
$

※「 --confirm 」なしで実行すると実際にバックアップファイルは削除されず、削除対象や実行結果の確認ができます。(Dry run)

$ /usr/local/bin/wal-g.sh delete everything

INFO: 2023/04/17 10:49:33.126385 retrieving permanent objects
INFO: 2023/04/17 10:49:33.346107 Objects in folder:
INFO: 2023/04/17 10:49:33.346209        will be deleted: basebackups_005/base_00000001000000000000005F_backup_stop_sentinel.json
INFO: 2023/04/17 10:49:33.346296        will be deleted: wal_005/00000001000000000000005D.lz4
INFO: 2023/04/17 10:49:33.346325        will be deleted: wal_005/00000001000000000000005E.lz4
INFO: 2023/04/17 10:49:33.346379        will be deleted: wal_005/00000001000000000000005F.00000028.backup.lz4
INFO: 2023/04/17 10:49:33.346452        will be deleted: wal_005/00000001000000000000005F.lz4
INFO: 2023/04/17 10:49:33.346486        will be deleted: basebackups_005/base_00000001000000000000005F/metadata.json
INFO: 2023/04/17 10:49:33.346523        will be deleted: basebackups_005/base_00000001000000000000005F/tar_partitions/part_001.tar.lz4
INFO: 2023/04/17 10:49:33.346566        will be deleted: basebackups_005/base_00000001000000000000005F/tar_partitions/part_003.tar.lz4
INFO: 2023/04/17 10:49:33.346605        will be deleted: basebackups_005/base_00000001000000000000005F/tar_partitions/pg_control.tar.lz4
INFO: 2023/04/17 10:49:33.346662 Dry run, nothing were deleted ★

おわりに

以上、WAL-G についての紹介でした。
WAL-G は拡張性が高くシンプルな CLI を備えて、インストールおよび設定が簡単にできる便利なツールです。
しかし、初心者にとっては情報が少なく、英語のみのドキュメントは理解することが難しい場合もあると思いました。この記事がどなたかのお役に立てれば嬉しいです。

シナジーマーケティング株式会社では一緒に働く仲間を募集しています。