domingo, 6 de maio de 2012

Mysql, comando via console, a saga continua! parte 3

Quando eu administrava os servidores de uma empresa que eu trabalhava, 
certo dia uma parte do site parou de funcionar, quando vi foi uma tabela 
que corrompeu (não me pergunte como!), depois de uma busca na 
internet consegui montar o seguinte material:
 
comando para reparar uma tabela: 
 
# mysqlcheck -h localhost -p database tabela --auto-repair
 


Usei o mysqlcheck pra ver o status das tabelas, e também reparar. Nesse documento tem detalhados os procedimentos:
Resumindo o conteúdo do link acima, normalmente o mysqlcheck -c nomedobanco já faz o check. e o mysqlcheck -r nomedobanco repara.
Tem casos onde o root não tem acesso ao banco, aí tem que usar a seguinte sintaxe:

# mysqlcheck -c -u nomedousuario -p –databases nomedobanco

O parametro -p é pra solicitar a senha.
Caso tenha algum banco que não está ok, o resultado desse comando já vai informar o banco, e a tabela com problema. Depois é só executar o mesmo comando alterando -c por -r de repair

mysqlcheck -r -u nomedousuario -p –databases nomedobanco



Abaixo segue um artigo semelhante:

 http://portugalcode.com/index.php?topic=326.0
Autor: @Scroll

Já se tornou um hábito: DBF corrompe. O que muitos não sabem é que os DBF do Visual Fox Pro sobre DBC são muito mais seguros que os DBF em clipper, ainda mais se usando buferização e transações. Mas mesmo assim, os DBF trafegam pela rede, e uma rede mal projetada conseqüentemente fará com que os problemas aconteçam.

Um dia o programador resolve migrar para a arquitetura client/servidor e escolhe por motivos diversos o MySql. Um ótimo banco, mas com o passar do tempo verifica que servidores resetados, problemas no HD e muitas outras coisas fazem com que os arquivos do MySql também corrompam.

O problema é que normalmente você terá que acessar algum font-end do Mysql e rodar uma rotina de reparação do banco de dados. É um processo simples, mas que muitas vezes torna-se complicado porque quem esta na outra ponta é um usuário básico, e acaba-se tomando um grande tempo do suporte para resolver.

O que alguns programadores não sabem é que esse reparo do banco é na verdade um comando nativo do MySql que pode ser dado diretamente pela linguagem de programação, fazendo com que a manutenção no banco MySql possa ser quase transparente para o usuário.

A sintaxe do comando é simples:

Repair table

Mas como saber qual a tabela que esta com problema, e também como saber se ela esta com problemas?

Se uma tabela não esta funcionando corretamente o comando SQL retorna erro e na captura desse erro sempre terá a inscrição MYI (comigo sempre), com isso em mãos podemos fazer na nossa rotina de tratamento dos comandos SQL que ao verificar este erro faça uma manutenção em todo o banco para repará-lo no momento que ocorre o erro. Veja o seguinte processo:
Código:
Function executa_sql

Parameters m.lcsql As String

Local m.lnSucesso As Integer

m.lnSucesso=SQLExec(m.IDSQL,m.lcsql)

If m.lnSucesso=-1

      =Aerror(laErroSQL)

      If "MYI" $ Upper(m.laErroSQL(1,3))

            =Messagebox("O banco necessita de manutenção neste momento, 
aguarde até o final do processamento.")

            SQLExec(m.IDSQL,"show tables from ","cReparar")

            Select cReparar

            Scan All

                  Wait Window At 0,0 "Verificando tabela "+Padl(Recno("cReparar"),4,"0")+" 
de "+Padl(Reccount("cReparar"),4,"0") Nowait Noclear

                  SQLExec(This.Id,"REPAIR TABLE "+Alltrim(cReparar.tables_in_))

            Endscan

            Wait Clear

            =Messagebox("Verificação completa.")

            executa_sql(m.lcExec)

      Endif

Endif

Endfunc


Agora quando a mensagem de erro de tabelas do MySql for detectada o processo repara automaticamente o banco. Note que chamamos a função de forma recursiva para que o comando que falhou agora possa ser executado com sucesso.

Nenhum comentário: