Por que todas as linhas são limpas durante a operação REPAIR TABLE do MySQL?

0

Tenho o zpanel instalado em minha máquina com Windows 7 para executar o php e o MySQL. Tanto o php quanto o MySQL rodaram bem até hoje (18-ago-2016), mas hoje eu achei que uma das minhas tabelas do MySQL não é acessível do php e do phpmyadmin e depois descobri que ele está travado. Quando passei pelo phpmyadmin, descobri que é declarado "em uso" na descrição da tabela MySQL sob esse banco de dados específico. Então eu tentei REPAIR TABLE (tablename) da consulta sql sob o banco de dados do phpmyadmin. A tabela é reparada com sucesso, mas todos os meus dados (linhas da tabela) foram excluídos ou vazios (não tenho certeza, a contagem de linhas é zero). Havia milhares de linhas de dados. Mas enquanto eu estou inserindo novos dados para essa tabela reparada, ele está usando o próximo id (incremento automático) da tabela que caiu anteriormente.

Minha pergunta é: Existe alguma maneira de recuperar minhas linhas da mesa que caiu após o reparo?

[No backup gerado automaticamente, descobri que a tabela com falhas não tem linhas antes de um mês atrás (o backup de dados é mantido para cada dia por dois meses), embora a tabela tenha falhado hoje. Mas todas as outras tabelas (existem três tabelas) do mesmo banco de dados possuem linhas intactas.]

    
por Abdullah Mamun-Ur- Rashid 18.08.2016 / 09:40

1 resposta

0

De acordo com a documentação oficial do MySQL :

Caution

Make a backup of a table before performing a table repair operation; under some circumstances the operation might cause data loss. Possible causes include but are not limited to file system errors. See Chapter 8, Backup and Recovery.

Você diz que esta tabela parou de ter dados há um mês, portanto, a menos que essa tabela seja colocada em um sistema de arquivos diferente, descartaria isso como o motivo (porque suas outras tabelas também seriam possivelmente afetadas). Isso também diz que os erros do sistema de arquivos não são os únicos motivos.

Parece-me que REPAIR TABLE não causou nenhum dano à sua tabela, mas ocorreu algum evento há cerca de 1 mês e foi o que parou de ter dados nessa tabela. Sem mais informações, é difícil dar dicas, mas elas podem incluir:

  • Alterações no código que envolvem instruções DELETE FROM incorretas ao excluir todas as linhas.
  • Scripts de manutenção que não estão sendo executados adequadamente e excluindo linhas corretas.
  • A injeção SQL ataca permitindo que um atacante remoto exclua o conteúdo da tabela.
  • ...
por 18.08.2016 / 10:05