重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 608|回复: 0
打印 上一主题 下一主题

PostgreSQL 17 中的增量备份

[复制链接]
跳转到指定楼层
楼主
发表于 2025-6-1 17:51:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数据库管理员(DBA)或站点可靠性工程师(SRE)的价值取决于他们的最后一次备份,这是千真万确的。PostgreSQL 17 添加了将多个增量备份与全量备份相结合的功能,以便在系统故障时恢复完整的数据字典。使用起来非常方便。

这是一个使用增量备份的快速示例。我建议观看 Robert Haas 的视频,了解更多细节和备份策略的讨论。

第一步:启用 WAL 摘要
增量备份需要写前日志(WAL)摘要。默认情况下,你的实例可能没有启用它,但启用它非常简单。

demo=# alter system set summerize_wal = 'on';
ALTER SYSTEM
demo=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 行)
第二步:全量备份
以下示例比你在现实生活中遇到的要简单得多。场景是我们在周日进行全量备份,其余时间进行增量备份。周三到周六的备份在此省略。

stoker@ThinkPad:~$ mkdir full monday tuesday

stoker@ThinkPad:~$ pg_basebackup -D full --verbose
密码:
pg_basebackup:正在启动基础备份,等待检查点完成
pg_basebackup:检查点完成
pg_basebackup:写前日志起始点:6/12000028,在时间线 1 上
pg_basebackup:启动后台 WAL 接收器
pg_basebackup:创建临时复制槽“pg_basebackup_21051”
pg_basebackup:写前日志结束点:6/12000158
pg_basebackup:等待后台进程完成流式传输...
pg_basebackup:将数据同步到磁盘...
pg_basebackup:将 backup_manifest.tmp 重命名为 backup_manifest
pg_basebackup:基础备份完成
第三步:第一次增量备份(周一)
在周一,创建第一次增量备份。需要引用包含所有 WAL 信息的清单,这些信息记录了发生了哪些变化。

stoker@ThinkPad:~$ pg_basebackup -D monday -i ./full/backup_manifest --verbose
密码:
pg_basebackup:正在启动基础备份,等待检查点完成
pg_basebackup:检查点完成
pg_basebackup:写前日志起始点:6/14000028,在时间线 1 上
pg_basebackup:启动后台 WAL 接收器
pg_basebackup:创建临时复制槽“pg_basebackup_22703”
pg_basebackup:写前日志结束点:6/14000120
pg_basebackup:等待后台进程完成流式传输...
pg_basebackup:将数据同步到磁盘...
pg_basebackup:将 backup_manifest.tmp 重命名为 backup_manifest
pg_basebackup:基础备份完成
第四步:第二次增量备份(周二)
在周二,创建另一次增量备份。

我们可以仅记录自上次增量备份以来的变化,方法是引用周一目录中的备份清单。在这种情况下,要完全恢复数据,我们需要结合全量备份以及周一和周二的增量备份。这是一种非常有效的操作方式。如果数据变化不大,这可以节省创建增量备份的时间。

我个人更倾向于基于全量备份进行增量备份。这意味着在完全恢复时,只需要使用全量备份和周二的备份。减少逻辑步骤可能看起来微不足道,但在经历了太多凌晨因灾难性系统故障而进行的恢复操作后,我尽量避免引发墨菲定律。

stoker@ThinkPad:~$ pg_basebackup -D tuesday -i ./full/backup_manifest --verbose
密码:
pg_basebackup:正在启动基础备份,等待检查点完成
pg_basebackup:检查点完成
pg_basebackup:写前日志起始点:6/16000028,在时间线 1 上
pg_basebackup:启动后台 WAL 接收器
pg_basebackup:创建临时复制槽“pg_basebackup_22870”
pg_basebackup:写前日志结束点:6/16000120
pg_basebackup:等待后台进程完成流式传输...
pg_basebackup:将数据同步到磁盘...
pg_basebackup:将 backup_manifest.tmp 重命名为 backup_manifest
pg_basebackup:基础备份完成
第五步:合并全量备份、周一和周二的备份
在周二的增量备份之后,你的实例发生了可怕的事情(可能是某个拥有太多实例权限的人再次执行了没有 WHERE 子句的 DELETE 查询)。将数据合并到一个新的目录中非常简单。

stoker@ThinkPad:~$ mkdir newdatadir
stoker@ThinkPad:~$ /usr/lib/postgresql/17/bin/pg_combinebackup full tuesday -o newdatadir
第六步:重启
确保将你的新数据目录的权限设置为 700,并且 postgres 账户是其所有者。停止正在运行的实例。你现在可以使用恢复后的数据目录了。将 pg_ctl 指向新的数据目录,一切就绪。

总结
增量备份会让你的生活更轻松,这也是那些尚未升级到 PostgreSQL 17 的用户升级的一个重要原因。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-18 01:34 , Processed in 0.214512 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表