我写了一个脚本,它将MySQL转储并上传到Amazon S3。 我已经将脚本添加到cronjob,并在午夜2点运行,并将MySQL转储上传到S3。 在上传到S3之前,我使用date和时间戳作为文件名。
我的问题是我需要在S3上pipe理7天的备份,并自动从S3删除第8天的备份文件,因为我使用date和时间戳作为文件名使每个文件都是唯一的,所以我无法出来怎么做。
而且我还必须在另一个EC2实例中恢复最新的备份。
date可以帮助你计算出正确的7天的文件名:
$ date -I 2011-12-03 0 thorsten@moppel:~ $ date -I -d '7 days ago' 2011-11-26
使用以下脚本在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
你可以阅读完整的文章来理解它,并根据你的需要进行修改。
除此之外,我build议您使用Rsnaphot或Bacula备份进行自动备份和恢复。
如果您只需要7天的备份,则可以使用“星期几名称”(%A或%a)或“星期几”(%w)和date,并让S3上载replace上周的文件。
FILENAME=$(date '+%A.sql') mysqldump > $FILENAME