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:
ERROR 1016: Can't open file: 'table_name.MYI' (errno: 145)
Table ‘table_name’ is marked as crashed and should be repaired
Got error 28 from storage engine
ERROR 1030: Got error 127 from storage engine
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.
Create database corruptDB;
Use corruptdb;
CREATE TABLE corrupt_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MyISAM;
Eu adicionei um milhão de registros à tabela executando a seguinte consulta.
INSERT INTO corrupt_table (data)
SELECT CONCAT('RandomData-', FLOOR(1000 + (RAND() * 9000)))
FROM corrupt_table;
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.
net stop MySQL
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.
net start MySQL
Uma vez os serviços iniciados, execute a seguinte consulta no terminal do MySQL.
mysql> use corruptdb;
Database changed
mysql> select count(1) from corrupt_table;
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:
CHECK TABLE [option]
Você pode especificar as opções diferentes.
QUICK
: Esta opção rápida verifica e identifica problemas como índices corrompidos.FAST
: Ela verifica tabelas que não foram fechadas corretamente.CHANGED
: Esta opção verifica apenas as tabelas que foram alteradas após a última execução deCHECK TABLE
.MEDIUM
: Esta opção verifica os registros e verifica se as ligações entre a tabela e os dados são corretas.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.
CHECK TABLE corrupt_table
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:
REPAIR TABLE [option]
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.
REPAIR TABLE corrupt_table
Screenshot:
Como você pode ver na screenshot acima, a corrupt_table
foi reparada com sucesso. Para verificar, execute a seguinte consulta no MySQL Workbench:
use corruptdb;
select count(1) from corrupt_table;
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 -u [username] -p [database_name] < [table_dump.sql]
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 -u root -p corruptdb < C:\MySQLData\Backup\corrupt_table.sql
Uma vez que o comando for executado com sucesso, você poderá acessar a tabela. Execute o seguinte comando para verificar.
use corruptdb;
select count(1) from corrupt_table;
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