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

186次阅读
没有评论

共计 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
AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2025-02-26发表,共计1584字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2023-2025 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 又拍云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock