O programa cliente mysqlcheck oferece uma maneira eficiente para executar a manutenção das tabelas em seu banco de dados — ele verifica, conserta, otimiza ou apenas analisa as tabelas dentro do banco de dados.
O mysqlcheck deve ser usado quando o servidor mysqld está rodando — uma de suas primeiras vantagens é essa: a de não precisar indisponibilizar o servidor para fazer uma manutenção no seu sistema de banco de dados.
O mysqlcheck é um “frontend”. Ele se autentica no MySQL e execute as declarações CHECK TABLE, REPAIR TABLE, ANALYZE TABLE e OPTIMIZE TABLE do modo mais conveniente pro usuário. Ele determina a forma mais adequada para cada declaração de acordo com a operação pedida, na linha de comando, e a envia ao servidor para ser executada.
É o indicado para realizar as tarefas de manutenção em tabelas MyISAM. Outros mecanismos de armazenamento (storage engines) podem não suportar todas as operações, nestes casos, mensagens de erro irão surgir para te informar do fato:
note : The storage engine for the table doesn't support check
PRECAUÇÕES
Você deve fazer backup dos dados nas tabelas antes de inciar uma operação de restauração (repair) nestas tabelas. Sob certas circunstâncias, a operação pode causar perda de dados.
Algumas causas de perda de dados podem estar ligadas a sistemas de arquivos com erros.
De acordo com o manual oficial do MySQL, há 3 sintaxes possíveis pro comando mysqlcheck:
mysqlcheck [opcoes] nome_do_banco [nome_da_tabela1 nome_da_tabela2 ...] mysqlcheck [opcoes] --databases nome_do_banco1 nome_do_banco2 ... mysqlcheck [opcoes] --all-databases
Daqui pra frente, vamos desenvolver melhor o assunto e algumas das opções mais comuns de uso do comando.
Como verificar uma tabela dentro do banco de dados
Se seu aplicativo retornou uma mensagem de erro, informando que uma determinada tabela está corrupta, execute o mysqlcheck assim:
mysqlcheck -c nome_do_banco nome_da_tabela -u root -p
forneça a senha, assim que lhe for pedido e aguarde o resultado:
nome_do_banco.nome_da_tabela OK
Se a senha e/ou nome de usuário estiver errada, o sistema emitirá uma mensagem de erro semelhante a esta:
mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
A opção -c
é a que indica que a operação a ser realizada é de checagem (verificatória).
Como verificar todas as tabelas em um banco de dados
Se quiser verificar todas as tabelas dentro de um banco de dados, com o mysqlcheck, omita seus nomes. Forneça apenas o nome do banco de dados que as contém (no meu caso, é clientes
):
mysqlcheck -c clientes -u root -p
O meu resultado foi este:
clientes.CLPJ OK
clientes.CLCD OK
clientes.CLPD OK
clientes.CLCT OK[/plain]
Como checar todas as tabelas e bancos de dados
Para realizar uma checagem desta amplitude, o comando executado é bem curto:
mysqlcheck c -u root -p --all-databases
Você pode executar o mysqlcheck em mais de um banco de dados (sem ser todos), assim, com a opção --databases
. No exemplo, que segue, o comando será executado em todas as tabelas dentro dos bancos de dados fornecedores
e clientes
:
mysqlcheck -c -u root -p --databases fornecedores clientes
Como analisar tabelas usando o mysqlcheck
O exemplo que segue, usa o comando mysqlcheck, com a opção -a
para analisar a tabela cadastros, dentro do banco de dados clientes:
mysqlcheck -a clientes cadastros -u root -p
Internamente, o mysqlcheck roda a declaração ANALYZE TABLE em relação à clientes
. Enquanto trabalha, trava a tabela, permitindo apenas a sua leitura – motivo, pelo qual, você não deve fazer estas tarefas em horários de pico.
Use o mysqlcheck para otimizar tabelas
No exemplo que segue, o mysqlcheck é usado para otimizar a tabela projetos, dentro do banco de dados clientes.
mysqlcheck -o clientes projetos -u root -p
Enter password: clientes.projetos Table is already up to date
Como já disse, o comando mysqlcheck executa um comando MySQL internamente. Neste caso, o OPTIMIZE TABLE.
À medida em que você vai removendo registros das suas tabelas, espaços sem uso vão ficando no meio. Este comando funciona semelhante ao desfragmentador de alguns sistemas operacionais, reorganizando os espaços, o que melhora a performance em tabelas que já tenham passado por grandes quantidades de alterações.
Restaure, conserte tabelas com o comando mysqlcheck
Aqui, o mysqlcheck vai usar internamente o comando REPAIR TABLE, que repara (conserta) uma tabela MyISAM corrompida.
Veja como:
mysqlcheck -r clientes projetos -u root -p
Combine diversas tarefas em uma só declaração mysqlcheck
É claro que, para a sua comodidade, é possível combinar diversas tarefas para serem executadas pelo mysqlcheck, em apenas uma linha de comando. veja como combinar CHECK, OPTIMIZE e REPAIR e mais a opção --auto-repair
, dentro do banco de dados clientes (adeque o comando à sua realidade):
mysqlcheck -u root -p --auto-repair -o clientes
Ou em todas as tabelas, em todos os bancos de dados:
mysqlcheck -u root -p --auto-repair -o --all-databases
LEIA MAIS:
Comandos (internos) de manutenção — rápida noção dos comandos REPAIR, ANALYZE, CHECK e OPTIMIZE. Otimize suas consultas — use o QUERY CACHE!
Outras opções úteis pro mysqlcheck
Para ter um feedback maior do que está sendo feito pelo programa, use a opção –debug-info. Ela é mais voltada para encontrar erros dentro do próprio programa, para desenvolvedores – mas é uma mão na roda para administradores de MySQL que desejam ter um maior controle do que o comando está executando. Veja, no exemplo, como a saída oferece mais informações.
mysqlcheck -u root -p --debug-info --auto-repair clientes projetos
Enter password: clientes.projetos OK User time 0.01, System time 0.00 Maximum resident set size 1584, Integral resident set size 0 Non-physical pagefaults 538, Physical pagefaults 0, Swaps 0 Blocks in 0 out 0, Messages in 0 out 0, Signals 0 Voluntary context switches 3, Involuntary context switches 17