☰
Portabase GFS保留策略指南:一次配置搞定小时-日-周-月多级备份保留
2026/10/11 21:48:41 网站建设 项目流程

【免费下载链接】portabase

Portabase - Database backup & restore tool for PostgreSQL, MySQL, MsSQL, MariaDB, Firebird SQL, SQLite, MongoDB, Redis and Docker Volume

项目地址:https://gitcode.com/gh_mirrors/por/portabase
点击查看免费下载

Portabase 是一款面向 PostgreSQL、MySQL、MariaDB、MsSQL、SQLite、MongoDB、Redis 及 Docker Volume 的开源数据库备份与恢复工具。本文带你像专家一样配置它的 GFS(Grandfather-Father-Son)保留策略,用"小时-日-周-月-年"多级保留,同时满足快速回滚和长期归档需求。

什么是GFS保留策略?为什么推荐它?

GFS(祖父-父亲-儿子)是业界经典的多级备份轮换策略,核心思想一句话概括:

近期备份留得多、恢复粒度细;远期备份留得少、保留时间长。

例如保留最近 24 小时的小时级备份、7 天日备份、4 周周备份、12 个月月备份、3 年年备份。这样你既能回滚到"一小时前",也能恢复到"三年前",而且总文件数可控、存储不爆炸。

Portabase 提供三种保留策略,其中 GFS 被官方标记为Recommended(推荐):

策略类型适用场景说明
count(按数量)简单需求只保留最近 N 份备份(1~100)
days(按天数)简单需求保留 X 天内的备份(1~3650 天)
gfs(轮换)生产/关键系统 ⭐小时/日/周/月/年五级保留,企业级标准

GFS 选项在界面上的介绍正是:"Grandfather-Father-Son rotation for enterprise/critical systems",即面向企业和关键系统的备份轮换方案。

一键配置步骤:在哪里设置保留策略?

配置入口只有两步:

  1. 进入项目中的某个数据库详情页;
  2. 打开Backup Retention Policy侧边抽屉,选择策略类型并填写数值,点击Save Retention Policy即可。

保存后,Portabase 的定时任务会按你的策略自动清理过期备份,全程无需手动干预。

策略配置界面说明

界面由三部分组成:

  • 策略类型选择:count / days / GFS Rotation(GFS 带"Recommended"徽章,当前生效类型带"Actual"徽章);
  • 数值配置区:GFS 模式下有 Hourly、Daily、Weekly、Monthly、Yearly 五个输入框;
  • Storage Impact Summary(存储影响摘要):实时估算每个数据库会保留多少备份文件,并给出 Low / Medium / High 的用量等级,帮你提前预判存储成本。

相关界面源码在 retention-policy-form.tsx 和 retention-policy-sheet.tsx,保存逻辑由 retention-policy.action.ts 完成。

五级参数详解:小时-日-周-月-年保留范围

每个层级的含义是"每个时间桶内保留 1 份备份",可配置的保留范围如下:

层级含义保留范围典型用途
🕐Hourly(小时)每小时桶保留最近 N 个小时0 ~ 168(最长一周)快速回滚误操作
📅Daily(日)每日桶保留最近 N 天1 ~ 31(必选至少 1)应对当天/近几天故障
🗓Weekly(周)每周桶保留最近 N 周0 ~ 52回滚到上周某版本
📆Monthly(月)每月桶保留最近 N 个月0 ~ 120(最长 10 年)月度审计、季度对比
🏆Yearly(年)每年桶保留最近 N 年0 ~ 50合规归档、长期保存

填写为 0 表示禁用该层级。所有取值上限都在表单校验中严格限制,见 retention-policy.schema.ts。

官方默认值与数据库默认值

Portabase 有两组默认值,可以直接抄作业:

  • 新建数据库时的数据库表默认值(07_database.ts):hourly=0, daily=7, weekly=4, monthly=12, yearly=3
  • 引导向导(Onboarding)推荐值(db-settings.ts):同样是{hourly: 0, daily: 7, weekly: 4, monthly: 12, yearly: 3}

这是一套非常均衡的入门配置:约 26 份文件/数据库/年,覆盖"最近 7 天 + 最近 4 周 + 最近 12 个月 + 最近 3 年"。

⚠️ 小时层级的一个重要前提

界面对 Hourly 字段有一条醒目的黄色提示:默认RETENTION_CRON任务每天只跑一次,若不把该环境变量覆盖为至少每小时执行一次,小时层级不会生效。生产环境默认每天 07:00 执行一次保留清理(env.mjs)。所以:

  • 想启用小时级保留 → 先确认备份任务本身按小时调度,并把RETENTION_CRON调整为更高频率;
  • 备份每天一次 → 直接设hourly=0,把预算留给日/周/月/年。

工作原理:Portabase如何自动执行GFS轮换?

配置保存后,背后是一条完整的自动化链路:

  1. 定时触发:保留任务由 cron 作业retentionJob调度(tasks/index.ts),默认生产环境每天 07:00 运行;
  2. 策略解析:任务遍历所有未删除的数据库,解析其生效策略(tasks/database/index.ts)。支持数据库级覆盖项目级——若数据库没有自己的保留策略,则继承所属项目的策略(policy-resolution.ts),方便统一管理;
  3. 分桶筛选:GFS 核心算法(retention-gsf.ts)按备份创建时间归入"小时桶 / 日桶 / 周桶(周一起始)/ 月桶 / 年桶",每个桶只保留第一份成功的备份,不在保留集合内的备份会被自动删除;
  4. 延迟清理:被标记删除的备份记录还会由独立的清理任务按CLEANING_BACKUPS_RETENTION_DAYS分批彻底清除(backups-cleanup.ts)。

一句话总结:你只需要填 5 个数字,剩下的"分级晋升 + 过期淘汰"Portabase 全自动完成。

推荐配置方案:按场景选参数

场景HourlyDailyWeeklyMonthlyYearly说明
🌱 入门/个人074123官方默认,约 26 份文件,覆盖 3 年
💼 生产核心库0148243翻倍近期粒度,留 2 年月度归档
🚀 高频变更(需小时级)2474123可回滚到 1 小时前,需配合小时级备份与更频繁的RETENTION_CRON
🏛 合规归档074601010 年年度归档 + 5 年月度,满足审计要求

💡 小技巧:每调整一次数值,界面上的Storage Impact Summary会立刻显示"预计保留文件数"和用量等级(≤10 份为 Low、≤30 份为 Medium、更多为 High),保存前先对照你的存储预算确认即可。

常见配置误区清单

  • 误区 1:只填 Hourly、不填其他层级—— GFS 的价值在长期保留,小时层过期后没有兜底,务必保证daily ≥ 1(该字段也强制最少为 1);
  • 误区 2:以为 Hourly 填了就能用—— 备份任务与RETENTION_CRON都必须至少小时级调度,否则该层级形同虚设;
  • 误区 3:把 Monthly 拉到 120 就完事—— 年度层(最多 50 年)才是超长周期归档的主力,月度留太多只会挤压存储;
  • 误区 4:每个数据库都单独配置—— 可以在项目级配置一套统一策略,数据库未单独配置时自动继承,需要差异化时再在数据库级覆盖。

总结:三步成为备份保留专家

  1. 选类型:生产环境直接选 GFS Rotation;
  2. 填五级:从官方默认{0, 7, 4, 12, 3}出发,按场景上调;
  3. 看摘要:用 Storage Impact Summary 核对文件数与存储用量,然后 Save。

配置完成后,Portabase 的定时任务会持续按策略自动轮换备份,小时级快速回滚 + 年級长期归档一次搞定——这就是企业级备份该有的样子。

📂 更多相关实现可参考:保留策略表单 retention-policy-form.tsx、GFS 执行逻辑 retention-gsf.ts、策略继承规则 policy-resolution.ts。

【免费下载链接】portabase

Portabase - Database backup & restore tool for PostgreSQL, MySQL, MsSQL, MariaDB, Firebird SQL, SQLite, MongoDB, Redis and Docker Volume

项目地址:https://gitcode.com/gh_mirrors/por/portabase
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询