はじめに
万一の障害や操作ミスなどに備えてデータベースのバックアップは必要不可欠です。 さまざまなバックアップ管理ツールがありますが、今回は 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 を備えて、インストールおよび設定が簡単にできる便利なツールです。
しかし、初心者にとっては情報が少なく、英語のみのドキュメントは理解することが難しい場合もあると思いました。この記事がどなたかのお役に立てれば嬉しいです。