Quote:
Originally Posted by mmarodin This is a per-user full backup script (based on mubley's code, 2005), for Zimbra 5.x. Zimbra DB and LDAP are also included.
I've tested it on 5.0.12 version.
I don't want to use ... Code: /opt/zimbra/bin/zmmailbox -z -m user@domain.com getRestURL “//?fmt=tgz” > /tmp/account.tgz ... because with this backup job I could not restore single messages, but only full mailbox.
I hope it could be usefull for you! Code: #!/bin/sh
#--------
# Backup Zimbra Open Source 5.x
# by mm@rodin - 20090206
# Modify the following variables to suit your installation
export time=`date +%y%m%d`
export backup_dir=/opt/backup
export zimbra_dir=/opt/zimbra
export index_dir=$zimbra_dir/index
export store_dir=$zimbra_dir/store
# We need mysqldump. If it doesn't exist,
# copy mysql and modify it to call mysqldump.
if [ ! -e $zimbra_dir/bin/mysqldump ]; then
cp $zimbra_dir/bin/mysql $zimbra_dir/bin/mysqldump
sed -i 's|/bin/mysql |/bin/mysqldump |g' $zimbra_dir/bin/mysqldump
fi
# Create the backup directory
mkdir -p $backup_dir
# Get a list of all accounts and execute
# the contents of the for-loop for each account.
for i in `$zimbra_dir/bin/zmprov gaa` ; do
# Beginning of for-loop
# Use email address to get zimbra_id
zimbraId=`$zimbra_dir/bin/zmprov ga $i |grep zimbraId |sed 's|zimbraId: ||g'`
set $zimbraId
# Use mysql to get number id
zimbra_nr=`$zimbra_dir/bin/mysql -e "use zimbra; select id from mailbox where account_id = '$1'"`
zimbra_nr=`echo $zimbra_nr | sed 's|id ||g'`
# Check to make sure we got a valid number id
if [ "$zimbra_nr" = "" ]; then
echo $i has no mailbox.
else
# Set zimbraAccountStatus to "maintenance"
$zimbra_dir/bin/zmprov ma $i zimbraAccountStatus maintenance
# Marking user backup
if [ ! -e $backup_dir/info-$zimbra_nr.txt ]; then
echo "Zimbra ID: $1" > $backup_dir/info-$zimbra_nr.txt
echo "Mail address: $i" >> $backup_dir/info-$zimbra_nr.txt
fi
# Backup index and store files
tar -czf $backup_dir/$time-$zimbra_nr-data.tgz $zimbra_dir/index/0/$zimbra_nr $zimbra_dir/store/0/$zimbra_nr
# Backup Mysql db
$zimbra_dir/bin/mysqldump mboxgroup$zimbra_nr > $backup_dir/$time-$zimbra_nr.dump
tar -czf $backup_dir/$time-$zimbra_nr.dump.tgz $backup_dir/$time-$zimbra_nr.dump
rm -f $backup_dir/$time-$zimbra_nr.dump
# Set zimbraAccountStatus to "active"
$zimbra_dir/bin/zmprov ma $i zimbraAccountStatus active
# End of if statement
fi
# End of for-loop
done
# Backup Zimbra master database and LDAP accounts database
# First, set all accounts to maintenance.
for i in `$zimbra_dir/bin/zmprov gaa` ; do
$zimbra_dir/bin/zmprov ma $i zimbraAccountStatus maintenance
done
$zimbra_dir/bin/mysqldump zimbra > $backup_dir/$time-zimbra.dump
tar -czf $backup_dir/$time-zimbra.dump.tgz $backup_dir/$time-zimbra.dump
rm -f $backup_dir/$time-zimbra.dump
$zimbra_dir/bin/zmslapcat > $backup_dir/$time-zimbra.ldap
tar -czf $backup_dir/$time-zimbra.ldap.tgz $backup_dir/$time-zimbra.ldap
rm -f $backup_dir/$time-zimbra.ldap
# Setting all accounts to active mode.
for i in `$zimbra_dir/bin/zmprov gaa` ; do
$zimbra_dir/bin/zmprov ma $i zimbraAccountStatus active
done
# Backup complete |
This looks promising for my needs, but can you describe with some detail the restore procedure? It's fairly clear to me on the conceptual level what this script is doing, but I'd appreciate an example of the steps needed to to a full restore from the backup files this script produces.