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 天的备份"
相关推荐
AI服务老曹2 小时前
解耦异构算力:基于 Docker 与 GB28181/RTSP 的边缘计算 AI 视频管理平台架构设计与源码交付实践
人工智能·docker·边缘计算
weixin_468466852 小时前
Prometheus监控服务部署与实战指南
服务器·后端·python·docker·自动化·prometheus
maomao大哥闯天下2 小时前
K8s对象deployment、job、service应用详解
java·容器·kubernetes
me8322 小时前
【Linux】Linux 目录命名规范溯源(Linux各个目录究竟是干嘛的)
linux·运维·数据库
土狗TuGou2 小时前
SQL内功笔记 · 第2篇:列的约束
数据库·笔记·sql
IT策士2 小时前
第 20 篇 搭建 Kubernetes 实验环境:Minikube 与 kubectl
云原生·容器·kubernetes
java_cj2 小时前
MySQL 执行原理深度剖析:查询成本计算与优化器内幕
数据库·后端·mysql
java_cj2 小时前
数据库范式化设计与性能优化全攻略
数据库·后端·性能优化·架构·开源