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:
- A versão mais recente do Ubuntu instalado em seu sistema.
- Os usuários do sistema devem ter privilégios sudo.
- Se você tiver dificuldades para acessar sua conta sudo, considere alterar a senha root do MySQL.
- MySQL configurado em seu servidor.
Passo 1: Parar o Serviço MySQL e Fazer Backup dos Dados
Inicialmente, pare o serviço MySQL usando o comando systemctl:
|
1 |
sudo systemctl stop mysql |
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:
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
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:
|
1 |
mysql> CHECK TABLE table_name; |
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:
|
1 |
mysql> REPAIR TABLE table_name; |
Se a correção for bem-sucedida, você deverá ver a seguinte mensagem sem erros como saída:
|
1 2 3 4 5 6 7 8 9 10 11 |
Saída: +--------------------------+--------+----------+----------+ | Tabela | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
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:
|
1 |
sudo systemctl restart mysql |
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:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
Insira a seguinte linha sob a seção [mysqld]:

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:
|
1 |
mysqldump database_name table_name > 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:
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
Então, usando o documento de dump demo.sql que você acabou de preparar, restaure a tabela:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
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:
- Como Instalar o MySQL no CentOS 7
- Usuário MySQL — Criar e Conceder Permissões
- Configurando Replicação no MySQL no Ubuntu
Boa Computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.