Preparing to Back Up
Before we begin, make sure that you are logged in as a user that can perform the tasks outlined here.
It is always good practice to backup your copy of Zimbra in the event of unforeseen circumstances.
To prevent changes to any Zimbra databases during the backup processes you may wish to use:
>su zimbra
>zmcontrol stop
to terminate Zimbra.
If you get some kind of error, you may want to make sure that Zimbra has completely stopped by running:
>ps auxww | grep zimbra
and kill any left over processes such as the log.
Making a Backup
Make sure that the copy location has enough space to support your backup copy (i.e. the /tmp folder probably isn’t the best location).
Since all of the components Zimbra needs are stored in the Zimbra folder itself, you can simply copy the folder to a safe location.
It may be possible to create a cron job to do these tasks automatically. This it the command:
>cp -rp /opt/zimbra [location of backup]/zimbra_backup
Depending on your hardware and the amount of data contained in your Zimbra installation, this process can take a while.
Note: It is a very good idea to tag your installation with the version/build of zimbra that will be backed up (ie 3.0.0_GA_156) and the date of backup. You’ll need this later.
Restoring
Before restoring, you should make sure that all of the processes associated with the damaged/failed Zimbra installation are terminated. Failure to terminate all of the processes could have dire consequences. See “Preparing to Backup” for additional info.
1) Rename your “broken” Zimbra installation.
You may be able to scavenge data, if needed. If you simply do not want the old data, you can skip this part. This is how you do it:
>mv /opt/zimbra /opt/zimbra_broken
You may want to move it completly out of the /opt folder just to be safe. After that, copy your backup Zimbra installation to the /opt folder and name it “zimbra” by using the following commands:
>cp -rp [location of backup]/zimbra_backup /opt
>mv /opt/zimbra_backup /opt/zimbra
2) Download a dummy copy of Zimbra
Now, we need to know what build/version of zimbra you were running. If you followed the backup instructions above, then the backup folder should be tagged with the version/build you have backed up.
You need to download the full install of the Zimbra version you were running. You may find all Zimbra releases at: Sourceforge.
If you don’t know your version number, you can find it by performing the following steps:
cd /opt/zimbra cat .install_history
Review the output and there should be an entry near the bottom that will show the last upgrade/install you did. It looks something like this:
1203106102: INSTALL SESSION START 1203106124: UPGRADED zimbra-core-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106126: UPGRADED zimbra-ldap-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106134: UPGRADED zimbra-logger-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106150: UPGRADED zimbra-mta-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106154: UPGRADED zimbra-snmp-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106167: UPGRADED zimbra-store-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106171: UPGRADED zimbra-apache-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106173: UPGRADED zimbra-spell-4.5.11_GA_1751.RHEL4-20080128130515.i386.rpm 1203106173: INSTALL SESSION COMPLETE
For non-rpm installations you might see .deb instead of .rpm but this should work on all platforms.
3) Install the dummy copy of Zimbra
Once you have downloaded the tar file, you will need to uncompress it by:
>tar -xvzf [name of file].tgz
This will create a folder in the directory named “zcs”, open it and run the install script:
>cd zcs
>./install.sh
WARNING: Do not run the script with the -u option. You will remove all of your backup data & you must run the script as root, NOT ZIMBRA.
If all goes well, you will see the following:
The Zimbra Collaboration Suite appears already to be installed.
It can be upgraded with no effect on existing accounts,
or the current installation can be completely removed prior
to installation for a clean install.
Do you wish to upgrade? [Y]
Choose Y.
The script will remove the existing packages, and install them again. The script will attempt to stop Zimbra Services and “UPGRADE FAILED – exiting”. This is okay, simply rerun the script, and it will install normally.
If you experience error 389, -1, connection refused errors, please search the Forums. These errors are covered extensively.
4) Reset permissions
If you are up and running now, you may have one more hurdle to overcome: permissions.
You may need to reset the permissions on the message store by running the following:
>chown -R zimbra:zimbra /opt/zimbra/store
>chown -R zimbra.zimbra /opt/zimbra/index
Also as root run the following:
/opt/zimbra/libexec/zmfixperms
Some scripts can be found here: http://wiki.zimbra.com/index.php?title=Open_Source_Edition_Backup_Procedure
Another option
Zimbra Backup and Restore “hot”. [By Richardson Lima http://br.linkedin.com/in/richardsonlima ]
BACKUP
* Script 1 * This script must be run as root, it runs the script runBackupAll.sh and also sends the entire backup to a second machine.
echo "*******************************************************" echo "* Zimbra - Backup all email accounts *" echo "*******************************************************" echo"" # echo Start time of the backup = $(date +%T) before="$(date +%s)" # echo "" ZHOME=/opt/zimbra ZBACKUP=$ZHOME/backup/mailbox echo "Generating backup files ..." su - zimbra -c "/opt/backup/SCRIPT_ZIBRA_BACKUP_ALL_ACCOUNTS/zimbra_backup_allaccounts.sh" echo "Sending files to backup all email accounts for Machine2 (10.0.0.X - CrossOver Cable on eth1 \o/ ) ..." rsync -avH $ZBACKUP root@ipaddress:/opt/zimbra_backup_accounts before2="$(date +%s)" # echo The process lasted = $(date +%T) # Calculating time after="$(date +%s)" elapsed="$(expr $after - $before)" hours=$(($elapsed / 3600)) elapsed=$(($elapsed - $hours * 3600)) minutes=$(($elapsed / 60)) seconds=$(($elapsed - $minutes * 60)) echo The complete backup lasted : "$hours hours $minutes minutes $seconds seconds"
* Script 2 zimbraBackupAllAccounts.sh
ZHOME=/opt/zimbra ZBACKUP=$ZHOME/backup/mailbox ZCONFD=$ZHOME/conf DATE=`date +"%a"` ZDUMPDIR=$ZBACKUP/$DATE ZMBOX=/opt/zimbra/bin/zmmailbox if [ ! -d $ZDUMPDIR ]; then mkdir -p $ZDUMPDIR fi echo " Running zmprov ... " for mbox in `zmprov -l gaa` do echo " Generating files from backup $mbox ..." $ZMBOX -z -m $mbox getRestURL "//?fmt=zip" > $ZDUMPDIR/$mbox.zip done
RESTORE
* Script 3 * This script must be run as root, it runs the script runRestoreAll.sh and also sends the entire backup to machine. zimbra_restore_allaccounts.sh
echo "*******************************************************" echo "* Zimbra - Restore all email accounts *" echo "*******************************************************" echo "" # echo Start Time Restore = $(date +%T) before="$(date +%s)" # echo "" echo "Starting the process restore the backup files ..." su - zimbra -c "/opt/zimbra_backup_accounts/zimbra_restore_allaccounts.sh" before2="$(date +%s)" echo The process lasted = $(date +%T) # Calculating time after="$(date +%s)" elapsed="$(expr $after - $before)" hours=$(($elapsed / 3600)) elapsed=$(($elapsed - $hours * 3600)) minutes=$(($elapsed / 60)) seconds=$(($elapsed - $minutes * 60)) echo "The complete restore lasted : "$hours hours $minutes minutes $seconds seconds" echo "Process completed successfully!"
* Script 4 zimbra_restore_allaccounts.sh
#!/bin/bash ZHOME=/opt/zimbra #!/bin/bash ZHOME=/opt/zimbra #ZBACKUP=$ZHOME/backup/mailbox ZBACKUP=/opt/zimbra_backup_accounts/mailbox ZCONFD=$ZHOME/conf DATE=`date +"%a"` ZDUMPDIR=$ZBACKUP/$DATE ZMBOX=/opt/zimbra/bin/zmmailbox if [ ! -d $ZDUMPDIR ]; then echo "Backups do not exist !" exit 255; fi for mbox in `zmprov -l gaa` do echo " Restoring files from backup $mbox ..." $ZMBOX -z -m $mbox postRestURL "//?fmt=zip&resolve=reset" $ZDUMPDIR/$mbox.zip done
*** Soon I will be sending this improved script!Italic text