Split Domain Routing (SDR) Compartiendo los buzones de correo en distintos servidores y un solo dominio. Split Domain desde G-Suite hacia Zimbra server y viceversa.

El escenario es el siguiente: Tenemos una cuenta de correos en G-SUITE con 5 cuentas de correo pagadas, pero la organizacion desea que bajo este mismo dominio se creen mas buzones pero NO en Gsuite, si no en un servidor mas barato (Zimbra), por lo que compartiriamos un dominio en 2 servidores de correo distintos. Mi escenario seria el siguiente:

Dominio: midominio.pe

Cuentas en Gsuite: 5 cuentas con el dominio @midominio.pe (usuario1@midominio.pe , usuario2@midominio.pe , usuario3@midominio.pe , usuario4@midominio.pe , usuario5@midominio.pe)

Cuentas en otro Servidor (Cualquiera): para mi ejemplo ZIMBRA 8.9.9 (usuario6@midominio.pe ….usuario20@midominio.pe)

Flujo de correo 1

1.- Cuando se envia un correo desde internet o desde el mismo Gmail (cualquiera de las 5 cuentas) hacia el dominio midominio.pe, primero llega al servidor de G-suite

2.- G-suite evalua si el buzon esta dentro de su servidor.

3.- Si el buzon esta dentro de su servidor, entrega el correo y acaba la secuencia.

4.- Si el buzon no esta en Gmail (cualquiera de las 5 cuentas pagadas), esta debería hacer un relay al servidor especificado (Zimbra para mi ejemplo).

5.- Si Zimbra encuentra el buzón, el mensaje es entregado, caso contario este servidor avisa a GMAIL que el buzon no existe, y Gmail avisa al destinatario que no existe ese buzón.

Flujo de correo 2

1.- El correo es enviado desde una cuenta local de zimbra. ( usuario6@midominio.pe ….usuario20@midominio.pe )

2.- Zimbra evalua si la cuenta esta dentro de sus buzones. Si esta entrega el correo y acaba.

3.- Si no esta el buzon en zimbra, lo envia hacia G-suite, G-Suite evalua si lo tiene dentro de sus buzones, si lo tiene lo entrega, caso contrario lo vuelve a enviar a Zimbra (Cuidado, aqui ya esta haciendo loop indeterminado)

4.- Zimbra lo recibe y evalua de nuevo si la cuenta esta dentro de sus buzones, si no lo encuentra, debe rechazar el correo y finalizar

Si nos damos cuenta, si no tenemos cuidado, en la configuración, al no existir una cuenta en ninguno de los servidores, podriamos hacer un loop indeterminado y terminar siendo bloqueados por G-Suite (Aplicar :
https://wiki.zimbra.com/wiki/Split_Domain ) La configuracion personalizada lo haremos mas adelante, pues para la versión 8.9.9 no funcionaba.

Asumimos lo siguiente:

  1. Tu ya tienes comprado una cuenta en G-Suite con al menos un buzon de Pago.
  2. Tu ya tienes un servidor de correos, ya sea propio como Zimbra o comprado en alguna plataforma virtual como Rackspace, 1and1.com, etc.
  3. El servidor primario de correos será G-Suite
  4. El servidor secundario es Zimbra.

Recepcion de Correos

Paso 1.- Crear el dominio y las cuentas de correos necesarias en un servidor distinto al de G-Suite (el dominio debe ser igual al que tenemos en G-Suite). No detallo los pasos de como crear cuentas de usuarios pues es demasiado obvio que lo sabes hacer Creamos cuentas: usuario1@midominio.pe , usuario2@midominio.pe , usuario3@midominio.pe , usuario4@midominio.pe , usuario5@midominio.pe .

Paso 2.- Configurar G-Suite para ruteo hacia los servidores secundarios (https://support.google.com/a/answer/2685650?hl=en)

  • Ingresar y Loguear, https://admin.google.com/AdminHome?hl=en&fral=1
  • Ir a Apps/G-Suite/GMail/Advance Setiings

Paso 2.- Configurar el routeo

Paso 3.- Configurar Reenvio hacia otro servidor, si no posee el buzon dentro de G-Suite

Probar el envio y repecion del correo.

Hasta este punto, lo que hemos echo, es decirle a G-Suite: Si no encuentras el buzon de destino dentro de tus cuentas, reenvialo hacia el “Servidor Reenvio” y busca alli.

Envio de Correos desde Zimbra a G-Suite

https://support.google.com/a/answer/2956491

Paso 1.- Activar Almacenamiento completo


Paso 2.- Configurar El servicio SMTP Relay de Google

En este paso le estamos diciendo a G-Suite, que acepte todo el correo proveniente de mi servidor Zimbra (Mi servidor es de confianza) y que solo acepte correos de mi dominio.

Paso 3: Redirigir el servidor de correo saliente local de Zimbra a Google (Zimbra como correo secundario)

Modificaremos algunas variables de zimbra para hacer que los correos dirigidos hacia su propio dominio y que no exista en su directorio sean derivadas hacia G-Suite.

1.- Ejecutar estos comandos como usuario zimbra

En los codigos que pongo al final elminar la etiqueta <br>, parece que el nuevo editor de wordpress lo colaca al final

 #su - zimbra <br>$ zmprov md  midominio.pe  zimbraMailCatchAllAddress @midominio.pe<br>$ zmprov md  midominio.pe  zimbraMailCatchAllForwardingAddress @midominio.pe<br>$ zmprov md midominio.pe zimbraMailTransport smtp:[smtp-relay.gmail.com]:25

Nota: En las pruebas que yo hice, no funcionaba con ese servidor ([smtp-relay.gmail.com]:25) por lo que tenemos varias opciones de configuracion. En mi caso la ultima linea quedó así:

$zmprov md midominio.pe zimbraMailTransport smtp:[aspmx.l.google.com]:25

Configuración en Zimbra para evitar un loop indeterminado al no encontrar una cuenta de correo

Hasta aqui el sistema funcionará a la perfección si las cuentas de correo existen en uno o el otro servidor, pero pongamonos en un escenario en el que alguien (interno o externo) envia a un correo a una direccion de correo que no existe en ninguno de los servidores.

Lo que sucederá es lo siguiente:

  • El correo llega a G-mail, este lo evalua y no existe dentro de su lista de buzones, entonces lo deriva al servidor de Zimbra.
  • El servidor de Zimbra lo recibe y evalua si existe la cuenta dentro de sus buzones, como no existe lo vuelve a enviar a G-mail.
  • G- mail lo evalua y no existe dentro de su lista de buzones, entonces lo deriva al servidor de Zimbra.
  • El servidor de Zimbra lo recibe y evalua si existe la cuenta dentro de sus buzones, como no existe lo vuelve a enviar a G-mail.
  • Loooooooooooooooooop

Por lo tanto ese correo se mantendra dando infinitas vueltas hasta que posiblemente G-suite invalide tu servidor de correos y ya no te permita seguir enviando correos.

Solución

El protocolo SMTP es lineal, por lo tanto hay que indicarle lo siguiente:

  • Quien es el Servidor principal y quien es el servidor secundario.
  • El servidor secundario es el que corta el loop al momento de detectar que el buzon no le perteneze Y viene del servidor primario (En mi caso G-suite)

Para indicar quien es el servidor primario, basta con registrar en el servidor DNS de nuestro proveedor y darle como peso “preferencial” el valor 1 o 5 al servidor primario, Para el servidor secundario se tiene que registrar en el servidor DNS de nuestro proveedor y darle como peso 10 ó 20 ó 50

En mi caso quedo así registrado

Configuración en Zimbra para cortar el loop https://wiki.zimbra.com/wiki/Split_Domain#Avoiding_Loops_in_Delivery

Paso 1.- Modificar el archivo smtpd_recipient_restriction

Sacar una copia del archivo antes de modificarlo.

#su - zimbra
 $cp /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.original <br>

Modificar el archivo: smtpd_recipient_restrictions.cf

nano /opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf

deberia quedar asi:

%%contains VAR:zimbraServiceEnabled cbpolicyd^ check_policy_service inet:localhost:%%zimbraCBPolicydBindPort%%%%<br>
reject_non_fqdn_recipient<br>
permit_sasl_authenticated<br>
permit_mynetworks<br>
reject_unlisted_recipient<br>
%%contains VAR:zimbraMtaRestriction reject_invalid_helo_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_non_fqdn_helo_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_non_fqdn_sender%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_client_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_reverse_client_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_helo_hostname%%<br>
%%contains VAR:zimbraMtaRestriction reject_unknown_sender_domain%%<br>
%%explode reject_rbl_client VAR:zimbraMtaRestrictionRBLs%%<br>
%%explode reject_rhsbl_client VAR:zimbraMtaRestrictionRHSBLCs%%<br>
%%explode reject_rhsbl_reverse_client VAR:zimbraMtaRestrictionRHSBLRCs%%<br>
%%explode reject_rhsbl_sender VAR:zimbraMtaRestrictionRHSBLSs%%<br>
%%contains VAR:zimbraMtaRestriction check_policy_service unix:private/policy%%<br>
%%contains VAR:zimbraMtaRestriction check_recipient_access ldap:/opt/zimbra/conf/ldap-emails.cf%%<br>
%%contains VAR:zimbraMtaRestriction reject%%<br>
permit

Vamos crear un archivo en llamado “ldap-emails.cf” que es el que hara las validaciones

Ese archivo viene de la copia otro archivo llamado ” ldap-vam.cf “

 $cp /opt/zimbra/conf/ldap-vam.cf /opt/zimbra/conf/ldap-emails.cf<br>

Configuramos el archivo:

$nano /opt/zimbra/conf/ldap-emails.cf<br>
server_host = ldap://mail.midominio.pe:389<br> server_port = 389<br> search_base =<br> query_filter = (&amp;(|(zimbraMailDeliveryAddress=%s)(zimbraMailAlias=%s)(zimbraMailCatchAllAddress=%s))(zimbraMailStatus=enabled))<br> result_attribute = zimbraMailDeliveryAddress,zimbraMailForwardingAddress,zimbraPrefMailForwardingAddress<br> result_filter = permit<br> version = 3<br> start_tls = yes<br> tls_ca_cert_dir = /opt/zimbra/conf/ca<br> bind = yes<br> bind_dn = uid=zmpostfix,cn=appaccts,cn=zimbra<br> bind_pw = 0oms74zhrq<br> timeout = 30<br> special_result_attribute = member

OJO: en TODAS las documentaciones que he revisado, tienen como valor “OK” a la variable “result_filter”, en la version que yo trabajo Zimbra 8.9.9 NO funciona, da errores estuve muchos dias sin salir de ese tema. Por lo que deben poner el valor “permit”. con eso si funcionó.

Finalmente adicionar las variables creadas a las reglas de Zimbra

$zmprov mcf +zimbraMtaRestriction "check_recipient_access ldap:/opt/zimbra/conf/ldap-emails.cf"
$ zmprov mcf +zimbraMtaRestriction reject

Reiniciar Zimbra con el comando ZMCONTROL y LISTO

$zmcontrol restart

Eso es todo. Martin Lugo Palmadera


Referencias:

https://wiki.zimbra.com/wiki/Split_Domain

https://wiki.zimbra.com/wiki/Relay_per_Domain

http://efensys.blogspot.com/2012/01/avoiding-mail-looping-in-split-domain.html

Apache – Centos 7 -Address already in use: make_sock: could not bind to address [::]:443

Reiniciaste Apache y te aparece este error:

could not bind to address [::]:443

Les comento que esto me apareció cuando terminé de implementar un sitio virtual con certificado de seguridad SSL.

El tema es que el error me indicaba que ya había una aplicación usando el puerto 443, Esto hice para solucionarlo:

Paso 1.- Verifique que no exista ningún programa usando este puerto:

netstat -tlpn | grep 443

Mi sistema no arrojo nada

Paso 2.- verificar que el archivo httpd.conf no este llamado 2 veces al puerto 443

Tampoco encontré nada

Solo en el <virtualhost  numero_ip:443> se llamada a este puerto (lo cual esta bien)

Paso 3.- verificar que en el archivo ssl.conf ya no se mencione al puerto 443, pues no es necesario

en mi caso estaba asi:

# When we also provide SSL we have to listen to the
# the HTTPS port in addition.
#
Listen 443 https
##

 

Solución:  Comente la linea “Listen 443 https” y reinicie apache. Solucionado!!

# When we also provide SSL we have to listen to the
# the HTTPS port in addition.
#
#Listen 443 https
##

 

Metadata corruption detected at xfs….

Vine a trabajar un dia y me encontré con esto:

Gracias al Backup que tuve restauré en ese momento la VM, pero despues con calma me puse a trabajar en este tema y lo que habia que hacer es esto:

Si se dan cuenta, la VM nos posiciona con el curso en modo de recuperación

1.- Averiguamos donde fue el error colocamos este comando:

journalctl -xe

2.- Allí nos deriva a los errores, en mi caso indicaba que el error en el montaje:

/dev/mapper/root /sysroot

3.- ejecute el siguiente comando para reparar

xfs_repair -L /dev/mapper/root
xfs_repair -d /dev/mapper/root

4.- Reiniciar

init 6

 

Es todo!

Error 330 (net::ERR_CONTENT_DECODING_FAILED) IIS 7 – Windows 2012

Algunas veces suele suceder que paginas muy extensas que son envidas desde el servidor hacia el browser son comprimidas, Y el browser no las puede descomprimir y mostrar, luego sale este error:

Error 330 (net::ERR_CONTENT_DECODING_FAILED)

La solución que encontre fue desmarcar el check de “Enabled  dynamic content compresion” y reiniciar servicios.

 

Reindexar mailbox – zimbra

Algunas veces tenemos problemas con determinadas cuentas de correos, ya sea como el envio o recepcion de la misma.

Verificamos siempre este log:

 

#tail -f /opt/zimbra/log/mailbox.log

Si vemos esta linea o algo parecido:

java.io.FileNotFoundException: /opt/zimbra/index.....  (No such file or directory)

 

por favor reindexar.

Hacer esto:

# su - zimbra
# zmprov rim username@dominio.com.pe start
# zmprov rim username@dominio.com.pe status

 

Si deseas correr a todas las cuentas que manejas, ejecuta este script.

#!/bin/bash 
# Get list of mail accounts and reindex each one 
for i in `zmprov -l gaa -s <a href="http://server.yourdomain.com">servidor.tudominio.com.pe</a>` do echo -n "Reindexing $i" 
# Start reindexing
zmprov rim $i start &gt;/dev/null 
# Check if the rendix is still running for this account 
while [ `zmprov rim $i status|wc -l` != 1 ] do 

# Sleep for 2 seconds before checking status again 
echo -n . &amp;&amp; sleep 2 done echo . 
done

 

Fuente: https://goinggnu.wordpress.com/2013/10/19/reindex-zimbra-mail-boxes/

Martin Lugo

Event ID 2108 and Event ID 1084 – Error NTDS.DIT corrupto

Hoy me percate que cuando cambiaba de password a un usuario en el dominio Win2012, no se actualizaba en los demas controladores de dominio. Al verificar en uno de ellos me aparecia el siguiente mensaje:

 

El error es claro, no puede sincronizar la Base de datos, pues esta corrupta.

El procedimiento que utilizé para reparar fue el siguiente:

1.- Verificar que el disco no tenga errores. en la ventana de comandos puse:

chkdsk /f

Luego reinicie el equipo.  (Esto, lo que hará es verificar que el disco no tenga errores y si los tiene los repara).

2.-Reiniciado el sistema procedo a verificar la integridad del archivo ntds.dit. Para esto hago lo siguiente:

a.- Reinicio  el equipo en modo “Directory Services Restore Mode” (presionando la tecla F8 al momento de reiniciar)

b.- Abro la ventana de comandos y coloco lo siguiente:

c:\esentutl /g c:\windows\NTDS\ntds.dit /!10240 /8 /o

Este comando verifica la integridad de la Base de datos ntds.dit (posiblemente te vaya a sali errores de inaccesibilidad, dejarlo así..)

3.- Finalmente coloco el siguiente comando que reparará dicha Base de datos:

c:\esentutl /p c:\windows\NTDS\ntds.dit /!10240 /8 /o

4.- El resultado sera esto:

5.- Reiniciar el servidor. Es todo.!

Revisar esto: http://techgenix.com/UseEsentutlwhenNtdsutiltoolfailstorepairtheActiveDirectorydatabase/

Plan de acción Migrar Servidor Centos6 zimbra 8.09 hacia centos 6 zimbra 8.8 (En proceso)

Documento en progreso, no acabado……..

 

1.- Instalar Centos 6 a la ultima versión

2.-Instalar Zimbra igual versión que la que queremos migrar

3.-  Backup y restablecer copia hacia nuevo servidor.

Para el Backup y restauracion seguir esto:

Backup y Restaurar Servidores (Probado en Zimbra 7.2)

 

No hacer caso esto, es mio:

——Backup empieza 10:00 PM,  termina 01.25 am , total: 3.30 horas

Restablecer nuevo servidor: Empieza 10.40 am , termina 3.30pm———-

Al momento de iniciar el servidor Sale este error:

Starting proxy...[sudo] password for zimbra:

Arreglar con este link:

https://wiki.zimbra.com/wiki/Zimbra_services_asking_for_password_-_sudoers_issue

Si sale este otro error después de una migración o cambio de servidor al momento de reiniciar Zimbra:

mailbox Stopped      zmmailboxdctl is not running.

 

 

Se deberá verificar 2 cosas:

A) el usuario de zimbra tiene otro UID y GID,

o B) Los certificados estan corruptos o dañados.

 

Para A)

el usuario de zimbra tiene otro UID y GID

Revisar primero el archivo

/opt/zimbra/log/zmmailboxd.out

si tiene este error:

tail -f /opt/zimbra/log/zmmailboxd.out

2017-09-08 13:06:32.634:WARN:oejuc.AbstractLifeCycle:FAILED org.mortbay.setuid.SetUIDServer@6c02d7ea: java.lang.SecurityException: <strong>User with uid 500</strong> is not found!!!&lt;/strong&gt;
java.lang.SecurityException: &lt;strong&gt;<strong>User with uid 500 is not found</strong>!!!

(

el número 500 es mio, a uds les puede aparecer otro ID)Quiere decir que el usuario de zimbra, no esta siendo identificado con el UID y GID

Verificar el uid de zimbra en este archivo:

/opt/zimbra/conf/localconfig.xml

en mi caso:

................

<key name="zimbra_gid">
<value>501</value>
</key>

.....................

<key name="zimbra_uid">
<value>500</value>
</key>

 

Entonces despues de verificar, llegamos a la conclusión que ZIMBRA no puede iniciar, pues no encuentra el usuario con UID 500 y GID 501.

Entonces vamos a verificar con que UID y GID esta el usuario ZIMBRA en nuestro nuevo servidor: Ejecutamos el siguiente comando:

