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 天的备份"
相关推荐
XM_jhxx4 小时前
简会AI图纸识别系统功能上新:模板、公差、量具个性化配置上线!
数据库·人工智能·软件工程
java资料站4 小时前
十、向量数据库
数据库
Ivanqhz5 小时前
干涉图着色
java·服务器·网络·数据库·人工智能·深度学习
guo_wen_qiang5 小时前
云服务器elasticsearch环境搭建-单台
运维·elasticsearch·容器
꯭自꯭闭꯭5 小时前
达梦DMDSC主备搭建
linux·服务器·数据库
用户EasyAdminBlazor5 小时前
EasyAdminBlazor 审批并发控制:两个人同时审批为什么只能成功一个?
数据库
杨云龙UP6 小时前
TDengine Community 超级表建表实战:统一21个TAG与DOUBLE/字符串数据模板
运维·服务器·数据库·时序数据库·tdengine·涛思数据·stable建表
katasea6 小时前
第05章:信创技术栈选型:服务器、操作系统、数据库、中间件适配对比
服务器·数据库·中间件
梓沂6 小时前
记一次 Oracle 测试库自动刷新脚本的踩坑实录
数据库·oracle
2501_931803756 小时前
MySQL 索引核心原理
数据库·mysql