本文目录导读:

我来为您介绍几种常见的自动备份脚本方案,涵盖不同操作系统和使用场景。
Linux/Mac 系统备份脚本
基础文件备份脚本
#!/bin/bash
# 备份配置
BACKUP_DIR="/backup/users"
SOURCE_DIR="/home"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
# 创建备份目录
mkdir -p "$BACKUP_DIR/$DATE"
# 备份用户数据
echo "开始备份用户数据..."
tar -czf "$BACKUP_DIR/$DATE/userdata.tar.gz" "$SOURCE_DIR"
# 删除旧备份
find "$BACKUP_DIR" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \;
echo "备份完成!备份文件: $BACKUP_DIR/$DATE/userdata.tar.gz"
增量备份脚本(使用rsync)
#!/bin/bash
# 配置
SOURCE_DIR="/home"
BACKUP_DIR="/backup/users"
LOG_FILE="/var/log/backup.log"
# 时间戳函数
timestamp() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')]"
}
# 执行备份
echo "$(timestamp) 开始增量备份..." >> "$LOG_FILE"
rsync -avz --delete \
--link-dest="$BACKUP_DIR/current" \
"$SOURCE_DIR/" \
"$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S)/" \
>> "$LOG_FILE" 2>&1
# 更新当前备份链接
rm -f "$BACKUP_DIR/current"
ln -s "$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S)" "$BACKUP_DIR/current"
echo "$(timestamp) 备份完成" >> "$LOG_FILE"
Windows 系统备份脚本(PowerShell)
PowerShell备份脚本
# 备份配置
$sourceDir = "C:\Users"
$backupDir = "D:\Backup"
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$retentionDays = 30
# 创建备份目录
$backupPath = Join-Path $backupDir "UserBackup_$date"
New-Item -ItemType Directory -Path $backupPath -Force
# 需要备份的用户文件夹
$userFolders = @(
"Documents",
"Desktop",
"Pictures",
"Downloads"
)
# 获取所有用户
$users = Get-ChildItem -Path $sourceDir -Directory | Where-Object {
$_.Name -notmatch '^(Public|Default|Default User|All Users)$'
}
# 备份每个用户的数据
foreach ($user in $users) {
Write-Host "备份用户: $($user.Name)"
foreach ($folder in $userFolders) {
$sourceFolder = Join-Path $user.FullName $folder
$destFolder = Join-Path $backupPath $user.Name $folder
if (Test-Path $sourceFolder) {
# 使用Robocopy进行备份
robocopy $sourceFolder $destFolder /E /COPY:DAT /R:3 /W:5 /NP
}
}
}
# 清理旧备份
$oldBackups = Get-ChildItem -Path $backupDir -Directory |
Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-$retentionDays) }
foreach ($old in $oldBackups) {
Remove-Item -Path $old.FullName -Recurse -Force
Write-Host "删除旧备份: $($old.Name)"
}
Write-Host "备份完成!"
定时任务配置
Linux Cron 配置
# 编辑crontab crontab -e # 每天凌晨2点执行备份 0 2 * * * /path/to/backup_script.sh # 每周日凌晨3点执行完整备份 0 3 * * 0 /path/to/full_backup.sh
Windows 任务计划程序
# 创建计划任务(管理员模式运行PowerShell)
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\Backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At 2am
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount
Register-ScheduledTask -TaskName "UserBackup" `
-Action $action `
-Trigger $trigger `
-Principal $principal `
-Description "自动备份用户数据"
数据库备份示例
MySQL 数据库备份脚本
#!/bin/bash
# 数据库配置
DB_USER="root"
DB_PASS="password"
DB_NAME="mydatabase"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
# 备份数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > "$BACKUP_DIR/${DB_NAME}_$DATE.sql.gz"
# 备份所有数据库
mysqldump -u$DB_USER -p$DB_PASS --all-databases | gzip > "$BACKUP_DIR/alldb_$DATE.sql.gz"
# 保留最近7天备份
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
邮件通知功能
#!/bin/bash
# 备份和通知配置
BACKUP_FILE="/backup/userdata_$(date +%Y%m%d).tar.gz"
EMAIL="admin@example.com"
# 执行备份
tar -czf "$BACKUP_FILE" /home
# 检查备份结果
if [ $? -eq 0 ]; then
# 计算文件大小
SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
# 发送成功通知
echo "备份成功完成于 $(date)" | \
mail -s "备份成功 - 大小: $SIZE" \
-a "From: backup@server.com" \
$EMAIL
else
# 发送失败通知
echo "备份失败于 $(date)" | \
mail -s "备份失败警告" \
-a "From: backup@server.com" \
$EMAIL
fi
压缩和加密备份
#!/bin/bash # 加密备份(使用gpg) BACKUP_FILE="userbackup_$(date +%Y%m%d).tar.gz.gpg" PASSPHRASE="your-secure-passphrase" # 创建备份并加密 tar -czf - /home/user | \ gpg --batch --passphrase "$PASSPHRASE" --symmetric > "$BACKUP_FILE" # 解密还原 # gpg --batch --passphrase "$PASSPHRASE" --decrypt "$BACKUP_FILE" | tar -xzf -
使用建议
- 测试脚本:先在测试环境运行,确认没问题再部署
- 错误处理:添加完善的错误处理机制
- 日志记录:记录详细的备份日志
- 监控报警:设置失败后的通知机制
- 定期验证:定期检查备份文件的完整性
- 多重备份:考虑异地或云存储备份
选择适合您需求的方案,并根据实际情况调整参数,如果需要更详细的功能,请告知具体需求。