惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
IT之家
IT之家
博客园 - 聂微东
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
小众软件
小众软件
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
博客园 - 三生石上(FineUI控件)
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
量子位
月光博客
月光博客
博客园 - 【当耐特】
博客园 - 叶小钗

博客园 - 记得承诺过

PGSQL 数据恢复 流程审批节点审批信息 PeopleSoft网关 Linux 两台服务器 SSH 免密登录完整配置文档(含最终测试\+rsync免密) - 记得承诺过 openclaw的记忆机制 会话机制及子AGENT和独立AGENT openclaw的几个MD文件 OPENCLAWW安装 MCP server client交互,MCP tools鉴权 Python环境及Nodejs管理 linux 权限chmod -chown-chgrp 查询应页面的权限 获取上一行记录lag ORACLE SQLplus 登录 数据库性能优化 PeopleSoft translate value 排序 PeopleSoft Excel To CI Oracle sql function LISTAGG和字符替换 regexp_replace 据库都有哪些锁 然后 Kill session PeopleSoft Rich Text Boxes上定制Tool Bars Oracle 多行变一列的方法 Datatypes translation between Oracle and SQL Server 子节点,子部门的写法 peoplesoft SQR language
pgSQL备份
记得承诺过 · 2026-07-31 · via 博客园 - 记得承诺过

以下是备份脚本 backup.sh postgres执行
#stgreSQL 生产环境逻辑备份脚本
# 建议配合 WAL 归档(PITR)使用
# ============================================================

set -euo pipefail  # 遇到错误立即退出,未定义变量报错,管道错误传播

# ---------- 配置项 ----------
BACKUP_DIR="/data2/pg_backup"
SAVE_DAYS=30                           # 保留30天,不是7天
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="${BACKUP_DIR}/backup_$(date +%Y%m%d).log"
PG_HOST="127.0.0.1"
PG_PORT="5432"
PG_USER="postgres"

# 业务数据库,多个用空格隔开
DB_NAMES="pms_prod"

# ---------- 初始化 ----------
DAILY_DIR="${BACKUP_DIR}/${DATE}"
mkdir -p "${DAILY_DIR}"

# 日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "${LOG_FILE}"
}

# 错误退出
error_exit() {
    log "ERROR: $*"
    exit 1
}

log "========== 备份开始 =========="
log "备份目录: ${DAILY_DIR}"

# 检查磁盘空间(至少保留20%或5G,防止撑爆磁盘)
AVAIL_KB=$(df -k "${BACKUP_DIR}" | awk 'NR==2 {print $4}')
if [ "${AVAIL_KB}" -lt 5242880 ]; then
    error_exit "备份目录磁盘空间不足,剩余小于5G(当前: $((AVAIL_KB/1024))M)"
fi

# ---------- 1. 全局对象备份(角色、表空间、权限) ----------
# 注意:pg_dumpall --globals-only 只备份角色等全局对象,不备份业务数据,恢复更快
log "备份全局对象(角色/表空间)..."
pg_dumpall --globals-only \
  | gzip > "${DAILY_DIR}/globals_${DATE}.sql.gz" \
  || error_exit "全局对象备份失败"
log "全局对象备份完成"

# ---------- 2. 整实例全量逻辑备份(可选,数据量大建议关掉,只靠 pg_basebackup) ----------
# 如果数据量 < 50G 可以保留,否则建议注释掉,用 pg_basebackup 做物理备份
log "备份整实例..."
pg_dumpall \
  | gzip > "${DAILY_DIR}/pg_all_${DATE}.sql.gz" \
  || error_exit "整实例备份失败"
log "整实例备份完成"

# ---------- 3. 逐个业务库二进制备份(自定义格式,支持单表/单库恢复) ----------
for db in ${DB_NAMES}; do
    log "备份数据库: ${db} ..."
    pg_dump \
      -d "${db}" \
      -Fc -Z6 \
      -f "${DAILY_DIR}/${db}_${DATE}.dump" \
      || error_exit "数据库 ${db} 备份失败"
    
    # 检查备份文件大小(不能为0)
    SIZE=$(stat -c%s "${DAILY_DIR}/${db}_${DATE}.dump")
    if [ "${SIZE}" -lt 1024 ]; then
        error_exit "数据库 ${db} 备份文件异常,大小: ${SIZE} bytes"
    fi
    log "数据库 ${db} 备份完成,大小: $((SIZE/1024/1024))M"
done

# ---------- 4. 清理过期备份 ----------
log "清理 ${SAVE_DAYS} 天前的备份..."
find "${BACKUP_DIR}" -maxdepth 1 -type d -name "20*" -mtime +${SAVE_DAYS} -print -exec rm -rf {} + \
  | tee -a "${LOG_FILE}"

# 清理7天前的日志
find "${BACKUP_DIR}" -maxdepth 1 -name "backup_*.log" -mtime +7 -delete

log "========== 备份完成 =========="