Repair em tablelas do Mysql

Recentemente encontrei um problema muito distinto no Mysql, nunca tinha visto coisa parecida (talvez por conta do meu tempo com banco de dados, sei lá), mas vamos lá.

 

O Mysql serve uma aplicação RADIUS (programa de autenticação em rede, no caso o Freeradius) então funciona assim, um usuário loga na rede, aí o Radius pega os dados do usuário, cria uma sessão para ele e registra no banco de dados através de uma tabela chamada radpostauth, nessa tabela são criadas as sessões de cada usuário e cada sessão é identificada por um ID (ou seja, cada ID é único), o meu problema foi que ao criar a sessão, o Mysql não estava fazendo o incremento automático (o que já estava configurado e sempre funcionou). O erro apresentado pelo log do Radius foi o seguinte:

     

  ERROR 1062 (23000): Duplicate entry <ID> for key 'PRIMARY'

 

E apesar de acusar duplicação na entrada da tabela, a ID "duplicada" não havia sido adicionada. Estudando um pouco, vi que com um comando é possível fazer um "check" da tabela e ver se ela está OK, o comando em questão era o analyze:

 

ANALYZE TABLE radpostauth;

 

Com esse comando é possível verificar a integridade da sua tabela, pois ele te mostra o status atual dela e como ela se encontra, no meu caso ela estava corrompida. Após descobrir que a minha tabela estava bichada, eu vi que precisava descobrir qual engine estava sendo usada pelo meu banco, no caso a MyISAM (se no seu caso for innoDB procure outra solução). Depois que consegui todas as informações necessárias, foi a vez do comando de REPAIR, ele é +- assim:

REPAIR TABLE radpostauth;

 Note que ele já te dá o status atual da tabela (que provavelmente é positivo). Após o REPAIR, rode novamente o ANALYZE para se segurar que está tudo ok e corra pro abraço!

 

vlwflw