пятница, сентября 30, 2016

Бэкап почтовых ящиков Zimbra

Делать бэкапы будем скриптом с ручным запуском, который я нашел тут. Скрипт создаст список всех ящиков Zimbra для домена, заархивирует их по очереди и отправит архивы на FTP-сервер для хранения (на почтовом сервере мало места), с уведомлением админа письмом. FTP-сервер у меня с анонимным доступом. Логи будут лежать в /var/backups/mailbackup/




sudo apt update && apt upgrade
sudo apt install lftp - установка ftp-клиента
nano ~/backup.sh

Содержимое скрипта:
#!/bin/bash
clear

#храним бэкапы за последние 30 дней
/usr/bin/find /opt/backup/* -type d -mtime +30 -exec /bin/rm -rf {} \;

## формат в котором находятся бекапы всех резервных ящиков
FORMAT=tgz

## месторасположение каталого резервных копий
ZBACKUP=/opt/backup

## Folder name for backup and using date
DATE=`date +"%d%m%y"`

## Backup location separate by date
ZDUMPDIR=$ZBACKUP/$DATE

## zmmailbox location
ZMBOX=/opt/zimbra/bin/zmmailbox

# проверка существования каталога с текущей датой, если нет то создаем
if [ ! -d $ZDUMPDIR ]; then
mkdir -p $ZDUMPDIR
fi

## Список ящиков для MAIL-DOMAIN.RU (если не указывать имя домена - будут бэкапиться все существующие аккаунты)
echo "Создаю список ящиков в домене mail-domain.ru"
for account in `su - zimbra -c 'zmprov -l gaa MAIL-DOMAIN.RU | sort'`
do

# создание резервной копии всех почтовый ящиков
echo "Архивирую $account -" `date +%F--%H:%M` >> /var/backups/mailbackup/`date +%F`".log"
echo "Архивирую $account -" `date +%F--%H:%M`
$ZMBOX -z -m $account getRestURL "//?fmt=${FORMAT}$query" > $ZDUMPDIR/$account.${FORMAT}

echo "Отправка архива $account  на FTP" >> /var/backups/mailbackup/`date +%F`".log"
echo "Отправка архива $account  на FTP"
lftp -e "put $ZDUMPDIR/$account.${FORMAT}; exit" MY-FTP-SERVER.RU

echo "Отправка уведомления администратору" >> /var/backups/mailbackup/`date +%F`".log"
echo "Отправка уведомления администратору"
(echo "Subject:Zimbra Backup Report"; echo "Бэкап $account  успешно завершен.") | /opt/zimbra/common/sbin/sendmail admin@MAIL-DOMAIN.RU

echo "<-----Завершено------>" >> /var/backups/mailbackup/`date +%F`".log"
echo "<-----Завершено------>"
done

Сделать скрипт исполняемым

sudo chmod a+x ~/backup.sh

Запуск скрипта

sudo ./backup.sh

Понятное дело, что можно добавить задание в cron и выполнять скрипт по расписанию, например 30 числа каждого месяца в 9 вечера.

crontab -e
0 21 30 * *  sh ~/backup.sh

Восстановление писем в ящике (аккаунт пользователя должен существовать в Zimbra)

1 вариант:

zmmailbox -z -m ящик@MY-DOMAIN.RU -t 0 postRestURL "//?fmt=tgz&resolve=reset" /opt/backup/ящик@MY-DOMAIN.RU.tgz

 2 вариант: Zimbra (войти в учетку пользователя) - Настройки - Импорт и экспорт - в Импорте нажать Обзор и выбрать нужный архив.