Skip to content

Instantly share code, notes, and snippets.

@hlopez
Forked from jsanti/checkout_lastest_backup.sh
Created February 20, 2014 15:17
Show Gist options
  • Select an option

  • Save hlopez/9115991 to your computer and use it in GitHub Desktop.

Select an option

Save hlopez/9115991 to your computer and use it in GitHub Desktop.

Revisions

  1. @jsanti jsanti created this gist Feb 20, 2014.
    124 changes: 124 additions & 0 deletions checkout_lastest_backup.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,124 @@
    #!/bin/zsh

    DB_NAME=$1
    SSH_USER=''
    SSH_SERVER=''
    BACKUPS_DIR='/backup/full_backups'
    DATE=`date +"%Y-%m-%d"`
    DIR_NAME="${DATE}_daily"
    FULL_BACKUP_PATH="$BACKUPS_DIR/$DIR_NAME"
    BACKUP_FILES=( "DUMP_SAPEC_$DATE.sql.gz" "SHARED_SAPEC_$DATE.tar.gz" )

    LOCAL_BACKUPS_PATH="$HOME/code/backups/sapec"

    if [[ $# < 1 ]]; then
    echo "Usage: drop_backup_sapec.sh DB_NAME"
    exit 1
    fi

    function drop_database()
    {
    local db_name=$1
    if ! (dropdb "${db_name}_development" &> /dev/null); then
    echo "Error trying to drop $db_name database"
    exit 1
    fi
    }

    # FIXME: Customize this function
    function uncompress_and_restore_file()
    {
    local backup_file=$1
    local uncompressed_file="${backup_file%.*}"

    if [[ "$backup_file" =~ ".tar.gz$" ]]; then
    tar xfz $backup_file
    rm -rf "$HOME/code/sapec/public/system"
    mv var/WebApps/sapec/shared/public/system "$HOME/code/sapec/public"
    elif [[ "$backup_file" =~ "\.sql\.gz$" ]];then
    gunzip $backup_file
    drop_database $DB_NAME
    createdb "${DB_NAME}_development"
    psql "${DB_NAME}_development" &> /dev/null < $uncompressed_file
    fi
    }

    function copy_remote_file()
    {
    local remote_file="$SSH_USER@$SSH_SERVER:$FULL_BACKUP_PATH/$1"
    local dest_path=$2

    echo "Copying remote file $remote_file to $dest_path"
    scp $remote_file $dest_path
    }

    function backup_exists()
    {
    local backup_file=$1

    if [[ "$backup_file" =~ ".tar.gz$" ]]; then
    return 0
    elif [[ "$backup_file" =~ ".sql.gz$" ]]; then
    return 0
    fi

    return 1
    }

    # FIXME: Customize this function as
    function delete_old_backup_file()
    {
    local backup_file=$1
    local only_dirs=$2
    local backup_dir

    if [[ -f $backup_file ]] && [[ "$backup_file" =~ ".tar.gz$" ]]; then
    # FIXME: guessing backup_file it's a compressed directory with same name
    # backup_dir="${backup_file%%.*}"
    # echo "running rm dir -rf $backup_dir"
    rm -rf var/WebApps #FIXME: must be configurable

    if [[ -z $only_dirs ]]; then
    rm $backup_file
    fi
    elif [[ -f $backup_file ]] && [[ "$backup_file" =~ ".sql.gz$" ]]; then
    uncompressed_file="${backup_file%.*}"

    if [[ -z $only_dirs ]]; then
    rm $uncompressed_file
    fi
    fi
    }

    echo "Trying to download backups for date: $DATE"

    if ! (ssh $SSH_USER@$SSH_SERVER "[[ -d $FULL_BACKUP_PATH ]]");then
    echo "Backup directory $FULL_BACKUP_PATH doesn't exist on remote server"
    exit 1
    fi

    if [[ ! -d $LOCAL_BACKUPS_PATH ]]; then
    echo "Local directory $LOCAL_BACKUPS_PATH doesn't exist"
    exit 1
    fi

    lunchy stop $DB_NAME
    cd $LOCAL_BACKUPS_PATH
    for backup_file in $BACKUP_FILES; do
    if backup_exists $backup_file; then
    erase_local=""
    vared -p "Backup file $backup_file exists locally. Erase it? (y/n): " erase_local
    if [[ $erase_local = "y" ]] || [[ $erase_local = "Y" ]]; then
    delete_old_backup_file $backup_file
    copy_remote_file $backup_file $LOCAL_BACKUPS_PATH
    else
    delete_old_backup_file $backup_file "only_dirs"
    fi
    fi

    uncompress_and_restore_file $backup_file
    done

    lunchy start $DB_NAME
    echo "Done."