Zimbra: reparar mysql

Imagen de RazaMetaL

Tema: 

Cuando el servicio mailbox no se inicia se puede deber a una corrupción en las bases de datos mysql.

Una manera de solucionarlo es detener zimbra, iniciar mysql en modo "safe", hacer backup de las bases, eliminar las bases corruptas, crear las bases respectivas, restaurar el backup, e iniciar zimbra.

Lo primero es detener zimbra:

su - zimbra
zmcontrol stop

Para iniciar mysql en modo seguro agregamos la línea en /opt/zimbra/conf/my.cnf bajo la sección [mysqld] :

innodb_force_recovery = 6

Iniciamos el servidor mysql de zimbra:

su - zimbra
mysql.server start

Verificamos si se esta ejecutando:

mysql.server status

Creamos un dump de las bases de datos:


source ~/bin/zmshutil ; zmsetvars
mkdir /backup
mkdir /backup/zimbra
mkdir /backup/zimbra/database
mkdir /backup/zimbra/database/mysqldb

mysql --batch --skip-column-names -e "show databases" | grep -e mbox -e zimbra > /backup/zimbra/database/mysqldb.txt

for db in `cat /backup/zimbra/database/mysqldb.txt`; do
/opt/zimbra/mysql/bin/mysqldump $db -S $mysql_socket -u root --password=$mysql_root_password > /backup/zimbra/database/mysqldb/$db.sql
echo "Dump de $db realizado"
done

Hacemos un drop de todas las bases de datos:

for db in `cat /backup/zimbra/database/mysqldb.txt |grep mbox`
do
mysql -u root --password=$mysql_root_password -e "drop database $db"
echo -e "Drop de $db realizado"
done

mysql -u root --password=$mysql_root_password -e "drop database zimbra"

Ahora, con las bases corruptas eliminadas, procedemos a reiniciar mysql en modo normal, para esto comentamos la línea innodb_force_recovery = 6 en el archivo /opt/zimbra/conf/my.cnf y reiniciamos mysql como usuario zimbra:

mysql.server restart

Podemos mirar el log de mysql en zimbra para saber si todo esta bien:

tail -f /opt/zimbra/log/mysql_error.log

Una vez iniciado mysql en modo normal procedemos a crear las bases e importar los dumps:

for db in `cat /backup/zimbra/database/mysqldb.txt`
do
mysql -e "create database $db character set utf8"
echo "Created $db"
done

mysql zimbra < /backup/zimbra/database/mysqldb/zimbra.sql

for sql in /backup/zimbra/database/mysqldb/mbox*
do
mysql `basename $sql .sql` < $sql
echo -e "`basename $sql .sql` actualizada \n"
done

Finalmente iniciamos zimbra:

zmcontrol start

Comentarios

No puedo borrar tablas de zimbra

Hola buenos dias, tu articulo esta muy bueno estuve solucionando mi problema siguiendo los pasos que se indican pero al momento de llegar a eliminar las bases de datos corruptas, no me permite hacerlo, me sale el siguiente error:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/zimbra/db/mysql.sock' (2)
He estado buscando la solucion en internet pero no he encontrado nada, gracias de nuevo por el excelente artículo y por favor si pudieras ayudarme con esta inquietud te lo agradeceria mucho tambien.
Saludos.

Eso indica que mysql no se

Imagen de RazaMetaL

Eso indica que mysql no se esta ejecutando. Sigue el manual paso a paso, en la primera sección se indica como iniciar mysql.

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

(adsbygoogle = window.adsbygoogle || []).push({});

Mysql si se esta ejecutando

Hola como estas gracias por la respuesta, he comprobado los pasos iniciales y veo que mysql si esta corriendo es mas me conecto usando la consola de mysql y hago el drop desde alli para probar y me sale el error de perdida de conexion durante la consulta, el disco duro del servidor que tenemos en la empresa tuvo problemas en el sistema de archivos por lo que tuve que pasarle un fsck al momento de reiniciarlo. Estoy usando la consola de mysql y me salen varios errores al momento de poner algunos comandos. ¿Es posible reinstalar mysql sin afectar la configuracion actual de zimbra? En el servidor estoy usando Centos.
Saludos.

Debes cargar de nuevo las variables

Hola inkarri, antes de ejecutar el comando: for db in `cat /backup/zimbra/database/mysqldb.txt`; do /opt/zimbra/mysql/bin/mysqldump $db -S $mysql_socket -u root --password=$mysql_root_password > /backup/zimbra/database/mysqldb/$db.sql; echo "Dump de $db realizado"; done;

debes de volver a cargar la variables de zimbra con este comando que no indico al inicio:

$source ~/bin/zmshutil ; zmsetvars

Con eso ya deberia correr.

Saludos Cordiales.

Martin Lugo

 

Martin Lugo Palmadera
martinlugo.networksolutions-peru.com
mlugop@hotmail.com