Recuperando um ldap com problemas ( base corrompida )

Servidores e redes elétricas são sempre um problema. Um cliente que tenho sempre tem este tipo de problema e vira e mexe alguma coisa em um servidor corrompe por causa disto.

Bom, um dos servidores dele reiniciou várias vezes no final de semana, por panes elétricas e hoje, recebi uma ligação que ninguém conseguia conectar ao email .

Ao chegar ao servidor e olhar os logs, notei que havia sempre problemas na consulta da base ldap.

Procurei o processo do servidor ldap e ele não estava lá … pronto, achei o famigerado problema.

De cara, a primeira coisa a ser feita, é parar o processo do ldap. Como era um CentOS:

# service ldap stop

Pronto, agora é começar a trabalhar, e tentar recuperar a base ldap. No CentOS por ser baseado em um Red Hat, o comando para recuperar a base é :

# /usr/sbin/slapd_db_recover -h /var/lib/ldap

Neste ponto, se você for sortudo, como eu, a coisa já está resolvida. É só reincializar o processo do ldap e todos os processos que utilizam dele, e aproveitar o seu servidor de volta.

Mas, e se o servidor não voltar ? O que faço.

Primeira coisa, prepare-se, porque daqui em diante a coisa fica hardcore, principalmente se você não mantém uma política de backup efetiva do seu ldap.

Pare novamente o ldap server e faça uma cópia do estado atual do mesmo :

# tar -cvzf ldap.tar.gz /var/lib/ldap

Pronto, feito isto guarde isto aí em lugar bem seguro, porque caso haja algum problema, você pode recuperar o estado anterior.

Agora, é rodar novamente os comandos para tentar recuperar a base :

# /usr/sbin/slapd_db_recover -h /var/lib/ldap

Pronto, agora é tentar rodar o comando para mandar sua base ldap para um arquivo :

# slapcat -l ldap.ldif

Agora é olhar se o seu arquivo ldif contém todas as entradas do seu antigo ldap.
Caso não encontre, é chegar ao modo desespero, pois você vai ter que rodar a recuperação da base do ldap em modo catastrófico :

# /usr/sbin/slapd_db_recover -h /var/lib/ldap -v -c

Rode novamente o slapcat e tenha certeza que não houve nenhum erro.

A partir daí, é recuperar a base de dados. Limpe o diretório do ldap e execute o comando :

# slapadd -l lap.ldif

Pronto, depois é recuperar as permissões do diretório :

# chown -R ldap:ldap /var/lib/ldap

E reiniciar o ldap. A partir daí todos os processo que o usam estaram novamente em funcionamento.

Caso todos os passos acima falhem …. é melhor mesmo que tenha um backup da base …