feat: enhance backup process for PostgreSQL data

- Added special handling for PostgreSQL data directories to ensure
  proper backup of the `pg_wal` folder.
- Backup now distinguishes between standard and PostgreSQL specific
  logic, improving the reliability of database backups.
- Implemented warnings suppression for unchanged files to prevent
  clutter during backups.

This update improves the robustness of the backup process, ensuring
that PostgreSQL data is handled correctly while also maintaining
standard directory backup functionality, providing better clarity
and usability to users performing backups.
This commit is contained in:
songtianlun 2025-04-22 22:03:36 +08:00
parent f27876c6ab
commit 53347b6ca6

View File

@ -53,20 +53,30 @@ data:
DIR_NAME=$(basename "$dir") DIR_NAME=$(basename "$dir")
TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S) TIMESTAMP=$(date +%Y-%m-%d-%H-%M-%S)
BACKUP_NAME="backup-${DIR_NAME}-${TIMESTAMP}.tar.gz" BACKUP_NAME="backup-${DIR_NAME}-${TIMESTAMP}.tar.gz"
TEMP_DIR="/tmp/data/${TIMESTAMP}/"
BACKUP_PATH="/tmp/${BACKUP_NAME}" BACKUP_PATH="/tmp/${BACKUP_NAME}"
SOURCE_SIZE=$(du -sh /data/local-csi | cut -f1) SOURCE_SIZE=$(du -sh /data/local-csi | cut -f1)
echo "正在备份目录: $dir" echo "正在备份目录: $dir"
mkdir -p "$TEMP_DIR/$DIR_NAME" if [[ "$DIR_NAME" == *"pg"* ]] && [ -d "/data/local-csi/$DIR_NAME/pg_wal" ]; then
rsync -a "/data/local-csi/$DIR_NAME/" "$TEMP_DIR/$DIR_NAME/" echo "检测到 PostgreSQL 数据目录,使用特殊处理..."
# 创建备份压缩包
# tar -czf "$BACKUP_PATH" -C "/data/local-csi" "$DIR_NAME"
tar -czf "$BACKUP_PATH" -C "$TEMP_DIR" "$DIR_NAME"
# 清理临时目录 TEMP_DIR="/tmp/data/${TIMESTAMP}/"
rm -rf "$TEMP_DIR"
mkdir -p "$TEMP_DIR/$DIR_NAME"
rsync -a "/data/local-csi/$DIR_NAME/" "$TEMP_DIR/$DIR_NAME/"
# 创建备份压缩包
tar -czf "$BACKUP_PATH" -C "$TEMP_DIR" "$DIR_NAME"
# 清理临时目录
rm -rf "$TEMP_DIR"
else
# tar -czf "$BACKUP_PATH" -C "/data/local-csi" "$DIR_NAME"
# 普通目录使用标准备份,但忽略文件变更警告
tar --warning=no-file-changed -czf "$BACKUP_PATH" -C "/data/local-csi" "$DIR_NAME" || {
echo "备份 $DIR_NAME 时出现警告,继续处理..."
}
fi
# 计算上传路径 # 计算上传路径
BACKUP_TARGET_PATH="s3://${S3_BUCKET}/${S3_SUBPATH}/${HOSTNAME}/${DIR_NAME}/" BACKUP_TARGET_PATH="s3://${S3_BUCKET}/${S3_SUBPATH}/${HOSTNAME}/${DIR_NAME}/"