[root@mail ~]# id zimbra
uid=498(zimbra) gid=498(zimbra) groups=498(zimbra),4(adm),5(tty),89(postfix)
[root@mail ~]#

 

Vemos que son distintos al especificado en el archivo de configuración, para solucionar esto tenemos 2 opciones mas.

a.1) La mas facil: cambiar el ID y GID del linux al usuario zimbra (a mi me funcionó esto) al valor que esta configurado zimbra

#usermod -u 500 zimbra
#groupmod -g 501 zimbra

 

Reiniciar Zimbra:

/etc/init.d/zimbra restart

 

a.2) modificar los valores en  archivo /opt/zimbra/conf/localconfig.xml, por los valores mostrados. (en mi caso sustituyo el valor del UID de 500 por 498, y y GID de 501 por 498)

......

<key name="zimbra_gid">
<value>498</value>
</key>

.......

<key name="zimbra_uid">
<value>498/value>
</key>

Reiniciar zimbra:

/etc/init.d/zimbra restart

 

Nota: al reiniciar no podía ingresar al panel del administrador, aparecia un mensaje que decia fallo en la autenticación.

Revisar este archivo para ver el log de autenticación:

#grep "authentication failed for" /opt/zimbra/log/audit.log

Alli veo un mensaje que indica lo siguiente:

