top
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!邮件:766378891@qq.com

Shell 脚本备份多个服务器目录数据


共计 1584 个字符,预计需要花费 4 分钟才能阅读完成。

比较重要的数据最好还是经常备份,以免数据丢失后悔莫及。对于有快照的服务器,可以利用快照进行备份,对于没有快照的,可以利用 rsync 备份到本地。

以下脚本可以方便地进行备份,修改配置后定时运行即可:

#!/bin/bash

# 日志统一重定向
# 将所有输出重定向到 /tmp/backup.log,包括错误信息
exec >> /tmp/backup.log 2>&1

# 定义要排除的多个文件/目录(默认的排除项)
global_exclude_dirs=("*.git" "tmp")

# 定义主机的配置信息
hosts=(
    # 每个主机配置:用户名, 主机IP, ssh端口, ssh密码, 远程目录, 本地目录, 排除的目录
    "root,172.21.9.126,22,test,/home/docker,/back/126,exclude_dirs",
    "root,172.21.9.127,22,test2,/home/docker,/back/127,exclude_dirs"
)

# 获取当前时间并格式化为 YYYY-MM-DD HH:MM:SS 格式
log_time() {
    date +"%Y-%m-%d %H:%M:%S"
}

# 记录备份开始时间
echo "$(log_time) 备份脚本开始运行"

# 从配置数组中读取每台主机的备份信息并执行操作
for host_info in "${hosts[@]}"; do
    # 解析主机配置
    IFS=',' read -r username host_ip ssh_port password remote_dir local_dir exclude_dirs <<< "$host_info"

    # 设置日志文件
    log_file="$local_dir/backup.log"

    # 确保日志目录存在
    mkdir -p "$(dirname "$log_file")"

    # 记录当前主机的备份开始时间
    echo "$(log_time) 主机 $host_ip 开始备份"
    echo "$(log_time) 主机 $host_ip 开始备份" >> "$log_file"

    # 如果指定了特定的排除目录,则使用它们,否则使用全局排除目录
    if [ -z "$exclude_dirs" ]; then
        exclude_dirs="${global_exclude_dirs[*]}"
    fi

    # 构建排除的参数
    exclude_params=""
    IFS=',' read -r -a exclude_array <<< "$exclude_dirs"
    for exclude_dir in "${exclude_array[@]}"; do
        exclude_params+=" --exclude=$exclude_dir"
    done

    # 执行增量备份,修改了目标路径,使得远程目录本身被备份到本地
    echo "$(log_time) 执行备份 $host_ip:$remote_dir 到本地 $local_dir" >> "$log_file"
    sshpass -p "$password" rsync -avz --delete $exclude_params -e "ssh -p $ssh_port" "$username@$host_ip:$remote_dir" "$local_dir/" >> "$log_file" 2>&1

    # 备份完成
    echo "$(log_time) 主机 $host_ip 备份完成" >> "$log_file"
    echo "$(log_time) 主机 $host_ip 备份完成"
done

# 记录备份执行结束时间
echo "$(log_time) 备份脚本结束运行"

使用该脚本可以对所有服务器一次性备份,也可以指定服务器进行备份,输入参数即可,参数按关键词匹配:

# 只备份 172.21.9.126
bash backup.sh 126
# 备份 172.21.9.126 和 172.21.9.127
bash backup.sh 126 127
# 或者
bash backup.sh 12

Tips:清朝云网络工作室

阅读剩余
THE END
icon
0
icon
分享
icon
二维码
icon
海报
发表评论
评论列表

赶快来坐沙发

下午好👋, 希望你下午工作顺利