Резервное копирование и восстановление (Backup and recovery) Zimbra CS OSE

Добрый день, уважаемые форумчане!
Возможно на этом форуме уже есть темы по резервному копированию и восстановлению, но я, к сожалению, не нашел. Зато заметил тему по восстанвлению почты из *.msg (было достаточно интересно почитать статью). Но есть предложение, в данной теме поделится опытом создания бэкапов и восстановления из них, чтобы не доходило до восстановления из *.msg.

Комментарии

alexvg75 аватар
Пример организации холодного резервного копирования и восстановления из архива.
Можно повесить на крон и прикрутить отправку лога по мэйлу. Минусы: сервер приходится останавливать, хотя время останова минимизировано и в основном уходит на останов - подъем, но это минус.
1) Запись в кроне:
20     01      *       *       *       /opt/script/backup/backup_full.sh > /opt/script/backup/backup.log 2>&1
2) Текст скрипта:
#!/bin/bash

# Zimbra Backup Script
# This script is intended to run from the crontab as root

# Outputs the time the backup started, for log/tracking purposes
echo Time backup started = $(date +%T)
before="$(date +%s)"

# Live sync before stopping Zimbra to minimize sync time with the services down
# Comment out the following line if you want to try single cold-sync only
echo "Syncronize beafore backup ..."
rsync -aHK --delete /opt/zimbra/ /opt/backup/zimbra

# which is the same as: /opt/zimbra /opt/backup
# Including --delete option gets rid of files in the dest folder that don't exist at the src
# this prevents logfile/extraneous bloat from building up overtime.

# Now we need to shut down Zimbra to rsync any files that were/are locked
# whilst backing up when the server was up and running.
before2="$(date +%s)"

# Stop Zimbra Services
echo Time befor stop Zimbra services = $(date +%T)
echo "Stop zimbra services ..."
/etc/init.d/zimbra stop
sleep 20

# Kill any orphaned Zimbra processes
echo "Kill any zimbra processes ..."
ORPHANED=`ps -u zimbra -o "pid="` && kill -9 $ORPHANED
echo Time after stop Zimbra services = $(date +%T)

# Sync to backup directory
echo "Syncronize to backup directory ..."
rsync -aHK --delete /opt/zimbra/ /opt/backup/zimbra

# Restart Zimbra Services
echo Time befor start Zimbra services = $(date +%T)
echo "Start zimbra services ..."
/etc/init.d/zimbra start
echo Time after start Zimbra services = $(date +%T)

# Calculates and outputs amount of time the server was down for
after="$(date +%s)"
elapsed="$(expr $after - $before2)"
hours=$(($elapsed / 3600))
elapsed=$(($elapsed - $hours * 3600))
minutes=$(($elapsed / 60))
seconds=$(($elapsed - $minutes * 60))
echo Server was down for: "$hours hours $minutes minutes $seconds seconds"

# Create a txt file in the backup directory that'll contains the current Zimbra
# server version. Handy for knowing what version of Zimbra a backup can be restored to.
su - zimbra -c "zmcontrol -v > /opt/backup/zimbra/conf/zimbra_version.txt"
# or examine your /opt/zimbra/.install_history

# Display Zimbra services status
echo Displaying Zimbra services status...
su - zimbra -c "/opt/zimbra/bin/zmcontrol status"

# Create archive of backed-up directory for offsite transfer
echo "Create archive of backed-up directory for offsite transfer..."
rm /opt/zimbra.tar.gz
tar -zcf /opt/zimbra.tar.gz -C /opt/backup/zimbra .

# Transfer file to backup server
cd /opt
curl -T /opt/zimbra.tar.gz ftp://ftpserver

# Outputs the time the backup finished
echo Time backup finished = $(date +%T)

# Calculates and outputs total time taken
after="$(date +%s)"
elapsed="$(expr $after - $before)"
hours=$(($elapsed / 3600))
elapsed=$(($elapsed - $hours * 3600))
minutes=$(($elapsed / 60))
seconds=$(($elapsed - $minutes * 60))
echo Time taken: "$hours hours $minutes minutes $seconds seconds"
3) Скрипт для восстановления (но лучше делать все ручками):
#!/bin/bash

