Restaurando o banco de dados corrompido do Zimbra

1

Eu tenho um grande problema com o Zimbra. O arquivo ibdata está corrompido e não consigo abrir as caixas de correio. Eu tenho todos os arquivos msg dentro de store/0/* , mas eu só tenho backup de banco de dados de uma semana atrás. Eu tentei restaurar os arquivos da semana passada, mas ele não mostra os e-mails que recebemos esta semana. Adicioná-los um por um é impossível, já que temos centenas de e-mails em uma semana e muitas pastas mboxgroup.

Existe alguma maneira de verificar todas as caixas de correio e permitir que o Zimbra reconstrua o banco de dados? Se eu tiver que criar um script, como podemos diferenciar os emails entre o backup e o servidor com falha?

Estamos usando a edição da comunidade do Zimbra.

    
por prd 18.08.2015 / 04:20

1 resposta

0

Ok .. desde que ninguém respondeu, eu tenho funcionado ..

Como temos muitos e-mails e nos espalhamos em várias pastas, precisamos separá-los no banco de dados e aqueles que não são.

Assegure-se de copiar estes ... er .. pasta de dados quebrados em outra pasta. Então, se algo der errado, você pode sempre colocá-los juntos novamente.

  1. Então, primeiro passo, é claro shutdown zimbra

    service zimbra stop
    
  2. copie o antigo banco de dados mysql de trabalho para o zimbra que não funciona.

    cp /mnt/mail/db/* /opt/zimbra/db -R
    
  3. Agora, precisamos comparar os e-mails em ~ / store no backup de julho, versus os e-mails em ~ / store na execução do zimbra. Em seguida, movi todos os e-mails que não estavam em julho para outra pasta correspondente em / opt / backup. O script abaixo é para digitalizar todos os arquivos .msg disponíveis em todas as lojas e volumes e mover para outra pasta. Salve este script abaixo para, por exemplo, 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;
    

    Certifique-se de modificar as variáveis SOURCE, COMPARE e DESTINATION para espelhar suas próprias pastas.

    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.

    Então chmod a+x compare.sh para torná-lo executável, então ./compare.sh para executá-lo.

    O resultado será / opt / backup / 1 para / opt / backup / xx, onde xx é o arquivo de caixa de correio. Todas as mensagens movidas para / opt / backup / x não estão na caixa de correio original e serão adicionadas.

    Então agora temos duas pastas. /opt/backup/xx , que contém arquivos que não estão no banco de dados, e /opt/zimbra/ , que deve ser em grande parte idêntico /mnt/mail/

  4. Inicie o Zimbra de volta

    service zimbra start
    
  5. Agora, precisamos obter todas as caixas de correio

     mysql "zimbra" -e"select id,comment from mailbox"
    
  6. O resto é fácil, só precisamos chamar CreateFolder e addMessage como estes para anexar os emails perdidos:

    zmmailbox -z -m <[email protected]> cf "/Inbox/Recovered"
    zmmailbox -z -m <[email protected]> am "/Inbox/Recovered" "/opt/backup/<xx>"
    

por exemplo:

Digamos que tenhamos da etapa 2 acima

+----+----------------------------------------------------+
| id | comment                                            |
+----+----------------------------------------------------+
|  1 | [email protected]                           |
|  2 | [email protected]                             |
+----+----------------------------------------------------+

Devemos adicionar essas mensagens como:

zmmailbox -z -m [email protected] cf "/Inbox/Recovered"
zmmailbox -z -m [email protected] am "/Inbox/Recovered" "/opt/backup/1"

zmmailbox -z -m [email protected] cf "/Inbox/Recovered"
zmmailbox -z -m [email protected] am "/Inbox/Recovered" "/opt/backup/2"

Sinta-se à vontade para alterar / Caixa de entrada / Recuperado para o que quiser.

    
por 25.08.2015 / 08:49