
interaction/restic-pg-dumprestic-pg-dump是一个Docker镜像,用于为指定PostgreSQL服务器上的每个数据库单独运行pg_dump,并通过restic工具执行增量加密备份。该镜像默认配置了完整的备份策略,适用于需要定期、安全备份PostgreSQL数据库的场景。
适用于需要定期备份PostgreSQL数据库并确保数据可恢复性的场景,尤其适合生产环境中对数据库备份有严格时间策略和安全要求的用户。支持单数据库集群或多数据库集群的备份需求。
通过docker run命令启动容器,需提供必要的环境变量配置AWS、PostgreSQL和restic的凭证信息:
bash$ docker run \ -d \ -e AWS_ACCESS_KEY_ID='...' \ -e AWS_SECRET_ACCESS_KEY='...' \ -e PGHOST='...' \ -e PGPASSWORD='...' \ -e PGUSER='...' \ -e RESTIC_PASSWORD='...' \ -e RESTIC_REPOSITORY='s3:s3.amazonaws.com/...' \ --name restic-pg-dump \ --restart always \ interaction/restic-pg-dump
除上述必填环境变量外,可通过以下变量覆盖默认配置:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
RESTIC_BACKUP_SCHEDULE | 备份定时任务计划(cron格式) | 0 * * * *(每小时) |
RESTIC_PRUNE_SCHEDULE | 清理旧快照的定时任务计划(cron格式,为空字符串可禁用) | 0 14 * * 0(每周日14:00) |
PGPORT | PostgreSQL端口 | 5432 |
RESTIC_KEEP_HOURLY | 保留的每小时快照数量 | 24 |
RESTIC_KEEP_DAILY | 保留的每日快照数量 | 7 |
RESTIC_KEEP_WEEKLY | 保留的每周快照数量 | 4 |
RESTIC_KEEP_MONTHLY | 保留的每月快照数量 | 12 |
RESTIC_KEEP_YEARLY | 保留的每年快照数量(默认未提及,可通过该变量设置) | - |
支持同时备份最多5个不同的PostgreSQL数据库集群,通过以下环境变量配置([1..5]表示集群编号,如1-5):
bash-e HOSTNAME_2='...' # 集群2的主机名(若PGHOST不是完全限定域名) -e PGHOST_2='...' # 集群2的PostgreSQL主机 -e PGPASSWORD_2='...' # 集群2的PostgreSQL密码 -e PGPORT_2='5432' # 集群2的PostgreSQL端口 -e PGUSER_2='...' # 集群2的PostgreSQL用户名
注:项目提供了
docker-compose.yml文件,便于快速部署。
从示例文件创建.envrc,并更新AWS、PostgreSQL和restic凭证:
bash$ wget [***] -O .envrc
限制.envrc文件访问权限(包含敏感凭证):
bash$ chmod 600 .envrc
安装direnv(通过Homebrew)并配置自动加载.envrc:
bash$ brew install direnv $ eval "$(direnv hook bash)" # 根据shell类型(zsh/fish/tcsh等)调整,并添加到shell配置文件 $ direnv allow
安装restic(通过Homebrew):
bash$ brew install restic
列出快照:
bash$ restic snapshots
恢复指定服务器的最新快照:
bash$ restic restore --host {HOSTNAME} --target "restore/{HOSTNAME}" latest
从指定服务器的最新快照中恢复匹配模式的文件:
bash$ restic restore --host "{HOSTNAME}" --target "restore/{HOSTNAME}" --include '*-production.sql' latest
通过fuse挂载仓库(只读):
bash$ restic mount mnt
挂载后,可在另一个终端访问最新快照:
bash$ ls -l "mnt/hosts/{HOSTNAME}/latest" $ psql -f "mnt/hosts/{HOSTNAME}/latest/pg_dump/{DBNAME}.sql" {DBNAME}
警告:通过fuse挂载restic仓库会获取独占锁,在释放锁前会阻止所有定时备份。




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务