web-dev-qa-db-ja.com

Zimbraの破損したデータベースの復元

Zimbraに大きな問題があります。 ibdataファイルが破損していて、メールボックスを開くことができません。 store/0/*内にすべてのmsgファイルがありますが、データベースのバックアップは1週間前のものしかありません。先週からファイルを復元しようとしましたが、今週受信したメールが表示されません。 1週間に数百のメールがあり、mboxgroupフォルダーがたくさんあるため、1つずつ追加することはできません。

すべてのメールボックスをスキャンして、Zimbraにデータベースを再構築させる方法はありますか?スクリプトを作成する必要がある場合、バックアップとサーバーのクラッシュをメールで区別するにはどうすればよいですか?

Zimbraのコミュニティエディションを使用しています。

1
prd

わかりました。誰も答えなかったので、うまくいきました。

メールがたくさんあり、複数のフォルダに分散しているため、データベース内のメールとそうでないメールを分ける必要があります。

これらを必ずコピーしてください...えーと..壊れたデータフォルダを別のフォルダにコピーしてください。したがって、問題が発生した場合は、いつでも元に戻すことができます。

  1. だから最初のステップは、もちろんシャットダウンジンブラです

    service zimbra stop
    
  2. 次に、動作していない古いmysqlデータベースを動作していないzimbraにコピーします。

    cp /mnt/mail/db/* /opt/zimbra/db -R
    
  3. ここで、7月のバックアップの〜/ store内のメールと、実行中のzimbraの〜/ store内のメールを比較する必要があります。次に、7月以外のすべてのメールを/ 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 <[email protected]> cf "/Inbox/Recovered"
    zmmailbox -z -m <[email protected]> am "/Inbox/Recovered" "/opt/backup/<xx>"
    

例えば:

上記のステップ2から得たとしましょう

 + ---- + --------------------------------------- ------------- + 
 | id |コメント| 
 + ---- + ------------------------------------- --------------- + 
 | 1 | [email protected] | 
 | 2 | [email protected] | 
 + ---- + --------------------------------- ------------------- + 

これらのメッセージを次のように追加する必要があります。

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"

/ Inbox/Recoveredを好きなように自由に変更してください。

0
prd