1

У меня огромная проблема с Zimbra. Файл ibdata поврежден, и я не могу открыть почтовые ящики. У меня есть все файлы msg в store/0/* , но у меня есть резервная копия базы данных только неделю назад. Я пытался восстановить файлы с прошлой недели, но он не показывает электронные письма, которые мы получили на этой неделе. Добавить их по одному невозможно, так как у нас есть сотни писем в неделю и множество папок mboxgroup.

Можно ли сканировать все почтовые ящики и позволить Zimbra восстановить базу данных? Если мне нужно создать сценарий, как мы можем различить почту между резервной копией и сбой сервера?

Мы используем общественное издание Zimbra.

1 ответ1

0

Хорошо .. так как никто не ответил, у меня это получилось ..

Поскольку у нас много электронных писем и они распределены по нескольким папкам, нам нужно разделить те, что в базе данных, и те, которых нет

Убедитесь, что вы скопировали эти ... э ... поврежденные папки с данными в другую папку. Так что, если что-то пойдет не так, вы всегда можете собрать их вместе.

  1. Итак, первый шаг, это, конечно, отключение Zimbra

    service zimbra stop
    
  2. затем скопируйте старую рабочую базу данных mysql в нерабочую зимбру.

    cp /mnt/mail/db/* /opt/zimbra/db -R
    
  3. Теперь нам нужно сравнить эти письма в ~ /store при резервном копировании в июле с письмами в ~ /store при работающем zimbra. Затем я переместил каждое письмо не в июле в другую соответствующую папку в /opt /backup. Приведенный ниже сценарий предназначен для сканирования всех доступных .msg во всех магазинах и томах и перемещения в другую папку. Сохраните этот скрипт ниже, т.е. compare.sh

    SOURCE=/opt/zimbra/store/0
    DESTINATION=/opt/backup
    COMPARE=/mnt/mail/store/0
    for f in $SOURCE/*;
    do
        echo "scanning folder ${f##*/}";
        for v in $f/msg/*;
        do
            comp=$COMPARE/${f##*/}/msg/${v##*/}
            dst=$DESTINATION/${f##*/}
            if [ ! -d $dst ]; then
                    echo "create $dst"
                    mkdir $dst;
            fi
    
            echo "comparing volume $v to $comp"
            if [ -d $comp ] ; then
                    for m in $v/*; do
                            if [ ! -f $comp/${m##*/} ]; then
                                    echo "move $m to $dst"
                                    mv -b $m $dst
                            fi
                    done
            else
                    echo "move $v/* to $dst"
                    mv -b $v/* $dst
            fi
        done;
    done;
    

    Убедитесь, что вы изменили переменные SOURCE, COMPARE dan DESTINATION для зеркалирования ваших собственных папок.

    ИСТОЧНИК: Текущая текущая папка хранилища zimbra. НАЗНАЧЕНИЕ: Куда вы хотите переместить отсутствующие файлы. СРАВНИТЬ: Где находится ваша старая рабочая резервная копия zimbra, та, которую вы используете в своей базе данных.

    Затем выполните chmod a+x compare.sh чтобы сделать его исполняемым, затем ./compare.sh чтобы выполнить его.

    Результатом будет /opt /backup /1 в /opt /backup /xx, где xx - хранилища почтовых ящиков. Все сообщения, которые были перемещены в /opt /backup /x, не находятся в исходном почтовом ящике и будут добавлены.

    Итак, теперь у нас есть 2 папки. /opt/backup/xx который содержит файлы, отсутствующие в базе данных, и /opt/zimbra/ который должен быть в значительной степени идентичен /mnt/mail/

  4. Запустить Zimbra назад

    service zimbra start
    
  5. Теперь нам нужно получить все почтовые ящики

     mysql "zimbra" -e"select id,comment from mailbox"
    
  6. Остальное просто, нам нужно только вызвать CreateFolder и addMessage, как эти, чтобы повторно прикрепить эти пропущенные письма:

    zmmailbox -z -m <user@domain.net> cf "/Inbox/Recovered"
    zmmailbox -z -m <user@domain.net> am "/Inbox/Recovered" "/opt/backup/<xx>"
    

например:

Допустим, у нас есть от шага 2 выше

+----+----------------------------------------------------+
| id | comment                                            |
+----+----------------------------------------------------+
|  1 | mymailbox@bogusmail.xcom                           |
|  2 | awesome@bogusmail.xcom                             |
+----+----------------------------------------------------+

Мы должны добавить эти сообщения как:

zmmailbox -z -m mymailbox@bogusmail.xcom cf "/Inbox/Recovered"
zmmailbox -z -m mymailbox@bogusmail.xcom am "/Inbox/Recovered" "/opt/backup/1"

zmmailbox -z -m awesome@bogusmail.xcom cf "/Inbox/Recovered"
zmmailbox -z -m awesome@bogusmail.xcom am "/Inbox/Recovered" "/opt/backup/2"

Не стесняйтесь изменить это / Входящие / Восстановлено на что угодно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .