背景
PG 17 新增了增量备份功能,可以通过 pg_basebackup --incremental=PATH_TO_MANIFEST
命令进行增量备份。
- 官方文档:https://www.postgresql.org/docs/current/app-pgbasebackup.html
使用方法
全量备份
启动实例后,首先配置参数 summarize_wal=on
来启用增量备份。灌入一些数据,构造初始数据集
alter system set summarize_wal to on;
select pg_reload_conf();
create table t(a int);
insert into t select generate_series(1,10000);
接着使用 pg_basebackup 命令,拉出一个全量的备份集
pg_basebackup -D /data2/pg/17/inst/full_backup
可以发现全量备份目录下基本就是数据库需要的文件,其中的 backup_manifest 文件记录了这次全量备份的文件名单。
增量备份 1
然后我们继续在原实例插入数据:
insert into t select generate_series(10000,20000);
然后使用增量备份功能,–incremental 指定刚刚全量备份的 manifest:
pg_basebackup --incremental=/data2/pg/17/inst/full_backup/backup_manifest -D /data2/pg/17/inst/increment_backup1/
这时候我们进入增量备份的文件目录,其大体结构和全量备份相似,只不过部分文件被替换成了 INCREMENTAL.${ORIGINAL_NAME} 形式
增量备份 2
然后我们再创建一张表,插入些数据
create table t2(a int);
insert into t2 values(1);
insert into t select generate_series(20001,20005);
进行第二次增量备份,基于第一次增量备份的 manifest 文件
pg_basebackup --incremental=/data2/pg/17/inst/increment_backup1/backup_manifest -D /data2/pg/17/inst/increment_backup2/
合并备份文件
使用 pg_combinebackup
工具进行备份合并,输出到 new_data 文件夹
pg_combinebackup /data2/pg/17/inst/full_backup /data2/pg/17/inst/increment_backup1/ /data2/pg/17/inst/increment_backup2/ -o /data2/pg/17/inst/new_data/
接着我们在新数据库启动实例,查询信息,发现果然已经合并完成:
postgres=# select count(*) from t;
count
-------
20006
(1 row)
postgres=# select * from t2;
a
---
1
(1 row)