Oracle服务器备份百度云盘.md 3.1 KB


title: Oracle服务器备份百度云盘 date: 2024-12-13T21:12:16+08:00

lastmod: 2024-12-13T21:15:19+08:00

Oracle服务器备份百度云盘

#!/bin/bash

# 基础配置
backup_dir="/mnt/mydata/backup"  # 本地备份路径
data_dir="/mnt/mydata"    # 要备份的目录
hostname=$(hostname)      # 获取主机名
cloud_dir="backup/$hostname"  # 云端存储路径,使用hostname区分
log_file="/var/log/bypy_backup.log"  # 日志文件

# 云端保留的最大备份数
max_cloud_backups=3

# 日志函数
log_message() {
    echo "$(date +'%Y-%m-%d %H:%M:%S') - $1" >> "$log_file"
    echo "$1"
}

# 创建本地备份目录
mkdir -p "$backup_dir"

# 生成备份文件名
backup_file="backup-$hostname-$(date +'%Y-%m-%d').tar.gz"
backup_path="$backup_dir/$backup_file"

# 1. 首先创建新备份
log_message "开始创建备份文件..."
tar -czf "$backup_path" \
    --exclude="$data_dir/.Recycle_bin" \
    --exclude="$backup_dir" \
    "$data_dir" 2>/dev/null

if [ $? -eq 0 ]; then
    log_message "备份文件创建成功: $backup_path"
else
    log_message "备份文件创建失败"
    exit 1
fi

# 2. 然后清理本地旧备份
num_local_backups=$(ls -l "$backup_dir" | grep ^- | grep 'backup-' | wc -l)
if [ $num_local_backups -gt 1 ]; then
    oldest_local_backup=$(ls -t "$backup_dir" | grep 'backup-' | tail -1)
    rm "$backup_dir/$oldest_local_backup"
    log_message "删除本地旧备份: $oldest_local_backup"
fi

# 3. 确保云端目录存在
log_message "确保云端目录存在..."
/www/server/pyporject_evn/versions/3.13.0/bin/bypy mkdir "$cloud_dir"

# 4. 上传到云端
log_message "开始上传到云端..."
/www/server/pyporject_evn/versions/3.13.0/bin/bypy -v syncup "$backup_dir" "$cloud_dir" 2>&1 | while IFS= read -r line; do
    if [[ $line =~ ^\[.*%.*MB\/.*MB.*ETA.* ]] || \
       [[ $line =~ ^Done$ ]] || \
       [[ $line == *"100%"* ]]; then
        echo "$line"
        echo "$(date +'%Y-%m-%d %H:%M:%S') - $line" >> "$log_file"
    fi
done

log_message "备份上传到云端完成"

# 5. 清理云端旧备份
log_message "开始清理云端旧备份..."
cloud_files=$(/www/server/pyporject_evn/versions/3.13.0/bin/bypy list "$cloud_dir" | grep "backup-" | awk '{print $2}')

# 按文件名(即备份日期)排序
sorted_cloud_files=$(echo "$cloud_files" | sort)

# 计算云端备份文件的数量
cloud_backup_count=$(echo "$sorted_cloud_files" | wc -l)

# 如果备份文件数量超过最大备份数量,则删除最旧的备份
if [ $cloud_backup_count -gt $max_cloud_backups ]; then
    # 获取需要删除的最旧备份文件
    files_to_delete=$(echo "$sorted_cloud_files" | head -n $(($cloud_backup_count - $max_cloud_backups)))
  
    # 删除这些文件
    while IFS= read -r file; do
        /www/server/pyporject_evn/versions/3.13.0/bin/bypy delete "$cloud_dir/$file"
        log_message "删除云端旧备份: $file"
    done <<< "$files_to_delete"
fi

log_message "备份流程完成"

# 显示当前云端备份列表
log_message "当前云端备份列表:"
/www/server/pyporject_evn/versions/3.13.0/bin/bypy list "$cloud_dir" >> "$log_file"