O que fazer quando o MySQL não faz nada?!?!

Author: Ricardo Soares - Postado em: 24/12/2007
Relacionado as categorias: Diversos | 1 Comment 





Resenha:
Minha alegria é chegar na empresa e descobrir que um servidor não está funcionando, meu cardiologista já disse que literalmente não conseguiria mais viver sem mim e agradece!

Dissertação:

O MySQL é um dos mais confiáveis SGDBs que já trabalhei, não que tenha tido muitas experiências com outros, mas até o momento ele não me deixou na mão, trabalho com bancos de dados com um certo tamanho (mais de 4GB e 20 bilhões de linhas em uma única tabela) e ao menos sempre que ele tem um curto circuito eu tenho uma maneira rápida de corrigir os problemas e quando o problema é muito complexo é muito fácil encontrar discussões sobre o assunto na internet. Vou contar uma situação que tive de crash em uma destas grandes tabelas, os crashes em MySQL geralmente ocorrem por falta de memória que é mal dimensionado pelo administrador de sistemas, neste caso eu, o sistema está configurado para poder consumir uma quantidade x de memória e nesta situação ele deveria estar configurado para consumir X-200MB de memória, quando ele tentou consumir (X-200MB)+1MB ele não conseguiu e travou, ficou emitindo mensagens que estava sem recursos para continuar, depois de alguns avisos ele simplesmente congelou e gerou uma falha no arquivo de indexação e outra falha no arquivo de dados que estavam des-sincronizados.

Após reinicializar o mysql a primeira coisa que fiz foi tentar alguma operação para verificar se estava tudo ok e o sistema informou …
error : Table ‘<>’ is marked as crashed and last (automatic?) repair failed
… Tentei um simples comando para otimizar as tabelas (comando optmize tables) direto no shell do sgdb (software mysql client), mas ele continuava falando que estava com a tabela quebrada e não poderia efetuar o comando, entrei em desespero! Minha primeira ação foi dar uma googleada e abrir uns 10 sites, todos ao mesmo tempo, dar uma rápida olhada no que era interessante, fechar as besteiras e começas a estudar o que era me parecia útil. Encontrei um comentário, seria o princípio da salvação de minha lavoura. O thread no forum discernia sobre um software, o vbulletin, e um processo para resolver craches do banco do software.

Depois de estudar bem as dicas repassadas no thread e de navegar um pouco mais, encontrar os diversos tipos de erros que podem vir a ocorrer com a base de dados e compreender o funcionamento do mysqlcheck resolvi então ler por completo a página de manual do comando. Finalmente cheguei na seguinte seqüência de comandos …

# 01) desliguei o apache prevenindo novas conexões
httpd stop

# 02) Esperei até que todos os processos fossem finalizados
mysqladmin proc stat -v -u <> -p<>

# 03) efetuei o flush de todas as informações
mysqladmin flush-tables -u <> -p<>

# 04) Rodei o comando para otimizar as tabelas
mysqlcheck -o –all-databases –user=<> –password=<>
obs) Este é o mesmo comando que o “myisamchk -o -v */*.MYI” porem o myisamcheck deve ser executado no diretório de arquivos do banco de dados e o SGDB não pode estar ligado.

# 05) este comando corrige os problemas.
mysqlcheck -F -r -v –all-databases –user=<> –password=<>
obs) Este é o mesmo comando que o “myisamchk -f -r -v *.MYI” porem o myisamcheck deve ser executado no diretório de arquivos do banco de dados e o SGDB não pode estar ligado.

# 06) restartei o apache
httpd start

As explicações obvias do porquê parei o apache e o porquê resolvi descarregar os buffers é básica, pergunte ao amigo ao lado. Mas porquê optei por otimizar as tabelas antes de corrigi-las? A opção “-F” faz com que o mysqlchek proceda as correções apenas nas tabelas que não tenham sido marcadas como “fechadas apropriadamente”, não estudei o suficiente, entretanto acredito que desta forma o sistema irá marcar as tabelas menos utilizadas do sistema como estáveis e ao passar o segundo comando de correção este só atuará sobre tabelas problemáticas, dando então maior velocidade ao corrigir as tabelas. A segunda execução do mysqlcheck já temos a opção -v, para apresentar informações do que está acontecendo, evitando assim de entrarmos em desespero caso o relógio “aperte”, e por fim a opção “-r”, que ao que compreendi do manual simplesmente resolveria todos os problemas possíveis de ocorrerem com a base de dados, se a opção “-r” não solucionar o seu problema, larga tudo e dá uma passada na igreja para se benzer pois vai precisar de reza braba.













Comments

One Response to “O que fazer quando o MySQL não faz nada?!?!”

  1. admin on August 30th, 2011 1:24 pm

    Em um momento tive que parametrizar a memória e para tanto fiz algo semelhante ao abaixo para agilizar o procedimento

    # myisamchk –force –update-state –key_buffer_size=10240M –sort_buffer_size=10240M –read_buffer_size=160M –write_buffer_size=160M tbl_nome

    Dependendo da quantidade de memória disponível você pode ainda alterar estes valores, quanto mais memória você tiver disponível mais rápido fica.

Leave a Reply






Últimos posts