# Stop Zimbra Services
echo "Stop zimbra services ..."
/etc/init.d/zimbra stop

# Kill any orphaned Zimbra processes
echo "Kill any zimbra processes ..."
ORPHANED=`ps -u zimbra -o "pid="` && kill -9 $ORPHANED

# Move /opt/zimbra to new location i.e. /tmp/zimbra-old
mv /opt/zimbra /opt/zimbra.old

# Uncompress the most recent backup file to the /opt/zimbra foldertar zxvf [backup file] -C /opt/zimbra
mkdir /opt/zimbra
tar zxvf zimbra.tar.gz -C /opt/zimbra

# Fix the Zimbra permissions
chown -R zimbra:zimbra /opt/zimbra
/opt/zimbra/libexec/zmfixperms

# Start all Zimbra services
/etc/init.d/zimbra start

# Check Zimbra services status
su - zimbra -c "/opt/zimbra/bin/zmcontrol status"


alexvg75 аватар
Для горячего резервного копирования пока пришло в голову только 2 варианта:
1) Горячее резервирование по компонентам (LDAP, база, файлы)
2) использовать drbd плюс heartbeat
У кого какой опыт?

3) можно кроме того бэкапировать только ящики пользователей, без останова сервера:

#!/bin/bash

# создаем папку для текущего бэкапа
mkdir /opt/backup/`date +%d-%m-%Y`

# получаем список почтовых ящиков указанного домена
##/opt/zimbra/bin/zmprov -l gaa domain.com > /opt/backup/users_mailbox.txt

# в цикле по файлу со списком почтовых ящиков
# получаем папки с письмами почтового ящика и архивируем в zip архив
for mbox in `cat /opt/backup/users_mailbox.txt`
do
echo "$mbox";
/opt/zimbra/bin/zmmailbox -z -m $mbox getRestURL "//?fmt=tgz" > /opt/backup/`date +%d-%m-%Y`/$mbox.tgz
#копируем в расшариную папку:
cp /opt/backup/$mbox.zip /mnt/backup.mail.zimbra/`date +%d-%m-%Y`
done

#Для востановление бэкапов, пользуемся следующей командой или изменяем ее под свои нужды:
#/opt/zimbra/bin/zmmailbox -z -m user@domain.com postRestURL "//?fmt=tgz&resolve=replace" /tmp/user.tgz


Вот, приключилась беда с сервером... отказался работать. есть резервные копии, сделанные скриптом 
http://www.osoffice.de/downloads/viewcategory-7.html.
Какие мои действия по восстановлению почтовика?

1. Установить Ubuntu

2. Установить Зимбру

3. Разархиривировать бэкап


Нужна Ваша помощь (((
Добрый день!
Сделал все как написанно в статье, все забэкапилось и в дальнейшем востановилось. Но после востановления реальный размер бд стал 81G(как я нонимаю при установке он резервирует место под этот файл и пишет якобы он столько и занимает, на самом деле занимает кб). И через кажлдае пол часа выдает вот такое сообщение "CRITICAL! LDAP primary MDB database is 90% full.". Версия Zimbra 8.0.4 система ubuntu 12.0.4
Вот что показывает du -c -h
zimbra@zimbra:~/data/ldap/mdb/db$ du -c -h data.mdb
81G     data.mdb
81G     итого


alexvg75 аватар
День, добрый!
Все верно. Точно не помню, но кажется с версии 8.0.2 zimbra стал использовать sparse файлы для БД LDAP (изменили версию БД). Плохо это или хорошо, затрудняюсь сказать (меня это не расстраивает)... На самих форумах zimbra есть много информации. Например:
http://www.zimbra.com/forums/administrators/59592-ldap-database-went-97m...
Кто то пытается изменить размеры, изменяя размер базы через параметры ldap_db_maxsize и ldap_accesslog_maxsize. Затем пересоздают базу (бэкап и восстановление).
Для работы со спарсе файлами используйте ключ -S в rsync:
rsync -aSHK --delete /opt/zimbra/ /opt/backup/zimbra
Должно все заработать, удачи!


Да, можно уменьшить размер БД(до ~5 уменьшал), но после обновления(установка новой версии) он опять будет 80 ГБ.