Como corrigir tabela wp_posts corrompida
O que é a tabela de posts corrompida no WordPress?
A tabela de posts é onde o WordPress guarda todos os posts, páginas, revisões e itens de menu. Quando ela corrompe, os arquivos de dados ou de índice ficam inconsistentes e o MySQL recusa as leituras e escritas nela. Como praticamente todo o site depende dessa tabela, a corrupção faz o conteúdo sumir, impede salvar e costuma derrubar o site. O reparo reconstrói os índices e ponteiros internos da tabela, sem remover o conteúdo.
Como identificar
- No log do MySQL aparece “Table ‘./banco/wp_posts’ is marked as crashed and should be repaired”.
- Posts e páginas somem do site ou do painel, ou não salvam mesmo sem erro de conexão.
- O wp-admin mostra “One or more database tables are unavailable” apontando a tabela de posts.
- A corrupção surge após queda de energia, disco cheio ou reinício forçado do MySQL durante uma escrita.
Antes de começar: Exporte o banco antes de reparar e remova a constante WP_ALLOW_REPAIR logo após terminar: enquanto ela existe, qualquer visitante consegue abrir /wp-admin/maint/repair.php sem autenticação.
Como prevenir
- Mantenha backups automáticos diários do banco, já que a tabela de posts guarda todo o conteúdo
- Use o engine InnoDB, mais resistente a corrupção após quedas do que o MyISAM
- Limite o número de revisões por post e monitore o espaço em disco do servidor
Causa
- MySQL/MariaDB encerrado abruptamente (queda de energia ou kill) no meio de uma escrita na tabela de posts.
- Disco do servidor cheio, impedindo o MySQL de gravar por completo os arquivos da tabela de posts.
- Tabela MyISAM com índice estourado, comum em sites antigos com muitas revisões acumuladas.
- Setor defeituoso no disco onde ficam os arquivos de dados da tabela de posts.
- Importação ou migração que copiou os arquivos da tabela de forma incompleta entre servidores.
Como resolver
- Faça backup do banco antes de tudo: exporte o banco pelo phpMyAdmin. A tabela de posts concentra todo o conteúdo, então o backup é obrigatório antes de qualquer reparo.
- Tente o reparo nativo do WordPress: via FTP, adicione a constante ao wp-config.php e abra a página de reparo:
define( 'WP_ALLOW_REPAIR', true ); // depois acesse seudominio.com/wp-admin/maint/repair.php - Repare direto no MySQL se preferir: no phpMyAdmin (aba SQL) ou via WP-CLI, rode o reparo sobre a tabela de posts apontada no erro. Em tabelas InnoDB, use a reconstrução do engine em vez de REPAIR.
- Remova a constante de reparo: apague a linha WP_ALLOW_REPAIR do wp-config.php assim que terminar, pois ela deixa a rota de reparo aberta sem login.
- Restaure de backup se o reparo falhar: se a tabela não reconstrói, importe a tabela de posts a partir do backup mais recente. Conteúdo perdido entre o backup e a falha precisa ser recriado.
SQL
-- Reparo da tabela de posts, via phpMyAdmin (aba SQL) ou cliente mysql
REPAIR TABLE wp_posts;
CHECK TABLE wp_posts;
-- REPAIR so cobre MyISAM. Em InnoDB, reconstrua o engine para forcar o reparo:
ALTER TABLE wp_posts ENGINE = InnoDB;
-- Opcional: limpar revisoes acumuladas que incham a tabela
DELETE FROM wp_posts WHERE post_type = 'revision';
Perguntas frequentes
Reparar a tabela de posts apaga meu conteúdo?
Não. O reparo reconstrói índices e ponteiros internos sem remover posts ou páginas. Ainda assim, exporte o banco antes: qualquer operação sobre uma tabela já corrompida tem algum risco.
Como confirmo que é a tabela de posts que está corrompida?
O log do MySQL nomeia a tabela, por exemplo "Table './banco/wp_posts' is marked as crashed". A tela /wp-admin/maint/repair.php também lista quais tabelas precisam de reparo.
REPAIR TABLE não funcionou. O que faço?
REPAIR TABLE só atua em MyISAM. Se a tabela de posts for InnoDB, use ALTER TABLE wp_posts ENGINE=InnoDB para reconstruí-la. Se nem isso resolver, restaure a tabela a partir do backup.
Posso reparar sem editar o 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 rota no navegador.
Perdi posts após o reparo. É possível recuperá-los?
O reparo não apaga conteúdo, mas dados gravados no exato momento da falha podem não ter sido salvos. A recuperação vem do backup mais recente; por isso o backup diário é tão importante nessa tabela.
A tabela de posts corrompe de novo. 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, ou o problema volta.














