
itbm/postgresql-backup-s3用于在PostgreSQL数据库与S3存储之间进行备份和恢复操作,支持定期备份和加密功能。可通过环境变量配置实现灵活的备份策略,适用于需要将PostgreSQL数据安全存储到S3或从S3恢复的场景。
SCHEDULE环境变量)ENCRYPTION_PASSWORD)pigz替代gzip)DELETE_OLDER_THAN)sh$ docker run -e S3_ACCESS_KEY_ID=密钥 -e S3_SECRET_ACCESS_KEY=密钥 -e S3_BUCKET=我的桶 -e S3_PREFIX=backup -e POSTGRES_DATABASE=数据库名 -e POSTGRES_USER=用户名 -e POSTGRES_PASSWORD=密码 -e POSTGRES_HOST=localhost itbm/postgres-backup-s3
sh$ docker run -e S3_ACCESS_KEY_ID=密钥 -e S3_SECRET_ACCESS_KEY=密钥 -e S3_BUCKET=我的桶 -e BACKUP_FILE=backup/数据库名_0000-00-00T00:00:00Z.sql.gz -e POSTGRES_DATABASE=数据库名 -e POSTGRES_USER=用户名 -e POSTGRES_PASSWORD=密码 -e POSTGRES_HOST=localhost -e CREATE_DATABASE=yes itbm/postgres-backup-s3
注意:当提供BACKUP_FILE环境变量时,容器会自动执行恢复过程而非备份。
yamlapiVersion: v1 kind: Namespace metadata: name: backup --- apiVersion: apps/v1 kind: Deployment metadata: name: postgresql namespace: backup spec: selector: matchLabels: app: postgresql strategy: type: Recreate template: metadata: labels: app: postgresql spec: containers: - name: postgresql image: itbm/postgresql-backup-s3 imagePullPolicy: Always env: - name: POSTGRES_DATABASE value: "" - name: POSTGRES_HOST value: "" - name: POSTGRES_PORT value: "" - name: POSTGRES_PASSWORD value: "" - name: POSTGRES_USER value: "" - name: S3_ACCESS_KEY_ID value: "" - name: S3_SECRET_ACCESS_KEY value: "" - name: S3_BUCKET value: "" - name: S3_ENDPOINT value: "" - name: S3_PREFIX value: "" - name: SCHEDULE value: ""
| 变量名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| POSTGRES_DATABASE | 是 | 需备份/恢复的数据库名,或使用'all'表示备份/恢复所有数据库 | |
| POSTGRES_HOST | 是 | PostgreSQL数据库主机地址 | |
| POSTGRES_PORT | 5432 | 否 | PostgreSQL数据库端口 |
| POSTGRES_USER | 是 | PostgreSQL数据库用户名 | |
| POSTGRES_PASSWORD | 是 | PostgreSQL数据库密码 | |
| POSTGRES_EXTRA_OPTS | 否 | PostgreSQL额外选项参数 | |
| S3_ACCESS_KEY_ID | 是 | AWS访问密钥 | |
| S3_SECRET_ACCESS_KEY | 是 | AWS密钥 | |
| S3_BUCKET | 是 | AWS S3桶路径 | |
| S3_PREFIX | backup | 否 | S3桶中的路径前缀 |
| S3_REGION | us-west-1 | 否 | AWS S3桶所在区域 |
| S3_ENDPOINT | 否 | AWS S3兼容API的端点URL(如minio服务器) | |
| S3_S3V4 | no | 否 | 设置为'yes'启用AWS Signature Version 4,minio服务器需启用此选项 |
| SCHEDULE | 否 | 备份调度时间,格式参考下方说明 | |
| ENCRYPTION_PASSWORD | 否 | 用于加密/解密备份文件的密码 | |
| DELETE_OLDER_THAN | 否 | 删除指定时间前的旧备份,格式及警告见下方说明 | |
| USE_CUSTOM_FORMAT | no | 否 | 设置为'yes'使用PostgreSQL自定义格式(-Fc),而非默认纯文本压缩格式 |
| COMPRESSION_CMD | gzip | 否 | 用于压缩备份的命令(如'pigz'用于并行压缩),自定义格式时忽略 |
| DECOMPRESSION_CMD | gunzip -c | 否 | 用于解压缩备份的命令(如'pigz -dc'用于并行解压缩),自定义格式时忽略 |
| PARALLEL_JOBS | 1 | 否 | 使用自定义格式恢复时的并行任务数 |
| BACKUP_FILE | 恢复必填 | 恢复时需指定的S3备份文件路径,格式:S3_PREFIX/文件名 | |
| CREATE_DATABASE | no | 否 | 恢复时:设置为'yes'在数据库不存在时创建数据库 |
| DROP_DATABASE | no | 否 | 恢复时:设置为'yes'先删除数据库再恢复(警告:会销毁现有数据),需与CREATE_DATABASE=yes配合使用 |
通过设置SCHEDULE环境变量可实现自动定期备份,例如-e SCHEDULE="@daily"表示每日执行备份。调度格式详情可参考此处。
设置DELETE_OLDER_THAN环境变量可自动删除旧备份,例如-e DELETE_OLDER_THAN="30 days ago"表示删除30天前的备份。
警告:此操作会删除S3_PREFIX路径下的所有文件,不仅限于此脚本创建的备份文件。
设置ENCRYPTION_PASSWORD环境变量(如-e ENCRYPTION_PASSWORD="超强密码")可对备份文件加密。恢复时,若正确设置该变量,会自动检测并解密加密备份。也可手动解密:openssl aes-256-cbc -d -in backup.sql.gz.enc -out backup.sql.gz。
-e USE_CUSTOM_FORMAT=yes启用POSTGRES_DATABASE=all时不支持此格式(pg_dumpall不支持)纯文本格式默认使用gzip压缩,多核心系统可使用pigz(并行gzip)提升性能:
sh# 备份时使用pigz压缩 $ docker run ... -e COMPRESSION_CMD=pigz ... itbm/postgres-backup-s3 # 恢复时使用pigz解压缩 $ docker run ... -e DECOMPRESSION_CMD="pigz -dc" ... itbm/postgres-backup-s3
sh# 使用自定义格式备份 $ docker run ... -e USE_CUSTOM_FORMAT=yes ... itbm/postgres-backup-s3 # 使用自定义格式并行恢复(4个并行任务) $ docker run ... -e PARALLEL_JOBS=4 -e BACKUP_FILE=backup/dbname_0000-00-00T00:00:00Z.dump ... itbm/postgres-backup-s3



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