PG数据库 Docker 容器自动备份方案

bash 复制代码
#!/bin/bash

# ================= 配置区 =================
CONTAINER_NAME="postgres-st-postgis-1"
DB_USER="postgres"
DB_NAME="test_back"          # 单库备份时使用
DB_PORT="5432"

BACKUP_DIR="/data/backup/postgres"
DATE=$(date +"%Y%m%d_%H%M%S")
KEEP_DAYS=7

# 备份模式:single | all
BACKUP_MODE="single"
# =========================================

mkdir -p "$BACKUP_DIR"

echo "[$(date)] 开始 PostgreSQL 备份(模式:$BACKUP_MODE)"

if [ "$BACKUP_MODE" = "single" ]; then
    # ---------- 单库备份 ----------
    BACKUP_FILE="$BACKUP_DIR/pg_${DB_NAME}_${DATE}.dump"

    docker exec "$CONTAINER_NAME" \
      pg_dump \
	    -h localhost \
        -U "$DB_USER" \
        -d "$DB_NAME" \
        -p "$DB_PORT" \
        -Fc \
        -f "/tmp/$(basename "$BACKUP_FILE")"

    docker cp "$CONTAINER_NAME:/tmp/$(basename "$BACKUP_FILE")" "$BACKUP_FILE"
    docker exec "$CONTAINER_NAME" rm -f "/tmp/$(basename "$BACKUP_FILE")"

elif [ "$BACKUP_MODE" = "all" ]; then
    # ---------- 全库备份 ----------
    BACKUP_FILE="$BACKUP_DIR/pg_all_${DATE}.sql"

    docker exec "$CONTAINER_NAME" \
      pg_dumpall \
        -U "$DB_USER" \
        -p "$DB_PORT" \
        > "$BACKUP_FILE"

else
    echo "[$(date)] 未知的 BACKUP_MODE:$BACKUP_MODE"
    exit 1
fi

# 校验备份结果
if [ $? -eq 0 ] && [ -s "$BACKUP_FILE" ]; then
    echo "[$(date)] 备份成功:$BACKUP_FILE"
else
    echo "[$(date)] 备份失败"
    exit 1
fi

# 清理过期备份
find "$BACKUP_DIR" -type f \( -name "*.dump" -o -name "*.sql" \) -mtime +$KEEP_DAYS -delete
echo "[$(date)] 已清理超过 $KEEP_DAYS 天的备份"
相关推荐
To_OC1 小时前
跑了3个Docker容器后,我终于搞懂镜像和容器到底啥关系
后端·docker·容器
oradh3 小时前
Oracle闪回技术操作总结
数据库·oracle·oracle闪回技术操作总结·oracle闪回·flashback技术
ltl4 小时前
RocksDB 并发 Compaction 与 Rate Limiter
数据库
tryCbest4 小时前
Docker 从零到精通:知识与跨平台使用指南
docker·容器
闻道且行之5 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
夏炳辉.6 小时前
PostgreSQL 高可用集群核心配置参数全解:从原生流复制到 Patroni 企业级方案
数据库·postgresql
努力的小雨7 小时前
KES 开启 SSL 前,证书、端口和客户端要一起验
数据库
DevOps老兵7 小时前
AI全栈知识07:向量数据库 - Milvus/Chroma实战
数据库·ai·milvus
这个DBA有点耶7 小时前
当数据库从“存储”走向“决策”:金仓数据库的融合架构之路
数据库·架构·aigc
开始学AI7 小时前
Codex2API Docker 使用宿主机代理:OAuth Token 兑换 403 问题排查与解决方案
运维·docker·容器