--- title: Oracle服务器备份百度云盘 date: 2024-12-13T21:12:16+08:00 lastmod: 2024-12-13T21:15:19+08:00 --- # Oracle服务器备份百度云盘 ```shell #!/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" ```