postgresql数据库备份脚本

来源:本站原创 点击数: 发布时间:2025年07月02日

✅ 保存为shell脚本

#!/bin/bash

# 加载系统环境变量(可选)
source /etc/profile 2>/dev/null || true

# 定义变量
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/data/polardb_bak"
DB_NAME="数据库名"
PG_USER="用户名"
PG_HOST="localhost"   # 如果不是本地,请替换为实际IP或域名
PG_PORT="5432"        # 替换为你的PostgreSQL/PolarDB端口号
PG_PASSWORD="密码"  # 🔐 在这里设置数据库密码

# 创建备份目录(如果不存在)
mkdir -p "${BACKUP_DIR}"

# 定义备份文件名
SQL_FILE="${DB_NAME}_${DATE}.sql"
TAR_FILE="${SQL_FILE}.tar.gz"

# 设置 PGPASSWORD 环境变量
export PGPASSWORD="${PG_PASSWORD}"

# 执行备份
echo "[$(date)] 开始导出数据库: ${DB_NAME}"
pg_dump -h "${PG_HOST}" -p "${PG_PORT}" -U "${PG_USER}" "${DB_NAME}" > "${BACKUP_DIR}/${SQL_FILE}"

# 检查 pg_dump 是否成功
if [ $? -ne 0 ]; then    echo "[$(date)] ❌ 数据库导出失败!"    
exit 1
fi

# 进行压缩并删除原文件
cd "${BACKUP_DIR}" || { echo "无法进入目录:${BACKUP_DIR}"; exit 1; }

echo "[$(date)] 压缩备份文件: ${TAR_FILE}"
tar -czf "${TAR_FILE}" "${SQL_FILE}"

# 删除原始 SQL 文件
rm -f "${SQL_FILE}"
# 可选:清理超过7天的备份文件
echo "[$(date)] 正在清理过期备份..."find "${BACKUP_DIR}" -type f -name '*.tar.gz' -mtime +7 -exec rm {} \;

echo "[$(date)] ✅ 数据库备份完成。"