本文将介绍如何通过一个智能化的Shell脚本,实现全量压缩备份增量实时同步的双重保护机制,打造“一键无忧”的自动化备份方案。将数据同步备份到另一台服务器上。

注意:代码需要修改相关信息

#!/bin/bash

# 通用配置
SRC_DIRS="/root/data"                # 源目录列表(空格分隔)
SERVER_B_IP="xx.xx.xx.xx"         # 备份服务器IP
SSH_USER="root"                      # SSH用户
SSH_PORT="22"                        # SSH端口
BACKUP_NAME_PREFIX="xxxx"     # 备份名前缀

# 全量备份配置
ZIP_DST_DIR="/root/backup/zip-data"  # 压缩包存放目录
MAX_BACKUPS=3                        # 最大保留备份数
ARCHIVE_FORMAT="tar.gz"              # 压缩格式

# 增量备份配置
RSYNC_DST_DIR="/root/backup/rsync"   # rsync目标目录

usage() {
    echo "用法: $0 [模式]"
    echo "可用模式:"
    echo "  full      执行全量压缩备份(默认模式)"
    echo "  incr      执行增量rsync备份"
    echo "  all       同时执行全量和增量备份"
    exit 1
}

full_backup() {
    echo "正在执行全量备份..."
    current_date=$(date +"%Y%m%d_%H%M%S")
    backup_filename="${BACKUP_NAME_PREFIX}_${current_date}.${ARCHIVE_FORMAT}"
    
    # 压缩目录(处理含空格路径)
    tar -czf "${backup_filename}" ${SRC_DIRS}

    # 传输备份
    scp -P "${SSH_PORT}" "${backup_filename}" "${SSH_USER}@${SERVER_B_IP}:${ZIP_DST_DIR}"
    
    # 清理本地临时文件
    rm -f "${backup_filename}"
    
    # 保留最新备份
    ssh -p "${SSH_PORT}" "${SSH_USER}@${SERVER_B_IP}" \
    "ls -t ${ZIP_DST_DIR}/${BACKUP_NAME_PREFIX}* 2>/dev/null | tail -n +$(($MAX_BACKUPS+1)) | xargs --no-run-if-empty rm -f"
}

incr_backup() {
    echo "正在执行增量备份..."
    backup_dir="${RSYNC_DST_DIR}/${BACKUP_NAME_PREFIX}_latest"
    
    # 创建目标目录
    ssh -p "${SSH_PORT}" "${SSH_USER}@${SERVER_B_IP}" "mkdir -p ${backup_dir}"
    
    # 同步每个目录
    for SRC_DIR in ${SRC_DIRS}; do
        rsync -avz -e "ssh -p ${SSH_PORT}" --delete \
        "${SRC_DIR}/" \
        "${SSH_USER}@${SERVER_B_IP}:${backup_dir}/$(basename ${SRC_DIR})/"
    done
}

# 参数解析
case "$1" in
    full) full_backup ;;
    incr) incr_backup ;;
    all)  full_backup; incr_backup ;;
    *)    full_backup ;;  # 默认执行全量备份
esac

echo "备份操作完成"

主要优化点:

  1. 模块化设计:通过函数封装不同备份方式
  2. 参数控制:支持三种模式:
    • full 仅全量备份(默认)
    • incr 仅增量备份
    • all 同时执行两种备份
  3. 路径安全:处理rsync目录结构中的basename
  4. 错误抑制:添加2>/dev/null避免空目录报错
  5. 配置集中:所有配置参数集中在脚本开头,方便修改
  6. 使用提示:添加usage帮助信息

使用方法:

# 默认执行全量备份
./backup.sh

# 执行增量备份
./backup.sh incr

# 同时执行两种备份
./backup.sh all

注意事项:

  1. 确保本地到备份服务器的SSH密钥认证已配置
  2. 目标目录需要提前创建(脚本已包含自动创建逻辑)
  3. 如果源目录包含空格,需要将SRC_DIRS改为数组格式
  4. 建议添加日志记录和错误通知机制(可根据需要扩展)
  5. 源服务器和目的服务器均需要安装rsync,apt install rsync

设置定时执行:

crontab -e

末尾加上下面的代码,注意路径,和需要备份的方法

0 3 * * 0 /root/backup.sh all