2014/02/03

Incremental backup Zimbra via shell script

This script do a backup of only one day. This way, we can do incremental backups.
Pay attention to variables DOMAINS, ADMIN and PASSWD

Sorry by my english.
Hope that could be understandable.

#!/bin/bash
# Incremental backup from Zimbra based in date.
# Create the backup folder with the actual date and create files tgz with emails of before day.
#
# Marcio Jose Atanasio
# marcio.jose@atanasio.com.br

#
# Version 20131008

# LOCAL
BCKDIR="/opt/zimbra/backup"
LOGFILE="/var/log/zmbackupin.log"

# Mount CIFS
REMOTE_BACKUP="0"
MNTREMOTE=""
USER=""
MNTPASSWD=""
# Use "all" to backup all domains accounts or put the domains that you want backup with space between.
DOMAINS="YOURDOMAIN.COM.BR"

# Administrator Login
ZIMBRAURL="https://127.0.0.1"
ADMIN="admin"
PASSWD="xxxxxxx"

ZMBACKUPPREFIX="INC"
RETENTION="5"

# ENVIROMENT                   
DT=`date +%Y"-"%m"-"%d`
DTBCK=`date -d "-2 days" +%m"/"%d"/"%Y`

function put_logger {
        echo `date +%Y"-"%m"-"%d" - "%H":"%M`" - $1" >> $LOGFILE
}

function purge_old {
        find $BCKDIR/*$ZMBACKUPPREFIX -type d -mtime +$RETENTION -exec rm -rf {} \;
}

function backup_dir {
        if [ "$1" = "mount" ]; then
                if [ "$REMOTE_BACKUP" = "1" ]; then
                        /bin/mount.cifs $MNTREMOTE $BCKDIR -o user=$USER,password=$MNTPASSWD
                        if [ "$?" = "0" ]; then
                                put_logger "Mount of $MNTREMOTE sucessfull."
                        else
                                put_logger "Mount of $MNTREMOTE fail. Backup failed."
                                exit 0
                        fi
                fi
                if [ -d $BCKDIR/$DT-$ZMBACKUPPREFIX ]; then
                    rm -rf $BCKDIR/$DT-$ZMBACKUPPREFIX
                fi
                /bin/mkdir $BCKDIR/$DT-$ZMBACKUPPREFIX > /dev/null  2>&1
        fi
        if [ "$1" = "umount" ]; then
                if [ "$REMOTE_BACKUP" = "1" ]; then
                        /bin/umount $BCKDIR
                        put_logger "Unmount of $MNTREMOTE sucessfull."
                fi
        fi
}

function get_domains {
    if [ "$DOMAINS" = "all" ]; then
            DOMAINS=`/opt/zimbra/bin/zmprov gad | sort`
                echo $DOMAINS | sed s/" "/"\n"/g >> $BCKDIR/$DT-$ZMBACKUPPREFIX/domains.txt
    fi
        put_logger "Domain lists from $DOMAINS saved."

}

function get_lists {
    for DOM in `echo $DOMAINS`; do
            for LST in `/opt/zimbra/bin/zmprov gadl $DOM` ; do
            echo "Lista "$LST >> $BCKDIR/$DT-$ZMBACKUPPREFIX/$DOM.lists.txt
                    echo "/opt/zimbra/bin/zmprov gdl $LST | grep zimbraMailForwardingAddress | cut -d" " -f2 >> $BCKDIR/$DT-$ZMBACKUPPREFIX/$DOM.lists.txt"
            echo "" >> $BCKDIR/$DT-$ZMBACKUPPREFIX/$DOM.lists.txt
                done
                        put_logger "Distribuition list from $DOM saved."
    done
}

function backup_accounts_aliases {
    for DOM in `echo $DOMAINS`; do
            put_logger "Stated backup of account and alias from
$DOM."
                for ACC in `/opt/zimbra/bin/zmprov -l gaa $DOM | sort`; do
            wget -q -t 1 -T 1 -O $BCKDIR/$DT-$ZMBACKUPPREFIX/$ACC.tgz --auth-no-challenge --user=$ADMIN --password=$PASSWD --no-check-certificate $ZIMBRAURL:7071/home/$ACC/\?fmt=tgz\&query=after:$DTBCK
                        put_logger "$ACC was made backup."
                        ALIASES=`/opt/zimbra/bin/zmprov ga $ACC | grep zimbraMailAlias | cut -d: -f2`
                        if [ ! -z "$ALIASES" ]; then
                            echo $ACC" - >"$ALIASES  >> $BCKDIR/$DT--$ZMBACKUPPREFIX/$ACC.alias.txt
                                put_logger "$ACC have saved alias."
                        fi
                done
                        put_logger "$DOM backup account and alias finalized."
    done

}

# START
put_logger "Backup started"
put_logger "Mounting..."
backup_dir mount
put_logger "Deleting backups with more than $RETENTION days."
purge_old
put_logger "Verifing domains to backup"
get_domains
put_logger "Making backup of distribuition lists"
get_lists
put_logger "Making backup of account and alias"
backup_accounts_aliases
put_logger "Umounting..."
backup_dir umount
put_logger "End of backup"

Nenhum comentário: