Como Reparar Tabelas de Banco de Dados MySQL Corrompidas Passo a Passo

No mundo moderno, as empresas não dependem exclusivamente de uma plataforma de servidor de banco de dados específica. Há muitas plataformas de banco de dados disponíveis que são adequadas para lidar com cargas de trabalho moderadas e requisitos de alta disponibilidade e recuperação de desastres. MySQL é uma dessas plataformas de banco de dados que oferece muitas funcionalidades e alto desempenho.

Assim como outros RDBMS, o MySQL também é vulnerável à corrupção do banco de dados e das tabelas. A recente interrupção causada por Microsoft e CrowdStrike também afetou os servidores de banco de dados MySQL. Devido a falhas do sistema operacional, as tabelas do banco de dados ou bancos de dados inteiros ficam corrompidos.

Neste artigo, vou mostrar como podemos corromper e reparar uma tabela de banco de dados MySQL. Este artigo é útil para DBAs para simular falhas e ajudá-los a determinar a melhor maneira possível de restaurar ou reparar a tabela corrompida do MySQL.

Entendendo a Corrupção do Banco de Dados MySQL

A corrupção do banco de dados MySQL pode manifestar-se de várias formas, incluindo:

Tabelas Inacessíveis

A tabela inteira ou um subconjunto específico da tabela se torna inacessível. Quando você tenta acessar a tabela corrompida, você encontrará erros que apontam para a corrupção do arquivo de índice ou do arquivo de dados de uma tabela.

Erros de Inconsistência de Dados

Se a tabela estiver corrompida, em vez de dados significativos, sua consulta pode retornar alguns valores de lixo ou resultados inconsistentes ou incompletos.

Aberturas Inesperadas

Em alguns casos, o MySQL pode falhar enquanto acessa a tabela ou executa cópias de backup usando mysqldump. Eu encontrei este erro enquanto simulava o cenário de corrupção. Eu corrompei o arquivo de dados de uma tabela. Depois que eu iniciei o serviço, quando eu tentei acessar a tabela usando uma instrução SELECT, o serviço do MySQL encerrou automaticamente.

Mensagens de Erro durante as Operações do Banco de Dados

Ao acessar a tabela corrompida, você pode encontrar certos erros, como:

Plain Text

 

Esses erros indicam que o arquivo de dados ou arquivos de índice associados estão corrompidos.

É crucial entender a causa raiz da corrupção para prevenir ocorrências futuras e garantir a integridade dos dados.

Pré-requisitos para Reparar Tabelas do MySQL

Antes de tentar qualquer reparo, certifique-se de ter o seguinte:

  • Cópia de backup completa do banco de dados do MySQL
  • Espaço em disco suficiente
  • Acesso administrativo ao servidor MySQL

Agora, vamos simular a corrupção da tabela.

Tabela MySQL Corrompida

Antes de nós aprendermos sobre o processo de reparo do banco de dados, primeiro entendemos como corromper o banco de dados. Para demonstração, eu criei um banco de dados chamado “CorruptDB” em um servidor de banco de dados MySQL. Eu também criei uma tabela chamada corrupt_table no banco de dados CorruptDB.

Aqui está o código para criar um banco de dados e tabela.

MySQL

 

Eu adicionei um milhão de registros à tabela executando a seguinte consulta.

MySQL

 

Observe que a simulação de corrupção da tabela é feita em meu laptop. Não tente isso em produção, desenvolvimento ou qualquer outro ambiente. A tabela que estou usando nesta demonstração é criada com o motor de banco de dados MyISAM. Você pode ler sobre Motores de Armazenamento Alternativos para saber mais sobre os motores de banco de dados do Servidor MySQL.

Eu realizei os seguintes passos para corromper a tabela.

Passo 1: Parar Serviços do Servidor MySQL

Você precisa parar o servidor MySQL. Para fazer isso, execute o PowerShell como administrador e execute o seguinte comando.

Plain Text

 

Alternativamente, você também pode pará-lo dos Serviços.

Passo 2: Corromper o Arquivo de Índice da Tabela

Agora, nós devemos corromper o arquivo de índice da tabela. Quando você cria qualquer tabela no motor de banco de dados MyISAM, três arquivos são criados quando você cria uma tabela usando o motor de banco de dados MyISAM.

  • ARQUIVOS MYD: Este arquivo contém os dados reais.
  • ARQUIVOS MYI: Este é um arquivo de índice.
  • Arquivos Frm: O arquivo contém uma estrutura de tabela.

Nós vamos corromper o arquivo de índice. Os arquivos de dados estão localizados na localização padrão, que é “C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb.” Para corromper, estamos usando um editor de hexadecimal.

Baixe e instale o editor de hexadecimal. Abra os arquivos MYI com ele. O arquivo se parece com a imagem seguinte:

Substitua os primeiros 5 bytes por alguns valores aleatórios. Salve o arquivo e feche o editor.

Agora, vamos iniciar o serviço e tentar acessar a tabela.

Passo 3: Iniciar os Serviços do MySQL e Acessar a Tabela

Primeiro, inicie os Serviços do MySQL executando o seguinte comando em PowerShell.

Plain Text

 

Uma vez os serviços iniciados, execute a seguinte consulta no terminal do MySQL.

MySQL

 

A consulta retornou o seguinte erro:

O erro indica que o índice da tabela corrupt_table foi corrompido e deve ser reparado.

Métodos Manuais para Reparar Tabelas do MySQL

Existem certos métodos que você pode usar para reparar a tabela corrompida do MySQL. O primeiro método é usar os comandos de verificar tabela e reparar tabela.

Comandos de Verificar Tabela e Reparar Tabela

Você pode restaurar a tabela usando os comandos internos de MySQL CHECK TABLE e REPAIR TABLE. Estes comandos são usados para diagnosticar e reparar qualquer tabela MyISAM.

O comando de verificação de tabela verifica a integridade da tabela. Ele verifica a estrutura da tabela, índices e dados para quaisquer corrupções e mostra os detalhes. A sintaxe está abaixo:

Plain Text

 

Você pode especificar as opções diferentes.

  1. QUICK: Esta opção rápida verifica e identifica problemas como índices corrompidos.
  2. FAST: Ela verifica tabelas que não foram fechadas corretamente.
  3. CHANGED: Esta opção verifica apenas as tabelas que foram alteradas após a última execução de CHECK TABLE.
  4. MEDIUM: Esta opção verifica os registros e verifica se as ligações entre a tabela e os dados são corretas.
  5. EXTENDED: Esta opção faz uma scanner detalhada e verifica a estrutura da tabela e o conteúdo.

Aqui nesta demonstração, faremos uma scanner rápida. Aqui está o comando.

Plain Text

 

Screenshot:

Como você pode ver na imagem de tela acima, o erro indica que o índice da tabela corrupt_table está corrompido e precisa ser corrigido.

Nós usaremos o comando REPAIR TABLE para corrigir a corrupção na tabela. O comando REPAIR TABLE é usado para recuperar a estrutura da tabela e os dados da corrupção, especialmente a tabela que tem o motor de banco de dados MyISAM. No caso do índice da tabela estiver corrompido, o comando REPAIR TABLE reconstrói os índices.

A sintaxe de REPAIR TABLE é conforme segue:

Plain Text

 

Você pode especificar as seguintes opções:

  • QUICK: Ele apenas repara o arquivo de índice de uma tabela. Ele não acessa o arquivo de dados de uma tabela.
  • EXTENDED: Quando usamos esta opção, a instrução fará uma reparação completa. Também repara ou recria o arquivo de índice scanner todos os registros da tabela.

Neste demo, corromperemos o índice da tabela; portanto, usaremos a opção QUICK. Execute o seguinte comando.

Plain Text

 

Screenshot:

Como você pode ver na screenshot acima, a corrupt_table foi reparada com sucesso. Para verificar, execute a seguinte consulta no MySQL Workbench:

MySQL

 

Saída da consulta:

Como você pode ver, a tabela agora é acessível.

Restaurar Tabela Usando o Comando mysqldump

O segundo método é restaurar toda a tabela do backup. Este método pode ser usado quando a tabela está altamente corrompida e não pode ser reparada usando o comando REPAIR TABLE.

Para restaurar uma tabela MySQL do backup, podemos usar o comando mysqldump. Você pode ler o artigo “mysqldump — Um Programa de Backup de Banco de Dados” para saber mais sobre como usar o comando mysqldump. A sintaxe para restaurar a tabela está abaixo.

MySQL

 

Na sintaxe:

  • Username: Insira o nome de usuário que você está usando para se conectar ao banco de dados MySQL.
  • -p: Especifique a senha. Se deixar em branco, o MySQL solicitará uma senha.
  • [database_name]: Especifique o nome do banco de dados no qual você está tentando restaurar a tabela.
  • Table_dump.sql: Especifique o nome completo do arquivo de backup.

Para demonstração, eu tirei um backup da base de dados CorruptDB que está localizada na pasta C:\MySQLData\Backup.

Para restaurar a corrupt_table, podemos usar o seguinte comando.

MySQL

 

Uma vez que o comando for executado com sucesso, você poderá acessar a tabela. Execute o seguinte comando para verificar.

MySQL

 

Saída do comando:

Como você pode ver na imagem de tela acima, a tabela foi restaurada com sucesso.

Usando phpMyAdmin

Você também pode usar a ferramenta phpMyAdmin para reparar qualquer base de dados MySQL corrompida. phpMyAdmin é uma interface gráfica para gerenciar e manter MySQL e MariaDB. Para demonstração, eu instalei-o no meu laptop.

  • Para reparar a tabela, abra phpMyAdmin e navegue até a base de dados na qual a tabela corrompida existe.
  • No painel direito, você pode ver a lista das tabelas criadas na base de dados CorruptDB.
  • Selecione Corrupt_table da lista e selecione a opção Reparar tabela do menu suspenso.

Aqui está uma imagem de tela para referência:

Uma vez que a tabela for reparada, você pode ver o status da corrupt_table tornar-se OK. Aqui está a imagem de tela:

Conclusão

Neste artigo, aprendemos sobre as possíveis razões para a corrupção de bancos de dados MySQL e como corrigi-las. Explicei um processo passo a passo para corromper tabelas MySQL usando um editor de hex. Também cobri como corrigi-las usando os comandos CHECK TABLE e REPAIR TABLE. Também aprendemos como restaurar a tabela usando a ferramenta mysqldump

A reparação de uma tabela de banco de dados MySQL corrompida pode ser desafiadora, mas com as ferramentas e métodos corretos, é gerenciável. Os métodos manuais fornecem uma solução básica, enquanto o phpMyAdmin oferece uma opção de recuperação abrangente e confiável. Sempre certifique-se de fazer backups regulares e mantenha a saúde do seu banco de dados para minimizar o risco de corrupção.

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step