我的 VPS 在 Centos 7 上运行,带有 nginx 和 MySQL 8.0。我创建了 2 个 cron 作业,以便每天在特定时间备份我的文件和数据库。一切工作正常,但我试图将这些备份文件发送到我的备份主机。我创建了一个 bash 文件以自动通过备份主机发送文件,但问题是,它会将所有 Tar 文件发送到远程目的地,而我想要的是每次只发送要上传的新创建的文件,并对最后 7 个文件执行相同的例程(每周循环)。我遇到了问题,我被告知最好让 cron 作业完成所有工作。是否可以告诉 cron 命令,在创建完 Tar 文件(用于 sql 和文件)后,将它们发送到备份主机,并且只保留 7 个备份以替换旧备份?这是我的 bash 脚本:
#!/bin/bash
ftp=****
username=****
passwd=****
remote=/DESTINATION on Backup Host/
folder=$1
cd /local folder to pick files/$folder
pwd
ftp -n -i $ftp <<EOF
user $username $passwd
mkdir $remote/$folder
cd $remote/$folder
mput *
close
EOF
这是我的 cron 任务:
00 01 * * * mysqldump -u "location_to_username_and_password" "db name" | gzip -c > /location/db_name.`date +\%a\-\%Y\.\%m\.\%d`.sql.gz
00 03 * * * tar -cvpzf /location/db_name.`date +\%a\-\%Y\.\%m\.\%d`.tar.gz -C /route_to_folder/ folder_name
答案1
您可以使用版本化归档器来存储所有转储,而无需轮换备份,例如通过 zpaqfranzhttps://github.com/fcorbelli/zpaqfranz或原始 zpaq。
假设 mysqldump -uroot -ppippo mydb >/tmp/databasedump.sql 只是一个
zpaqfranz a /whereismybackup.zpaq /tmp/databasedump.sql
然后,您可以使用 rsync 将备份上传到远程服务器,类似如下操作(当然,您需要用户的密钥才能进行 ssh 上传)
rsync -I --append --omit-dir-times --no-owner --no-perms --partial --progress -e "ssh -p 22 -i /thekeyoftheuser" -rlt --delete "/whereismybackup.zpaq" "userofthekey@server-ip:/home/userofthekey/thebackup"
是的,您需要在远程服务器上使用 ssh(端口 22 或其他)和 rsync。在这种情况下,使用 zpaq 存档,您不需要每次都发送整个文件,而只需发送附加的字节(速度要快得多)