实用脚本能批量备份吗?

wen 实用脚本 10

本文目录导读:

实用脚本能批量备份吗?

  1. 核心思路:批量备份通用逻辑
  2. 场景1:批量备份多个重要目录(Linux Shell脚本)
  3. 场景2:批量备份多个MySQL/MariaDB数据库
  4. 场景3:批量备份并同步到远程服务器(含增量备份)
  5. 场景4:Windows 环境批量备份(PowerShell脚本)
  6. 如何运行这些脚本?
  7. 注意事项(让备份更可靠)

是的,实用脚本完全可以实现批量备份功能,无论是备份文件、数据库、还是整个服务器配置,都可以通过脚本(Shell、Python、PowerShell 等)自动化完成。

下面我会提供几个最常见场景的批量备份脚本示例,你可以直接参考或修改使用。

核心思路:批量备份通用逻辑

  1. 定义来源:需要备份的文件列表、数据库列表或目录。
  2. 定义目标:备份存放的位置(本地目录、远程服务器、云存储)。
  3. 执行操作:压缩、复制、转储。
  4. 加时间戳:防止同名覆盖。
  5. 可选的清理:删除N天前的旧备份。

场景1:批量备份多个重要目录(Linux Shell脚本)

这个脚本会批量压缩 /etc/var/www/home 目录,并加上日期。

#!/bin/bash
# batch_backup_dirs.sh
# 配置
BACKUP_DIR="/backup/files"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/batch_backup.log"
# 要备份的目录列表
DIRS_TO_BACKUP=(
    "/etc"
    "/var/www/html"
    "/home"
    "/root"
)
# 创建备份目录
mkdir -p "$BACKUP_DIR"
echo "==============================" | tee -a $LOG_FILE
echo "开始批量备份: $DATE" | tee -a $LOG_FILE
# 循环备份每个目录
for dir in "${DIRS_TO_BACKUP[@]}"; do
    # 获取目录名(去掉路径)
    dir_name=$(basename "$dir")
    # 生成备份文件名
    backup_file="${BACKUP_DIR}/${dir_name}_${DATE}.tar.gz"
    # 执行压缩备份
    tar -czf "$backup_file" "$dir" 2>&1
    # 检查是否成功
    if [ $? -eq 0 ]; then
        echo "  [成功] 备份 $dir 到 $backup_file" | tee -a $LOG_FILE
    else
        echo "  [失败] 备份 $dir" | tee -a $LOG_FILE
    fi
done
# 清理7天前的旧备份
echo "开始清理 7天前的旧备份..." | tee -a $LOG_FILE
find "$BACKUP_DIR" -name "*.tar.gz" -type f -mtime +7 -delete
echo "批量备份完成" | tee -a $LOG_FILE

场景2:批量备份多个MySQL/MariaDB数据库

适合管理多个站点或应用,每个数据库独立备份。

#!/bin/bash
# batch_backup_mysql.sh
# 配置
DB_USER="root"
DB_PASSWORD="your_password"
BACKUP_DIR="/backup/databases"
DATE=$(date +%Y%m%d_%H%M%S)
# 获取所有数据库列表(排除系统库)
DATABASES=$(mysql -u$DB_USER -p$DB_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")
mkdir -p "$BACKUP_DIR"
echo "开始批量备份数据库: $DATE"
for db in $DATABASES; do
    backup_file="${BACKUP_DIR}/${db}_${DATE}.sql.gz"
    echo "正在备份数据库: $db"
    # 导出并压缩
    mysqldump -u$DB_USER -p$DB_PASSWORD --databases "$db" | gzip > "$backup_file"
    if [ $? -eq 0 ]; then
        echo "  [成功] $db -> $backup_file"
    else
        echo "  [失败] $db"
    fi
done
# 清理30天前的旧备份
find "$BACKUP_DIR" -name "*.sql.gz" -type f -mtime +30 -delete
echo "数据库批量备份完成"

场景3:批量备份并同步到远程服务器(含增量备份)

使用 rsync 实现增量批量备份,效率高。

#!/bin/bash
# batch_rsync_backup.sh
# 配置
LOCAL_BACKUP_DIR="/backup/incremental"
REMOTE_USER="backup_user"
REMOTE_HOST="192.168.1.100"
REMOTE_DIR="/remote_backup/files"
# 要批量同步的本地目录
SOURCE_DIRS=(
    "/data/project1"
    "/data/project2"
    "/data/project3"
)
echo "开始批量rsync增量备份: $(date)"
for src in "${SOURCE_DIRS[@]}"; do
    # 获取目录名
    project=$(basename "$src")
    echo "同步 ${src} 到远程 ${REMOTE_HOST}:${REMOTE_DIR}/${project}"
    # rsync 参数说明:-a归档模式,-v详细,-z压缩,--delete删除远程多余文件
    rsync -avz --delete "$src" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/${project}"
    if [ $? -eq 0 ]; then
        echo "  [成功] $project"
    else
        echo "  [失败] $project"
    fi
done
echo "批量增量备份完成: $(date)"

场景4:Windows 环境批量备份(PowerShell脚本)

# batch_backup_windows.ps1
$BackupDir = "D:\Backups"
$Date = Get-Date -Format "yyyyMMdd_HHmmss"
$LogFile = "$BackupDir\backup_log.txt"
# 要备份的路径列表
$Paths = @(
    "C:\Users\Admin\Documents",
    "C:\Projects",
    "D:\Database"
)
# 创建备份目录
New-Item -ItemType Directory -Force -Path "$BackupDir\Files"
Write-Output "开始批量备份: $Date" | Out-File -FilePath $LogFile -Append
foreach ($Path in $Paths) {
    $FolderName = Split-Path $Path -Leaf
    $ZipFile = "$BackupDir\Files\${FolderName}_${Date}.zip"
    # 使用7-Zip或系统压缩(需要安装7-Zip或使用Compress-Archive)
    try {
        Compress-Archive -Path $Path -DestinationPath $ZipFile -Force
        Write-Output "[成功] $Path -> $ZipFile" | Out-File -FilePath $LogFile -Append
    }
    catch {
        Write-Output "[失败] $Path - $_" | Out-File -FilePath $LogFile -Append
    }
}
# 删除7天前的备份
Get-ChildItem "$BackupDir\Files\*.zip" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item
Write-Output "批量备份完成" | Out-File -FilePath $LogFile -Append

如何运行这些脚本?

  1. Linux环境

    • 保存脚本文件,batch_backup.sh
    • 赋予执行权限:chmod +x batch_backup.sh
    • 执行:./batch_backup.sh
    • 加入定时任务(crontab):每天早上3点执行
      0 3 * * * /root/scripts/batch_backup.sh
  2. Windows环境

    • 保存为 .ps1 文件
    • 打开PowerShell(管理员)
    • 先运行:Set-ExecutionPolicy RemoteSigned(允许本地脚本执行)
    • 执行:.\batch_backup_windows.ps1
    • 使用“任务计划程序”定时运行。

注意事项(让备份更可靠)

  1. 测试:先手动跑一次,确认备份文件能正常恢复。
  2. 日志:建议保留详细的备份日志,便于排查问题。
  3. 通知:可以加入 curl 或邮件命令,备份失败时发通知。
  4. 加密:敏感数据建议用 gpgopenssl 加密。
  5. 校验:备份后生成hash值(md5sum),恢复时校验完整性。

脚本实现批量备份非常实用,以上示例稍微修改路径、账号等参数即可直接投入使用,关键在于测试验证自动化定时

抱歉,评论功能暂时关闭!