[postgres@linux010 pg_backup]$ pg_basebackup -D /data/pg_backup/inc_backup -i /data/pg_backup/backup_manifest -Ft -z -P

pg_basebackup: error: could not initiate base backup: ERROR: incremental backups cannot be taken unless WAL summarization is enabled

pg_basebackup: removing data directory "/data/pg_backup/inc_backup"

[postgres@linux010 pg_backup]$

解决pg_basebackup增量备份错误的方法

启用 WAL 摘要功能
执行以下命令启用 WAL 摘要进程:

ALTER SYSTEM SET summarize_wal = on;
SELECT pg_reload_conf();

注意:需确保 wal_level 设置为 replicalogicalminimal 级别不支持此功能。

验证设置状态
检查摘要进程是否已激活:

SHOW summarize_wal;

创建新的完整备份
启用摘要功能后需重新生成基准备份:

[postgres@linux010 pg_backup]$ pg_basebackup -D /data/pg_backup/ -Ft -z -P
31587/31587 kB (100%), 2/2 tablespaces
[postgres@linux010 pg_backup]$ ll
total 4284
-rw------- 1 postgres postgres 1043456 Jan 21 17:23 16441.tar.gz
-rw------- 1 postgres postgres  191073 Jan 21 17:23 backup_manifest
-rw------- 1 postgres postgres 3125743 Jan 21 17:23 base.tar.gz
-rw------- 1 postgres postgres   17096 Jan 21 17:23 pg_wal.tar.gz
[postgres@linux010 pg_backup]$

执行增量备份
利用完整备份的清单文件进行增量备份:

[postgres@linux010 pg_backup]$ pg_basebackup -D /data/pg_backup/inc_backup -i /data/pg_backup/backup_manifest -Ft -z -P
 4929/31574 kB (15%), 2/2 tablespaces
[postgres@linux010 pg_backup]$ cd inc_backup/
[postgres@linux010 inc_backup]$ ls -ltrh
total 288K
-rw------- 1 postgres postgres  11K Jan 21 17:24 16441.tar.gz
-rw------- 1 postgres postgres  58K Jan 21 17:24 base.tar.gz
-rw------- 1 postgres postgres 195K Jan 21 17:24 backup_manifest
-rw------- 1 postgres postgres  17K Jan 21 17:24 pg_wal.tar.gz
[postgres@linux010 inc_backup]$

原理说明

summarize_wal 进程会在 pg_wal/summaries 中生成二进制摘要文件,记录数据块变更信息。增量备份依赖这些文件快速定位差异数据,未启用时无法识别变更区块。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