SHELL

124 阅读1分钟

备份脚本


#!/bin/bash

# 备份日期设置为昨天
backup_date=$(date -d "yesterday" +%Y%m%d)

# 源服务器相关信息
# source_user="your_username"  # 源服务器用户名
# source_ip="source_server_ip"  # 源服务器IP地址
source_folder="/tmp/test/$backup_date"  # 源文件夹路径

# 目标服务器相关信息
target_user="root"  # 目标服务器用户名
target_ip="124.71.191.218"  # 目标服务器IP地址
target_folder="/home"  # 目标文件夹路径

# echo "source_folder: $source_folder"

# 备份文件名和路径
backup_file="backup_$backup_date.tar.gz"
local_backup_path="/tmp/test/$backup_file"
remote_backup_path="$target_user@$target_ip:$target_folder/$backup_file"

# 创建本地备份文件夹
mkdir -p /tmp/backup

# 执行备份
echo "压缩命令:tar czf $backup_file $backup_date"
tar czf "$backup_file" "$backup_date"  # 创建压缩包

# 检查备份完整性
md5sum_output=$(md5sum "$local_backup_path")  # 计算MD5校验和
local_md5=$(echo "$md5sum_output" | awk '{print $1}')  # 提取校验和值

# 备份失败则重试
while [[ -z "$local_md5" ]]; do
    echo "备份失败,正在重新备份..."
    tar czf "$local_backup_path" "$source_folder/$backup_date"
    md5sum_output=$(md5sum "$local_backup_path")
    local_md5=$(echo "$md5sum_output" | awk '{print $1}')
done

# 备份成功,传输到目标服务器
scp "$local_backup_path" "$remote_backup_path"
#echo "scp $local_backup_path -> $remote_backup_path"

# 检查远程文件完整性
remote_md5=$(ssh "$target_user@$target_ip" "md5sum '$target_folder/$backup_file'" | awk '{print $1}')


#echo "local_md5->$local_md5  remote_md5->$remote_md5"
# 比较校验和
if [[ "$local_md5" == "$remote_md5" ]]; then
    echo "备份成功!"
else
    echo "备份失败!"
fi

# 清理临时文件
rm -rf "$local_backup_path"  # 删除本地备份文件
# ssh root@124.71.191.218 md5sum /opt/backup_20230626.tar.gz | awk '{print $1}')