Voltar ao blog

Soluções Rápidas para Reparar Tabelas Corrompidas no MySQL: Um Tutorial

Soluções Rápidas para Reparar Tabelas Corrompidas no MySQL: Um Tutorial

MySQL é um dos mais populares de código aberto RDBMS (Sistemas de Gerenciamento de Banco de Dados Relacionais). É uma parte integrante do rápido crescimento da LAMP Stack e ganhou uma base de fãs impressionante entre desenvolvedores e administradores de sistema. Em comparação com bancos de dados não relacionais, o SQL oferece excelentes funcionalidades para organizar, armazenar e gerenciar dados de forma eficaz. As funcionalidades distintas de organização de tabelas e os recursos de destaque do banco de dados SQL o tornam a escolha preferida em todos os níveis da organização, tanto grandes quanto pequenas.

As tabelas do MySQL podem ser danificadas em raras ocasiões, indicando que tal erro ocorreu e os dados armazenados nelas estão ilegíveis. Quando você tenta ler dados de uma tabela corrompida, o servidor trava e gera um erro ou uma lista de erros.

Possíveis Razões por Trás da Corrupção de Tabelas do MySQL

A seguir estão algumas das razões mais típicas para tabelas corrompidas:

  • O serviço MySQL trava após a reinicialização.
  • A máquina desliga inesperadamente devido a uma queda de energia.
  • Memória defeituosa ou falha de hardware.
  • Bugs de software no SO ou no código SQL.
  • O MySQL desliga durante a gravação.
  • O sistema fica OFF ao atualizar o SQL.

Antes de corrigir uma tabela que você suspeita estar corrompida, crie um backup do seu diretório de informações. Isso ajudará a reduzir a probabilidade de perda de dados. Neste guia rápido, vamos orientá-lo pelas etapas de solução de problemas para reparar tabelas corrompidas no MySQL.

Pré-requisitos

Para acompanhar este tutorial, você precisará do seguinte:

Passo 1: Parar o Serviço MySQL e Fazer Backup dos Dados

Inicialmente, pare o serviço MySQL usando o comando systemctl:

Após parar o serviço SQL, o próximo passo é criar backups de todos os arquivos existentes em um novo diretório. Use o diretório de dados padrão do Ubuntu /var/lib/mysql/ para copiar todos os dados do sistema:

Passo 2: Identificar o Erro

A seguir, iniciaremos nossa investigação e identificaremos a tabela corrompida. Se a tabela estiver usando o mecanismo de armazenamento MyISAM, use a instrução CHECK TABLE e verifique o status da tabela:

Você verá uma mensagem como saída confirmando la tabela ou tabelas corrompidas.

Passo 3: Reparar a Tabela Corrompida

Se houver um erro na tabela MyISAM e você o tiver identificado, use a instrução REPAIR TABLE para corrigir o erro:

Se a correção for bem-sucedida, você deverá ver a seguinte mensagem sem erros como saída:

No entanto, se você perceber que o erro reaparece, siga o documento oficial do MySQL versão 8.0 para reconstruir ou reparar tabelas.

Ao contrário do mecanismo de armazenamento MyISAM, o processo do InnoDB envolvido na reparação de tabelas é diferente no mecanismo de armazenamento InnoDB. O InnoDB é o mecanismo de armazenamento padrão no MySQL 8.0. Ele possui operações automatizadas de verificação e reparo de corrupção. O MySQL InnoDB verifica se há páginas corrompidas realizando checksums em cada página que lê. Se uma discrepância for detectada, ele interromperá automaticamente o servidor MySQL.

O ponto principal é que raramente há necessidade de reparar tabelas InnoDB. O InnoDB possui um mecanismo de recuperação de falhas que pode resolver a maioria dos problemas por meio de uma reinicialização.

Tente reiniciar o serviço MySQL para ver se consegue obter acesso ao servidor:

Se você não conseguir reconstruir uma tabela InnoDB corrompida mesmo após a reinicialização, tente o método “Dump and Reload” sugerido na documentação do MySQL. Este método envolve recuperar o acesso à tabela corrompida, usando o utilitário mysqldump. Uma pasta deve ser criada para armazenar e reter o backup lógico da tabela. Assim que o erro for corrigido, ele recarrega a tabela de volta no banco de dados.

Step 4: Leverage innodb_force_recovery Option

Se o servidor continuar travado ou inacessível, tente usar a opção force_recovery no InnoDB. Definir como ON a opção force_recovery é uma excelente maneira de restaurar bancos de dados MySQL. Você pode ativar essa opção modificando o arquivo mysqld.cnf no editor de texto nano:

Insira a seguinte linha sob a seção [mysqld]:

innodb force recovery

Salve e feche o arquivo após reiniciar o serviço MySQL.

Step 5: Create a mysqldump File

Se você conseguir acessar a tabela corrompida, use a opção mysqldump para colocar todos os dumps no novo arquivo. Nomeie o novo arquivo de acordo com sua preferência e certifique-se de adicionar a extensão .sql no final. Aqui estamos nomeando o arquivo como demo.sql:

Depois disso, use a consulta DROP TABLE para remover a tabela do banco de dados. Você pode usar a seguinte sintaxe para evitar a necessidade de reabrir o prompt do MySQL:

Então, usando o documento de dump demo.sql que você acabou de preparar, restaure a tabela:

Você corrigiu com sucesso sua tabela corrompida do MySQL e está pronto para trabalhar no banco de dados perfeitamente.

Conclusão

Corrupções de tabela ou travamentos inesperados do sistema têm probabilidade de ocorrer se você estiver trabalhando com um grande volume de dados. Vale a pena mencionar que o mecanismo de armazenamento MySQL InnoDB é mais tolerante a falhas do que o mecanismo MyISAM anterior. Tabelas que utilizam o mecanismo de armazenamento InnoDB ainda podem ser corrompidas, embora o perigo de corrupção de tabelas e falhas seja significativamente reduzido graças aos seus recursos de autorrecuperação.

Finalmente, há muitos tópicos e tutoriais sobre bancos de dados que você pode explorar em nosso blog:

Boa Computação!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev é um designer criativo na CloudSigma, focado na construção de uma identidade empresarial consistente por meio de canais de marketing tradicionais e inovadores. Ele é hábil em combinar a visão artística com o marketing estratégico para criar narrativas de marca impactantes.

Comentários

Nenhum comentário ainda. Seja o primeiro.