protocol=soap; error=authentication failed for [admin@mail.servidor.com.pe], invalid password;

Solución: Cambiar el password con el siguiente comando y listo:

zmprov sp <correo_electronico> <password>

Si se soluciono con esto, ya no es necesario B)

Para B)

Volver a regenerar los certificados.

Seguir este Link:

Creando Nuevos certificados en Zimbra

 

Si sale este error:

Failed to start slapd. Attempting debug start to determine error...... ....... ...... .... ...

Aplicar permisos:

/opt/zimbra/libexec/zmfixperms --extended

 

 

4.- Actualizar version de zimbra hacia 8.8

5.- Evaluar si es posible actualizar versionde Centos

 

Puerto 8080 Zimbra Webmail no Funciona

Coloco esto aqui, pues me ha sucedido con frecuencia que cuando termino de hacer una instalación fresca (Nueva de cero) el puerto 8080 (Acceso http al webmail de zimbra por defecto) no funciona (no levanta), los otros puertos (7071: administracion zimbra y  8443:Acceso https ) si funcionan sin problema.

Para verificar el correcto funcionamiento de los puertos, debemos verificar lo siguiente y en este orden.

1.- Verificar si la configuracion de zimbra instalada admite salida al webmail por los puertos https y http, si no es asi, debemos de cambiar el parametro para que ambos puertos esten activos.

