Como corrigir One or more database tables are unavailable
O que é o erro Database Tables Unavailable no WordPress?
Esse aviso aparece quando o WordPress conecta ao banco MySQL/MariaDB, mas o servidor recusa o acesso a uma tabela específica porque ela está marcada como crashed (corrompida). Diferente do erro de conexão, aqui o banco responde: o problema é que uma tabela como wp_posts ou wp_options ficou inconsistente e precisa de reparo antes de voltar a funcionar.
Como identificar
- O wp-admin mostra “One or more database tables are unavailable. The database may need to be repaired.”.
- No log do MySQL aparece “Table ‘./banco/wp_posts’ is marked as crashed and should be repaired”.
- Páginas ou áreas específicas do site somem, enquanto o resto carrega, dependendo da tabela afetada.
- O aviso surge após queda do servidor, disco cheio ou reinício forçado do MySQL no meio de uma escrita.
Antes de começar: Exporte o banco antes de reparar e remova a constante WP_ALLOW_REPAIR imediatamente após terminar: enquanto ela existe, qualquer visitante consegue abrir /wp-admin/maint/repair.php sem login.
Como prevenir
- Mantenha backups automáticos diários do banco em local externo para restaurar rápido
- Monitore o espaço em disco do servidor para o MySQL nunca ficar sem espaço de escrita
- Migre as tabelas de MyISAM para InnoDB, que é mais resistente a corrupção após quedas
Causa
- Tabela MyISAM marcada como crashed após o MySQL ser encerrado abruptamente durante uma escrita.
- Disco do servidor cheio, impedindo o MySQL de gravar os arquivos .MYD/.MYI da tabela por completo.
- Índice da tabela estourado ou inconsistente, comum em tabelas MyISAM grandes como wp_postmeta.
- Setor defeituoso no disco onde ficam os arquivos do banco, corrompendo os dados da tabela.
- Cópia incompleta dos arquivos da tabela durante uma migração entre servidores.
Como resolver
- Faça backup do banco antes de reparar: exporte o banco pelo phpMyAdmin do painel da hospedagem. Operar sobre uma tabela já corrompida tem risco, e o backup é a rede de segurança.
- Ative o modo de reparo do WordPress: via FTP, adicione a constante ao wp-config.php antes da linha que pede para parar de editar:
define( 'WP_ALLOW_REPAIR', true ); - Acesse a página de reparo: abra seudominio.com/wp-admin/maint/repair.php e clique em "Reparar banco de dados". A rota funciona sem login enquanto a constante estiver ativa e lista exatamente quais tabelas precisam de reparo.
- Remova a constante depois: apague a linha WP_ALLOW_REPAIR do wp-config.php assim que terminar. Deixá-la ativa mantém a rota de reparo aberta sem autenticação.
- Repare direto no MySQL se o reparo do WP não bastar: use o phpMyAdmin ou o WP-CLI para rodar o reparo sobre a tabela nomeada no erro, especialmente em tabelas InnoDB que o reparo do WordPress não cobre.
SQL
-- Reparo da tabela apontada no erro, via phpMyAdmin (aba SQL) ou cliente mysql
REPAIR TABLE wp_options;
CHECK TABLE wp_options;
-- REPAIR so atua em MyISAM. Para tabela InnoDB, reconstrua o engine:
ALTER TABLE wp_posts ENGINE = InnoDB;
Perguntas frequentes
Esse aviso é o mesmo que o erro de conexão com o banco?
Não. No erro de conexão o WordPress nem fala com o MySQL. Aqui a conexão funciona, mas o servidor recusa uma tabela específica porque ela está marcada como crashed e precisa ser reparada.
O reparo apaga o conteúdo da tabela?
Não. O reparo reconstrói índices e ponteiros internos sem remover posts ou opções. Mesmo assim, exporte o banco antes: qualquer operação sobre uma tabela corrompida tem algum risco.
Como sei qual tabela está indisponível?
A própria tela /wp-admin/maint/repair.php lista as tabelas afetadas, e o log do MySQL nomeia a tabela, por exemplo "Table './banco/wp_posts' is marked as crashed".
Reparei pelo WordPress mas a tabela continua indisponível. E agora?
O reparo do WordPress só cobre MyISAM. Se a tabela for InnoDB, use ALTER TABLE nome ENGINE=InnoDB no phpMyAdmin ou restaure a tabela a partir de um backup.
Posso reparar sem mexer no wp-config.php?
Sim. Com acesso SSH, o comando "wp db repair" do WP-CLI repara todas as tabelas sem precisar da constante WP_ALLOW_REPAIR nem abrir nenhuma rota no navegador.
As tabelas voltam a ficar indisponíveis depois do reparo. Por quê?
Corrupção recorrente indica causa de fundo: disco cheio, falha de hardware ou MySQL encerrado à força. Verifique o espaço em disco e a saúde do disco com o suporte da hospedagem, senão o problema retorna.














