MAIS

    Backup da instância EC2 para S3

    - Anúncio -
    - Anúncio -

     

    Existem muitas ferramentas disponíveis para ajudar a fazer backup de sistemas Linux para o Amazon S3, mas encontrar o caminho certo para usar pode ser difícil.

    Uma ferramenta que é muito simples de usar é o s3cmd que é uma ferramenta de linha de comando do Linux para fazer o upload, recuperar e gerenciar dados em Amazon S3.
    A ferramenta é escrita em python, por isso deve instalar e rodar em praticamente qualquer distribuiçâo linux moderna e eu descobri que funciona muito bem e parece ser uma ferramenta ideal para usar se você quiser escrever um script de backup básico.

    Uma vez instalado, basta executar “s3cmd –configure” para configurar o script com suas chaves de acesso Amazon S3. Você pode então usar s3cmd a partir da linha de comando para gerenciar seus buckets S3 e seus conteúdos.
    Todos os detalhes sobre as várias opções podem ser obtidas através correndo “s3cmd –help”.

    Eu tenho usado s3cmd para criar backups diários automáticos rodada de um único diretório (ex: /home) usando um script simples que eu adaptei do roteiro automysqlbackup. O script que eu tenho usado é mostrado abaixo, e fornece rodada backups dos últimos 7 dias, a cada dia individualmente arquivado em um arquivo tar.gz único.
    Esta é uma solução bastante limitada, pois apenas fornece um backup de um único diretório, não faz backups incrementais, e ele vai quebrar se o seu arquivo tar.gz exceder o limite de armazenamento S3 indivídual de arquivo – 6GB.
    No entanto, se você só precisa de uma solução simples para manter backups diários de uma única pasta, então essa é uma boa opção. Ele também irá enviar-lhe os resultados, e pode, opcionalmente, incluir tarefas para executar pré e pós-backup.

    #!/bin/bash
    #
    # Backup Script
    #
    #=====================================================================
    #=====================================================================
    # Defina suas variáveis
    #=====================================================================

    # Diretório para salvar arquivos de backup diário, por exemplo, tar.gz /backups
    BACKUPDIR=”/mnt/backups”

    # Diretório de backup
    BACKUPSRCDIR=”/mnt/www”

    # Tamanho máximo de arquivos de backup em MB (arquivos maiores será dividido em arquivos separados)
    # Nota: ainda não implementada
    MAXTARSIZE=”1000″

    # S3 Settings
    # Nome do S3 bucket para upload ex. “meu_s3_bucket”
    S3BUCKET=”meu_s3_bucket”

    # Configuração de email
    # O que você gostaria de ser enviado a você?
    # – log: enviar apenas arquivo de log
    # – files: enviar arquivo de log e arquivos tar.gz como anexos
    # – stdout: simplesmente emitir o registro para a tela se executar manualmente.
    # – quiet: Apenas enviar logs se ocorrer um erro ao MAILADDR.

    MAILCONTENT=”log”

    # Defina o tamanho máximo permitido de e-mail em k. (4000 = cerca de 5MB e-mail)
    MAXATTSIZE=”4000″

    # Endereço de email para enviar
    MAILADDR=”[email protected]”;

    # Comando para executar antes de backups (descomente para usar)
    #PREBACKUP=”/etc/backup-pre”

    # Comando executado depois de backups (descomente para usar)
    #POSTBACKUP=”/etc/backup-post”

    #=====================================================================
    #=====================================================================
    #=====================================================================
    #
    # Não precisa ser modificado daqui para baixo!
    #
    #=====================================================================
    #=====================================================================
    #=====================================================================
    PATH=/usr/local/bin:/usr/bin:/bin:
    DATE=`date +%Y-%m-%d_%Hh%Mm` # Datestamp e.g 2002-09-21
    DOW=`date +%A` # Day of the week e.g. Monday
    DNOW=`date +%u` # Day number of the week 1 to 7 where 1 represents Monday
    DOM=`date +%d` # Date of the Month e.g. 27
    M=`date +%B` # Month e.g January
    W=`date +%V` # Week Number e.g 37
    VER=0.1 # Version Number
    HOST=`hostname` # Hostname for LOG information
    LOGFILE=$BACKUPDIR/$HOST-`date +%N`.log # Logfile Name
    LOGERR=$BACKUPDIR/ERRORS_$HOST-`date +%N`.log # Error log Name
    BACKUPFILES=””

    # Create required directories
    if [ ! -e “$BACKUPDIR” ] # Check Backup Directory exists.
    then
    mkdir -p “$BACKUPDIR”
    fi

    # IO redirection for logging.
    touch $LOGFILE
    exec 6>&1 # Link file descriptor #6 with stdout.
    # Saves stdout.
    exec > $LOGFILE # stdout replaced with file $LOGFILE.
    touch $LOGERR
    exec 7>&2 # Link file descriptor #7 with stderr.
    # Saves stderr.
    exec 2> $LOGERR # stderr replaced with file $LOGERR.

    # Functions

    # Backup function: removes last weeks archive from S3, creates new tar.gz and sends to S3
    SUFFIX=””
    dobackup () {
    s3cmd ls s3://”$S3BUCKET” | grep s3 | sed “s/.*s3://$S3BUCKET//s3://$S3BUCKET//” | grep “$DOW” | xargs s3cmd del
    tar cfz “$1” “$2”
    echo
    echo Backup Information for “$1”
    gzip -l “$1”
    echo
    s3cmd put “$1″ s3://”$S3BUCKET”
    return 0
    }

    # Run command before we begin
    if [ “$PREBACKUP” ]
    then
    echo ======================================================================
    echo “Prebackup command output.”
    echo
    eval $PREBACKUP
    echo
    echo ======================================================================
    echo
    fi

    echo ======================================================================
    echo BackupScript VER $VER
    echo
    echo Backup of Server – $HOST
    echo ======================================================================

    echo Backup Start Time: `date`
    echo ======================================================================
    58,1 38%
    echo ======================================================================
    echo ======================================================================
    # Daily Backup
    echo Daily Backup of Directory ( $BACKUPSRCDIR )
    echo
    echo Rotating last weeks Backup…
    eval rm -fv “$BACKUPDIR/*.$DOW.tar.gz”
    echo
    dobackup “$BACKUPDIR/$DATE.$DOW.tar.gz” “$BACKUPSRCDIR”
    BACKUPFILES=”$BACKUPFILES $BACKUPDIR/$DATE.$DOW.tar.gz”
    echo
    echo ———————————————————————-
    echo Backup End Time: `date`
    echo ======================================================================
    echo Total disk space used for backup storage..
    echo Size – Location
    echo `du -hs “$BACKUPDIR”`
    echo
    echo ======================================================================
    echo ======================================================================
    echo “Jrossetto – http://www.jrossetto.com.br”
    # Run command when we’re done
    if [ “$POSTBACKUP” ]
    then
    echo ======================================================================
    echo “Postbackup command output.”
    echo
    eval $POSTBACKUP
    echo
    echo ======================================================================
    fi

    #Clean up IO redirection
    exec 1>&6 6>&- # Restore stdout and close file descriptor #6.
    exec 1>&7 7>&- # Restore stdout and close file descriptor #7.

    if [ “$MAILCONTENT” = “files” ]
    then
    if [ -s “$LOGERR” ]
    then
    # Include error log if is larger than zero.
    BACKUPFILES=”$BACKUPFILES $LOGERR”
    ERRORNOTE=”WARNING: Error Reported – ”
    fi
    #Get backup size
    ATTSIZE=`du -c $BACKUPFILES | grep “[[:digit:][:space:]]total$” |sed s/s*total//`
    if [ $MAXATTSIZE -ge $ATTSIZE ]
    then
    BACKUPFILES=`echo “$BACKUPFILES” | sed -e “s# # -a #g”` #enable multiple attachments
    mutt -s “$ERRORNOTE MySQL Backup Log and SQL Files for $HOST – $DATE” $BACKUPFILES $MAILADDR < $LOGFILE #send via mutt
    else
    cat “$LOGFILE” | mail -s “WARNING! – Backup exceeds set maximum attachment size on $HOST – $DATE” $MAILADDR
    fi
    elif [ “$MAILCONTENT” = “log” ]
    then
    cat “$LOGFILE” | mail -s “Backup Log for $HOST – $DATE” $MAILADDR
    if [ -s “$LOGERR” ]
    then

    then
    cat “$LOGERR” | mail -s “ERRORS REPORTED: MySQL Backup error Log for $HOST – $DATE” $MAILADDR
    fi
    elif [ “$MAILCONTENT” = “quiet” ]
    then
    if [ -s “$LOGERR” ]
    then
    cat “$LOGERR” | mail -s “ERRORS REPORTED: Backup error Log for $HOST – $DATE” $MAILADDR
    cat “$LOGFILE” | mail -s “Backup Log for $HOST – $DATE” $MAILADDR
    fi
    else
    if [ -s “$LOGERR” ]
    then
    cat “$LOGFILE”
    echo
    echo “###### WARNING ######”
    echo “Errors reported during Backup execution.. Backup failed”
    echo “Error log below..”
    cat “$LOGERR”
    else
    cat “$LOGFILE”
    fi
    fi

    if [ -s “$LOGERR” ]
    then
    STATUS=1
    else
    STATUS=0
    fi

    # Clean up Logfile
    eval rm -f “$LOGFILE”
    eval rm -f “$LOGERR”

    exit $STATUS

     

     

    - Anúncio -

    Artigos recentes

    Continue lendo

    DEIXE UMA RESPOSTA

    Please enter your comment!
    Please enter your name here