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 {#三-安装sshpass}
apt install sshpass
四、主动连接一次SFTP服务器 {#四-主动连接一次SFTP服务器}
sftp dest_user@est_server
五、定时执行 {#五-定时执行}
每晚零点和每日中午12点自动备份
sudo apt install -y cron
sudo systemctl start cron
sudo systemctl enable cron
crontab -e
0 */12 * * * /root/docker_backup.sh