2023年8月8号凌晨00:21分,为什么这么晚了我还在写博客,是因为今天在整理服务器的时候,误操作把服务器的数据盘删了,不是用的sudo rm -rf,我的服务器在本地,部署在VMware里面,替换数据的时候点错了,选错了虚拟机😭。为了以后避免这种事情再次发生,借助于ChatGPT写了一个定时备份脚本,分享一下。

一、脚本内容

vi /root/docker_backup.sh
#!/bin/bash

# Source file details
source_file="/root/docker_data"  #需要备份数据的文件夹
backup_folder="/root/backups"

# Create a backup folder if it doesn't exist
mkdir -p $backup_folder              #创建备份文件backup_folder 

# Backup filename with current timestamp
backup_filename="$(date +'%Y%m%d%H%M%S').tar.gz"    #保存的文件名是执行此脚本的时间,年月日时分秒

# Compress the source file
tar -czf $backup_folder/$backup_filename $source_file   #后缀是压缩文件夹tar.gz格式

# Destination server details
dest_server="your sftp server ip"    #备份到目标服务器的IP
dest_user="user"    #目标服务器sftp的账户(需要有写入权限和读取)
dest_password="password"    #目标服务器sftp的密码
dest_folder="/docker_backup/"    #备份文件到目标服务器sftp的存放路径

# SFTP command to upload the compressed backup file
sshpass -p "$dest_password" sftp $dest_user@$dest_server <<EOF
put $backup_folder/$backup_filename $dest_folder/
bye
EOF

# Clean up the local backup file
rm -rf /root/backups/*    #删除刚刚压缩的文件,防止占用VPS硬盘空间

echo "Backup completed at $(date +'%Y-%m-%d %H:%M:%S')"

二、脚本赋权

chmod +777 docker_backup.sh

三、安装sshpass

apt install sshpass

四、主动连接一次SFTP服务器

sftp dest_user@est_server

image-1698333929466

五、定时执行

每晚零点和每日中午12点自动备份

sudo apt install -y cron
sudo systemctl start cron
sudo systemctl enable cron
crontab -e
0 */12 * * * /root/docker_backup.sh

六、结果展示