su - zimbra
zmprov ms mail.midominio.com.pe zimbraMailMode both

Con ese comando le decimos que zimbra admita los tipos de sesion (both)

2.- Verificamos que los puertos esten abiertos en el firewall

[root@mail ~]# telnet localhost 8443
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

^CConnection closed by foreign host.
[root@mail ~]# telnet localhost 8080
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^CConnection closed by foreign host.

3.- Si los puertos no estan abiertos en el firewall de centos, aplicar el siguiente comando

#firewall-cmd --permanent --add-port=8080/tcp
#firewall-cmd --permanent --add-port=8443/tcp
#firewall-cmd --reload

4.- Si aun asi no funciona, reiniciar los el servicio Maliboxd (https://www.zimbra.com/docs/os/5.0.19/administration_guide/A_app-command-line.12.10.html)

$zmmailboxdctl stop
$zmmailboxdctlstart

 

Probar!!!


					

Solución – Zimbra – Error Upgrade 8.0.9 to 8.7.11 – Starting ldap…failed with exit code: 256.

Si te gustan los articulos, por favor deja tu comentario, eso me ayuda a motivarme y seguir escribiendo mas sobre estos temas!!

 

Si al momento de actualizar zimbra te aparece el siguiente mensaje:

Restoring existing configuration file from /opt/zimbra/.saveconfig/localconfig.xml...done
Operations logged to /tmp/zmsetup.20170621-112406.log
Adding /opt/zimbra/conf/ca/ca.pem to cacerts
Upgrading from 8.0.9_GA_6191 to 8.7.11_GA_1854
Stopping zimbra services...done.
This appears to be 8.0.9_GA
Starting mysql...done.
Checking ldap status...not running.
Checking ldap status...not running.
Starting ldap...failed with exit code: 256.
UPGRADE FAILED - exiting.

Dejame decirte que existen muchas razones para que este error suceda.

Verifica primero esto:

https://wiki.zimbra.com/wiki/ZCO_8.0.x_to_8.6_upgrade_fail_due_to_slapd_pid_location_change

 

En mi caso, era un error de permisos.

Ejecutar lo siguientes comandos:

/opt/zimbra/libexec/zmfixperms -verbose -extended

Luego, reinicia el upgrade con este comando

/opt/zimbra/libexec/zmsetup.pl

Esto funcionó para mi. Si tambien fue tu caso, comenta!

Arreglando un BD en ZIMBRA — Table ‘mboxgroup33.appointment’ doesn’t exist

Si te gustan los articulos, por favor deja tu comentario, eso me ayuda a motivarme y seguir escribiendo mas sobre estos temas!!

 

Este error sucede con frecuencia al momento de actualizar Zimbra a una version superior, en este caso yo trataba de actualizar Zimbra 8.0.9 hacia 8.7.11.

#./install.sh

...........

................

Do you agree with the terms of the software license agreement? [N] y

 

Checking current number of databases...

Do you want to verify message store database integrity? [Y] y
Verifying integrity of message store databases. This may take a while.
mysqld is alive
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 --auto-repair --password=XXXXXXXX
mboxgroup33.appointment
Error    : Table 'mboxgroup33.appointment' doesn't exist
mboxgroup33.appointment
Error    : Table 'mboxgroup33.appointment' doesn't exist

 

Y no te deja continuar!!!

Paso previo.- Actualizar metadata de YUM

Verificar que las metadatas de los repositorios esten actualizados. Resolverlo de la siguiente manera:

 yum clean metadata

 

Paso 1.- Identificando el error

Revisar esto: tail -f /opt/zimbra/log/mysql_error.log

Sale esto:

[ERROR] Cannot find or open table mboxgroup33/appointment from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
how you can resolve the problem.

 

Paso 2.- Intentando reparar de manera simple

Ingresamos como usuario zimbra y ejecutamos los siguiente comandos:

[zimbra@mail ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 364
Server version: 5.5.39-log Zimbra binary distribution

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>  use mboxgroup33
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> repair table appointment;
+-------------------------+--------+----------+-----------------------------------------------+
| Table                   | Op     | Msg_type | Msg_text                                      |
+-------------------------+--------+----------+-----------------------------------------------+
| mboxgroup33.appointment | repair | Error    | Table 'mboxgroup33.appointment' doesn't exist |
| mboxgroup33.appointment | repair | status   | Operation failed                              |
+-------------------------+--------+----------+-----------------------------------------------+
2 rows in set (0.00 sec)

mysql> quit;

No pudimos reparar a la primera.

Paso 3.- Identificando el error dentro de la tabla

Muchas veces el error se debe a una simple mala linea dentro de la BD, hay que identificar esto.

(Revisar esto para mas información: https://wiki.zimbra.com/wiki/Mysql_Crash_Recovery_(alternate_method))

Para identificar el error, necesitamois 2 cosas:

  • Listar todos los Mailbox dentro del mboxgroup previamente identificado. (en mi caso el 33), ejecutar como usuario ZIMBRA.(tener en cuenta el group_id del siguiente comando, alli se pone el numero de mi tabla)
 mysql --skip-column-names -e "SELECT id FROM zimbra.mailbox WHERE group_id=33" > /tmp/XXlist

El archivo XXlist me muestra lo siguiente:

[zimbra@mail ~]$ cat /tmp/XXlist
133
233

Esto me indica que tengo 2 Mailbox dentro de este grupo. Estos Mailbox tienen el id 133 y 233.

  • Necesitamos tambien listar las tablas existentes en el mboxgroup33.
[zimbra@mail ~]$ mysql --skip-column-names -e "CONNECT mboxgroup33;SHOW TABLES" > /tmp/tables
[zimbra@mail ~]$ cat /tmp/tables
appointment
mail_item
mail_item_dumpster
open_conversation
revision
revision_dumpster
tag
tagged_item

Este  comando me lista las tablas afectadas dentro del mboxgroup.

Paso 4.-  Identificando las cuentas de correo  dañadas

Debemos ingresar a Mysql y hacer una consulta , alli les listará a quien le pertenece la cuenta.

mysql>  use mboxgroup33
mysql> SELECT * FROM mboxgroup33.mail_item WHERE mailbox_id=133;
mysql> SELECT * FROM mboxgroup33.mail_item WHERE mailbox_id=233;

En mi caso las cuentas eran ventas@midominio.com.pe y marketing@midominio.com.pe

Paso 5.- Como se habran dado cuenta la tabla “appointment” esta dañada y parece como que no existiera.

Voy a verificar en otra BD “Mboxgroup32” por ejemplo que valores tiene esta tabla “appointment” y cual es su estructura.

mysql> SELECT * FROM mboxgroup32.appointment;
Empty set (0.03 sec)

mysql> SHOW COLUMNS FROM mboxgroup32.appointment;
+------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| mailbox_id | int(10) unsigned | NO | PRI | NULL | |
| uid | varchar(255) | NO | PRI | NULL | |
| item_id | int(10) unsigned | NO | | NULL | |
| start_time | datetime | NO | | NULL | |
| end_time | datetime | YES | | NULL | |
+------------+------------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

Esta tabla esta vacia, hice la misma verificacion para Mboxgroup31, Mboxgroup30 y da el mismo resultado, por lo que puedo pensar que si elimino esta tabla (Mboxgroup33.appointment) y la vuelvo a crear con la misma estructura deberiamos de dejar de tener el mensaje de error en la BD.

mysql> DROP TABLE IF EXISTS mboxgroup33.appointment;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE mboxgroup33.appointment LIKE mboxgroup32.appointment;
Query OK, 0 rows affected (0.18 sec)

mysql> SELECT * FROM mboxgroup33.appointment;
Empty set (0.00 sec)

mysql> SHOW COLUMNS FROM mboxgroup33.appointment;
+------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+-------+
| mailbox_id | int(10) unsigned | NO | PRI | NULL | |
| uid | varchar(255) | NO | PRI | NULL | |
| item_id | int(10) unsigned | NO | | NULL | |
| start_time | datetime | NO | | NULL | |
| end_time | datetime | YES | | NULL | |
+------------+------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Hice esto:

  • Elimine la tabla mboxgroup33.appointment
  • Volví a crear la tabla mboxgroup33.appointment desde mboxgroup32.appointment (pasa con la misma estructura)
  • Verifique que exista la tabla y su estructura de mboxgroup33.appointment

Despues de esto volivi a ejecutar el instalador… todo OK.!

OPCIONAL (si deseas puedes eliminar todo el MBOXGROUP, debes de tener en cuenta qué correos se alojan allí como ya lo describimos lineas arriba)

Paso 6.- Eliminación de la cuenta dañada (Caso eXTREMO si no funciona el paso 5)

En mi caso las cuentas dañadas eran 2. En este punto lo que hice fue, Mediante cualquier cuenta de correo como Outlook, descargue todos los correos de las cuentas dañadas a la PC y procedi a eliminar todas las cuentas del MBOXGROUP33 desde la consola de la BD.

Copia de seguridad de la BD

– Antes debemos de detener los buzones para que ninguna data nueva sea escrita en la BD.

$zmmailboxdctl stop

 

– Buscamos el usuario y password de Mysql Zimbra

zmlocalconfig -s zimbra_mysql_password

Tambien es buena idea que saques una copia a la carpeta en donde se almacena la Base de datos

cp /opt/zimbra/db/data /opt/zimbra/db/data_old

 

Descargamos (por siacaso) la BD sin el mailbox dañado

/opt/zimbra/mysql/bin/mysqldump --socket=/opt/zimbra/db/mysql.sock -u zimbra -p mboxgroupXX --where=mailbox_id!=33 > /tmp/dbdump.out

Aqui nos solicitará el password del MySql . Colocar  el que aparecio 2 comandos mas arriba.

ELIMINACION DE LA CUENTA Y VOLVEMOS A CREAR LA TABLA

mysql -e "DROP DATABASE mboxgroup33"
mysql -e "CREATE DATABASE mboxgroup33 DEFAULT CHARACTER SET utf8" 

 

Con esto ya deberiamos haber eliminado el problema, reiniciamos el servidor y procedemos a validar algun error en la BD.

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

 

Con esto ya podemos proseguir con el upgrade de nuestro servidor.

Paso 7.- Reiniciar el UPGRADE

#./install.sh

Importante.- Si la cuenta es de mucha importancia y deseamos crear de nuevo la cuenta con sus buzones. seguir el documento indicado al inicio.

https://wiki.zimbra.com/wiki/Mysql_Crash_Recovery_(alternate_method)

o

https://wiki.zimbra.com/wiki/Mysql_Crash_Recovery

 

Otros errores.

Si al momento de actualizar les sale el siguiente error:

Downloading packages (9):
   zimbra-core-components
   zimbra-ldap-components
   zimbra-mta-components
   zimbra-snmp-components
   zimbra-store-components
   zimbra-apache-components
   zimbra-spell-components
   zimbra-memcached
   zimbra-proxy-components
      ...Unable to download packages from repository. System is not modified.

 

Verificar que las metadatas de los repositorios esten actualizados. Resolverlo de la siguiente manera:

 yum clean metadata

o

 yum clean all

Luego reiniciar la actualización

Algunos problemas adicionales:

Solución – Zimbra – Error Upgrade 8.0.9 to 8.7.11 – Starting ldap…failed with exit code: 256.


Warning: Use of undefined constant XML - assumed 'XML' (this will throw an Error in a future version of PHP) in /homepages/16/d329773730/htdocs/martinlugo/wp-content/plugins/wp-syntaxhighlighter/wp-syntaxhighlighter.php on line 1048