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

📅 2026/8/18 17:12:03
如何用 postgres-backup-s3 实现定时备份:SCHEDULE 调度语法实战指南
如何用 postgres-backup-s3 实现定时备份SCHEDULE 调度语法实战指南【免费下载链接】postgres-backup-s3A handy Docker container to periodically backup PostgreSQL to S3项目地址: https://gitcode.com/gh_mirrors/po/postgres-backup-s3postgres-backup-s3 是一款专为定时备份设计的 Docker 容器它能把 PostgreSQL 数据库按你设定的调度规则自动备份到 S3 对象存储。本文将从零开始重点拆解 SCHEDULE 调度语法帮你用最短时间搭建一套可靠的 PostgreSQL 定时备份方案。快速上手3 步跑通 PostgreSQL 备份到 S3第一步准备环境变量复制项目根目录的 template.env填入 S3 与数据库连接信息S3_REGIONus-west-1 S3_ACCESS_KEY_ID你的密钥ID S3_SECRET_ACCESS_KEY你的密钥 S3_BUCKETmy-backup-bucket第二步编写 docker-compose 配置参考项目自带的 docker-compose.yaml 示例容器镜像按 PostgreSQL 主版本标记支持11、12、13、14、15这里以 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),仅供参考