Zimbra прекрасно работает, вот только Вам на почту приходят сообщения о непонятных ошибках в базе данных. Конечно же их можно игнорировать, ведь всё и так работает. А может пора навести порядок, «чтобы не было мучительно больно» потом.
Обычно сообщения об ошибках начинаются так:
Database errors found. /opt/zimbra/mysql/bin/mysqlcheck --defaults-file=/opt/zimbra/conf/my.cnf -S /opt/zimbra/db/mysql.sock -A -C -s -u root --password=XXXXXXXX
В принципе вес понятно: у Вас в БД имеются ошибки и Вам может помочь вот эта длинная команда. Узнать пароль на БД MySQL можно выполнив еще одну команду от пользователя zimbra:
zmlocalconfig -s | grep mysql | grep password
Вот только не все ошибки лечатся такой командой. О них и поговорим…
Рассмотрим примеры самых распространенных сообщений об ошибках в БД zimbra:
1.
Database errors found. /opt/zimbra/mysql/bin/mysqlcheck --defaults-file=/opt/zimbra/conf/my.cnf -S /opt/zimbra/db/mysql.sock -A -C -s -u root --password=XXXXXXXX mboxgroup1.appointment error : Table upgrade required. Please do "REPAIR TABLE `appointment`" or dump/reload to fix it! mboxgroup1.data_source_item error : Table upgrade required. Please do "REPAIR TABLE `data_source_item`" or dump/reload to fix it! mboxgroup1.imap_folder error : Table upgrade required. Please do "REPAIR TABLE `imap_folder`" or dump/reload to fix it! mboxgroup1.mail_item error : Table upgrade required. Please do "REPAIR TABLE `mail_item`" or dump/reload to fix it! mboxgroup1.pop3_message error : Table upgrade required. Please do "REPAIR TABLE `pop3_message`" or dump/reload to fix it! ... и так далее еще очень много строк... ...
Наиболее вероятная причина ошибки — невнимательность при обновлении в прошлом с версии 6.x на 7.x. В release notes есть раздел «After the Upgrade is Complete» (после завершения обновления). После перехода с версии 6 на более старшую надо просто выполнить еще один скрипт (он уже есть на сервере):
1. Переключаемся на пользователя zimbra su - zimbra 2. Останавливаем сервис mailboxd zmmailboxdctl stop 3. Запускаем скрипт perl для обновления таблиц /opt/zimbra/libexec/scripts/migrate20100913-Mysql51.pl 4. Запускаем сервис mailboxd zmmailboxdctl start 5. Проверяем БД на ошибки /opt/zimbra/libexec/zmdbintegrityreport -r
2.
Database errors found. /opt/zimbra/mysql/bin/mysqlcheck --defaults-file=/opt/zimbra/conf/my.cnf -S /opt/zimbra/db/mysql.sock -A -C -s -u root --password=XXXXXXXX mysql.general_log Error : You can't use locks with log tables. mysql.slow_log Error : You can't use locks with log tables.
Данная проблема лечится еще проще:
1. Останавливаем zimbra 2. Переходим в каталог БД и удаляем файлы *log.frm (лучше их перенести куда-нибудь, удалить всегда успеется): cd /opt/zimbra/db/data/mysql mv *log.frm /tmp/ 3. Стартуем zimbra, новые (правильные) версии файлов *log.frm будут созданы автоматически 4. Проверяем БД на ошибки su - zimbra /opt/zimbra/libexec/zmdbintegrityreport -r
3.
Database errors found. /opt/zimbra/mysql/bin/mysqlcheck --defaults-file=/opt/zimbra/conf/my.cnf -S /opt/zimbra/db/mysql.sock -A -C -s -u root --password=XXXXXXXX mboxgroup100.revision_dumpster Error : Incorrect information in file: './mboxgroup100/revision_dumpster.frm' error : Corrupt mboxgroup19.mail_item_dumpster Error : Incorrect information in file: './mboxgroup19/mail_item_dumpster.frm' error : Corrupt
Повреждение базы данных после сбоя, плохо. Нам поможет то, что все эти таблицы, находящиеся в разных mboxgroup — одинаковы.
1. Останавливаем zimbra
2. Переходим в каталог БД
cd /opt/zimbra/db/data
3. Копируем файлы frm вместо поврежденных из другого каталога mboxgroup. Например:
cp mboxgroup1/revision_dumpster.frm mboxgroup100/
cp mboxgroup1/mail_item_dumpster.frm mboxgroup19/
3. Стартуем zimbra
4. Проверяем БД на ошибки
su - zimbra
/opt/zimbra/libexec/zmdbintegrityreport -r
В случае появления битых таблиц делаем следующее
su - zimbra
Для битой таблицы выполняем оптимизацию, например так:
mysql -e 'use mboxgroup24; optimize table mail_item;'
Не коллекционируйте ошибки… избавьтесь от них!