昨天合并到PostgreSQL数据库服务器的Git代码中的是对促进增量备份的支持。
几个月前,Robert Haas重新启动了为PostgreSQL实现增量备份支持的工作,几年前,他最初追求这一功能但无济于事。但这一次,所有事情都得到了解决,并合并到了PostgreSQL中,它支持生成增量备份。
哈斯在他的文章中解释说建议书6月起:
该补丁程序集的基本设计非常简单,主要分为三个部分。首先,有一个新的后台进程,它一直在运行,名为walsum izer。它读取WAL并生成WAL摘要文件。与原始的WAL相比,WAL摘要文件非常小,并且只包含我们确定需要备份数据库的哪些部分所需的最少量的信息。它们告诉我们文件被创建、销毁或截断,还告诉我们修改过的数据块。当然,我们找不到在没有任何预写日志记录的情况下修改的数据块,例如提示位更新,但这些对于正确性来说不是关键的,所以没关系。其次,pg_base备份有一种模式,它可以在该模式下执行增量备份。您必须提供上一次完整备份的备份清单。我们读取在上一次备份开始和这次备份开始之间生成的WAL摘要文件,并使用它来确定哪些关系文件发生了更改以及更改了多少。不相关的文件将正常发送,就像它们在完整备份中一样。关系文件可以完整发送,也可以由增量文件替换,增量文件包含文件中块的子集以及适当处理截断的一些信息。第三,现在有一个pg_cominebackup实用程序,它可以执行完整备份和一个或多个增量备份,执行一系列健全性检查,如果一切正常,就会写出一个新的合成完整备份,也就是数据目录。
简单用法示例:
PG_base备份-CFAST-Dx
Pg_base备份-CFAST-Dy--增量x/备份清单
Pg_组合备份x y-o z
此提交周三是PostgreSQL增量备份支持落地的日子。它进一步解释了该功能:
“要进行增量备份,请使用新的复制命令UPLOAD_MANIFEST上载先前备份的清单。此先前备份可以是完整备份或另一个增量备份。 然后使用带有INCREMENTAL选项的BASE_RESTRUCTION UP进行备份。 pg_basebackup现在有一个--incremental=PATH_TO_MANIFEST选项来触发此行为。
增量备份类似于常规的完全备份,不同的是一些关系文件被替换为名称为INCREMENTAL的文件。$ {ORIGINAL_NAME},并且backup_label文件包含将其标识为增量备份的附加行。新的pg_combinebackup工具可用于从完整备份和一系列增量备份重建数据目录。”
An exciting feature for the next major release, PostgreSQL 17. The PostgreSQL 17 database server stable debut is tentatively planned for next September so it will be interesting to see what other exciting changes make it for this next version.