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

资讯 0

比较重要的数据最好还是经常备份,以免数据丢失后悔莫及。对于有快照的服务器,可以利用快照进行备份,对于没有快照的,可以利用 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.126bash backup.sh 126# 备份 172.21.9.126 和 172.21.9.127bash backup.sh 126 127# 或者bash backup.sh 12


本网站部分资源来自网络,仅供大家学习参考,请与24小时之内删除 软件无法下载或下载后无法使用,请点击报错,谢谢!

支付宝
微信
QQ钱包
文章目录