我遇到了 Zimbra 的大问题。文件ibdata
已损坏,我无法打开邮箱。我有msg
里面的所有文件store/0/*
,但我只有一周前的数据库备份。我试图恢复上周的文件,但它没有显示我们本周收到的电子邮件。逐个添加它们是不可能的,因为我们一周有数百封电子邮件,还有大量的 mboxgroup 文件夹。
有没有办法扫描所有邮箱并让 Zimbra 重建数据库?如果我必须编写脚本,我们如何区分备份邮件和服务器崩溃的邮件?
我们正在使用 Zimbra 的社区版。
答案1
好的..因为没有人回答,所以我已经解决了..
由于我们有很多电子邮件,并且分布在多个文件夹中,因此我们需要将数据库中的电子邮件与数据库中的电子邮件分开。
确保将这些...呃...损坏的数据文件夹复制到另一个文件夹中。这样如果出现问题,您可以随时将它们恢复原状。
所以第一步当然是关闭 zimbra
service zimbra stop
然后将旧的工作mysql数据库复制到不工作的zimbra。
cp /mnt/mail/db/* /opt/zimbra/db -R
现在,我们需要比较 7 月备份中 ~/store 中的邮件与运行 zimbra 时 ~/store 中的邮件。然后我将不是 7 月的每封邮件移动到 /opt/backup 的另一个相应文件夹。下面的脚本用于扫描所有存储和卷中的所有可用 .msg,然后移动到另一个文件夹。将下面的脚本保存到 ie
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 和 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/
重新启动 Zimbra
service zimbra start
现在,我们需要获取所有邮箱
mysql "zimbra" -e"select id,comment from mailbox"
剩下的就简单了,我们只需要像这样调用 CreateFolder 和 addMessage 来重新附加那些丢失的邮件:
zmmailbox -z -m <[email protected]> cf "/Inbox/Recovered" zmmailbox -z -m <[email protected]> am "/Inbox/Recovered" "/opt/backup/<xx>"
例如:
假设我们从上面的第 2 步得到
+----+----------------------------------------------------+ | 编号 | 评论 | +----+----------------------------------------------------+ | 1 |[电子邮件保护] | | 2 |[电子邮件保护] | +----+----------------------------------------------------+
我们应该将这些消息添加为:
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 更改为您喜欢的任何内容。