關於pg_wal
pg的wal日志保存在數據庫目錄下的pg_wal/子目錄
max_wal_size = 1GB min_wal_size = 80MB
[postgres@mingfan pg_wal]$ pwd /usr/local/pgsql/data/pg_wal [postgres@mingfan pg_wal]$ du -sh 16M .
2、插入可產生約2Gwal日志的數據
create table t1(a int); insert into t1 values (generate_series(1,10000000));
insert into t1 values (generate_series(1,10000000));
insert into t1 values (generate_series(1,10000000));
insert into t1 values (generate_series(1,10000000));
3、查看當前pg_wal目錄大小
[postgres@mingfan pg_wal]$ du -sh 1.1G .
基本符合預期,看下官方的介紹:
關於歸檔
在生產環境,為了保證數據高可用性,通常需要設置歸檔,所謂的歸檔,其實就是把pg_wal里面的日志備份出來,當系統故障后可以通過歸檔的日志文件對數據進行恢復:
配置歸檔需要開啟如下參數:
-
wal_level = replica (pg13默認已經開啟replica)
該參數的可選的值有minimal,replica和logical,wal的級別依次增高,在wal的信息也越多。由於minimal這一級別的wal不包含從基礎的備份和wal日志重建數據的足夠信息,在該模式下,無法開啟wal日志歸檔 -
archive_mode = on
上述參數為on,表示打開歸檔備份,可選的參數為on,off,always 默認值為off,所以要手動打開 -
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
該參數的默認值是一個空字符串,他的值可以是一條shell命令或者一個復雜的shell腳本。在shell腳本或命令中可以用 “%p” 表示將要歸檔的wal文件包含完整路徑的信息的文件名,用“%f” 代表不包含路徑信息的wal文件的文件名
注意:wal_level和archive_mode參數修改都需要重新啟動數據庫才可以生效。而修改archive_command則不需要。所以一般配置新系統時,無論當時是否需要歸檔,這要建議將這兩個參數開啟
測試一下
1、配置參數
# - Archiving - archive_mode = on # enables archiving; off, on, or always # (change requires restart) archive_command = 'test ! -f /usr/local/pgsql/archive/%f && cp %p /usr/local/pgsql/archive/%f'
2、重啟數據庫
pg_ctl -D /usr/local/pgsql/data/ restart
3、插入數據,查看歸檔
insert into t1 values (generate_series(1,10000000));

4、查看pg_wal

archive_status下會有已經完成歸檔的日志信息

通過歸檔進程也可以看到當前完成歸檔的日志

