This is my script to backup all users mailboxes. The restore can be done using import feature in preferences of user.
The goal is .. Can be done with live Zimbra Server, no downtime, no offline mode.
enjoy,
Code:
#################cut here####################
#!/usr/bin/perl
## Perl Script to Backup Mailboxes
## All users are backup“ed
## Gpl“d by Douglas Hipocreme (douglas at dhix.com.br)
use Date::Format;
use File::Find;
use File::Find qw(finddepth);
$periodo= time2str("%d%m%Y", time);
$bkpdest = "/tmp/mailboxes";
*name = *File::Find::name;
finddepth \&zap, $bkpdest;
sub zap {
if (!-l && -d _) {
rmdir($name) or warn "couldn't rmdir $name: $!";
} else {
print "unlink $name\n";
unlink($name) or warn "couldn't unlink $name: $!";
}
}
mkdir "$bkpdest", 0777 unless -d "$bkpdest";
$mode = 0777; chmod $mode, "$bkpdest";
$usuarios = "/$bkpdest/user-list-full";
$mode = 0777; chmod $mode, "$usuarios";
my $usersid = `su - zimbra -c 'zmprov gaa'>$usuarios`;
open (MYFILE, $usuarios);
while (<MYFILE>)
{
chomp;
my ($user ) = split(/\;/, $_, 1);
print qq {========================\n};
print qq {"Doing compress on $user" ......\n};
my $process = `su - zimbra -c 'zmmailbox -z -m $user getRestURL '//?fmt=tgz' > $bkpdest/$user.tgz'`;
print qq {"Compressed sucesfully $user"\n};
print qq {========================\n};
}
close(MYFILE);
use File::Find;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
my $dir = $bkpdest;
my $zip = Archive::Zip->new();
my $zipped;
$zipped = $zip->addDirectory( $dir );
$zipped->desiredCompressionMethod( COMPRESSION_DEFLATED );
find(\&zip_file, $dir);
die 'write error' unless $zip->writeToFileNamed('/tmp/backup/'.$periodo.'-mailboxes.zip') == AZ_OK;
sub zip_file {
$zipped = $zip->addFile( $File::Find::name );
}
###### end of script ###########################