Восстановление поврежденной базы данных Zimbra

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

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

мы используем community edition от Zimbra.

15
задан Kamil Maciorowski
04.12.2022 16:28 Количество просмотров материала 2722
Распечатать страницу

1 ответ

Ok.. поскольку никто не ответил, У меня все получилось..

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

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

  1. так первый шаг, конечно выключение сгруппированы вместе

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

    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;
    

    убедитесь, что вы измените источник, сравните переменные назначения dan, чтобы отразить ваши собственные папки.

    SOURCE: Current running zimbra store folder
    DESTINATION: Where do you want your missing files moved
    COMPARE: Where your old working zimbra backup resides, the one that you use its database.

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

    результатом будет /opt / backup /1 to/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"

не стесняйтесь, чтобы изменить это / Входящие / восстановленные на все, что вам нравится.

0
отвечен prd 2022-12-06 00:16

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх