我编写了一个脚本,用于获取 MySQL 转储并将其上传到 Amazon S3。我已将该脚本添加到 cronjob 中,它会在午夜 2 点运行并将 MySQL 转储上传到 S3。在将其上传到 S3 之前,我使用日期和时间戳作为文件名。
我的问题是我需要管理 S3 上 7 天的备份,并且我必须自动从 S3 中删除第 8 天的备份文件,因为我使用日期和时间戳作为文件名来使每个文件都唯一,我不知道如何做到这一点。
而且我还必须在另一个 EC2 实例中恢复最新的备份。
答案1
日期可以帮助您找出正确的 7 天前的文件名:
$ date -I
2011-12-03
0 thorsten@moppel:~
$ date -I -d '7 days ago'
2011-11-26
答案2
使用以下脚本在 N 天后轮换备份:
#!/bin/bash
if [ "$#" == "0" ];then
echo "$0 upper-limit path {command}"
exit 1
fi
### SSH Server setup ###
SSH_USER="vivek"
SSH_SERVER="nas.nixcraft.in"
START=7
DIR_FORMAT="%d-%m-%Y" # DD-MM-YYYY format
#DIR_FORMAT="%m-%d-%Y" #MM-DD-YYYY format
## do not edit below ##
LIMIT=$( expr $START + $1 )
## default CMD ##
CMD="ls"
SSH_PATH="."
[ "$3" != "" ] && CMD="$3" || :
[ "$2" != "" ] && SSH_PATH="$2" || :
DAYS=$(for d in $(seq $START $LIMIT);do date --date="$d days ago" +"${DIR_FORMAT}"; done)
for d in $DAYS
do
ssh ${SSH_USER}@${SSH_SERVER} ${CMD} ${SSH_PATH}/$d
done
这个脚本需要一些修改,我从这里获取了它。
http://www.cyberciti.biz/tips/ssh-rotate-backup-shell-script.html
您可以阅读完整的文章来理解它并根据您的需要进行修改。
除此之外,我建议您使用 Rsnaphot 或 Bacula 备份进行自动备份和恢复。
答案3
如果您只需要 7 天的备份,您可以使用带有日期的“星期名称”(%A 或 %a)或“星期几”数字(%w),并让 S3 上传替换上周的文件。
FILENAME=$(date '+%A.sql')
mysqldump > $FILENAME