如何用 postgres-backup-s3 实现定时备份:SCHEDULE 调度语法实战指南
2026/8/30 18:42:39 网站建设 项目流程

如何用 postgres-backup-s3 实现定时备份:SCHEDULE 调度语法实战指南

【免费下载链接】postgres-backup-s3A handy Docker container to periodically backup PostgreSQL to S3项目地址: https://gitcode.com/gh_mirrors/po/postgres-backup-s3

postgres-backup-s3 是一款专为定时备份设计的 Docker 容器,它能把 PostgreSQL 数据库按你设定的调度规则自动备份到 S3 对象存储。本文将从零开始,重点拆解 SCHEDULE 调度语法,帮你用最短时间搭建一套可靠的 PostgreSQL 定时备份方案。

快速上手:3 步跑通 PostgreSQL 备份到 S3

第一步:准备环境变量

复制项目根目录的 template.env,填入 S3 与数据库连接信息:

S3_REGION="us-west-1" S3_ACCESS_KEY_ID="你的密钥ID" S3_SECRET_ACCESS_KEY="你的密钥" S3_BUCKET="my-backup-bucket"

第二步:编写 docker-compose 配置

参考项目自带的 docker-compose.yaml 示例,容器镜像按 PostgreSQL 主版本标记,支持1112131415,这里以 14 为例:

services: postgres: image: postgres:14 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password backup: image: eeshugerman/postgres-backup-s3:14 environment: SCHEDULE: '@daily' # 每天备份一次 BACKUP_KEEP_DAYS: 7 # 保留7天,自动清理旧备份 S3_REGION: us-west-1 S3_ACCESS_KEY_ID: 你的密钥ID S3_SECRET_ACCESS_KEY: 你的密钥 S3_BUCKET: my-backup-bucket S3_PREFIX: backup POSTGRES_HOST: postgres POSTGRES_DATABASE: dbname POSTGRES_USER: user POSTGRES_PASSWORD: password

第三步:启动容器

docker compose up -d

容器启动后即进入调度状态,到点自动执行 backup.sh 完成pg_dump备份并上传 S3,全程无需人工干预。🚀

SCHEDULE 调度语法完全解析

SCHEDULE 是整个定时备份的核心。容器入口脚本 run.sh 的逻辑很简单:设置了 SCHEDULE 就走调度器go-cron,没设置则立即执行一次备份后退出。它支持三种写法,覆盖绝大多数场景。

写法一:五种预定义调度(最省心)

调度值含义
@hourly每小时整点备份
@daily/@midnight每天午夜备份
@weekly每周日午夜备份
@monthly每月 1 日午夜备份
@yearly/@annually每年 1 月 1 日午夜备份

比如只想要每周一次低频备份,直接写:

SCHEDULE: '@weekly'

写法二:标准 cron 五段式(最灵活)

格式为「分 时 日 月 周」,共 5 个字段,适合精确控制备份时刻:

# 每天凌晨 2 点备份 SCHEDULE: '0 2 * * *' # 每 30 分钟备份一次 SCHEDULE: '*/30 * * * *' # 每周一、周五的 03:15 备份 SCHEDULE: '15 3 * * 1,5' # 每月 1 日和 15 日早上 6 点备份 SCHEDULE: '0 6 1,15 * *'

注意:标准 cron 以容器所在时区为准,如需北京时间可配合TZ环境变量调整。

写法三:@every 间隔式(最适合高频)

不想关心具体几点,只想要「每隔多久备份一次」,就用@every

# 每 6 小时备份一次 SCHEDULE: '@every 6h' # 每 45 分钟备份一次 SCHEDULE: '@every 45m' # 每 2 天备份一次 SCHEDULE: '@every 2d'

提示:间隔式的优势是无需记忆 cron 字段,适合对备份时间点不敏感、只关心频率的场景。

不设置 SCHEDULE:一次性备份模式

如果省略 SCHEDULE 环境变量,容器启动后会立即执行一次备份并退出。这个模式非常适合手动兜底备份,或配合外部调度系统(如 Kubernetes CronJob)使用,把定时逻辑交给更上层的平台管理。

定时备份的进阶配置技巧

在 docker-compose.yaml 中组合以下变量,可以让定时备份更健壮:

  • BACKUP_KEEP_DAYS:设置保留天数,旧备份会被自动清理,避免 S3 存储无限增长(清理逻辑见 backup.sh)。
  • PASSPHRASE:设置后备份文件会用 GPG 对称加密,生成的.dump.gpg文件即使泄露也无法直接读取。
  • S3_PREFIX:指定 S3 桶内的目录前缀,多项目共用一个桶时用来隔离备份文件。
  • S3_ENDPOINT:使用 MinIO、阿里云 OSS 等兼容 S3 协议的服务时,填上对应的 Endpoint 即可。
  • PGDUMP_EXTRA_OPTS:追加pg_dump的额外参数,满足自定义备份需求。

手动触发与恢复备份

定时任务之外,你还可以随时手动触发:

# 手动执行一次备份 docker exec <容器名> sh backup.sh # 从最新备份恢复(⚠️ 会清空并重建数据库对象) docker exec <容器名> sh restore.sh # 从指定时间戳的备份恢复 docker exec <容器名> sh restore.sh 2026-08-17T02:00:00

恢复脚本逻辑见 restore.sh,支持自动寻找最新备份或按时间戳精确恢复。

总结

用 postgres-backup-s3 做 PostgreSQL 定时备份,核心就是吃透 SCHEDULE 调度语法:低频低频用@weekly@daily预定义值,精确控点用标准 cron 五段式,固定频率用@every。配合 BACKUP_KEEP_DAYS 自动清理和 PASSPHRASE 加密,一套「定时 + 加密 + 自动回收」的数据库备份体系就搭建完成了。赶快在你的项目里试起来吧!🎯

【免费下载链接】postgres-backup-s3A handy Docker container to periodically backup PostgreSQL to S3项目地址: https://gitcode.com/gh_mirrors/po/postgres-backup-s3

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

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

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

立即咨询