# Como corrigir prefixo de tabela duplicado após migração

O prefixo de tabela duplicado no WordPress acontece quando uma migração cria tabelas com um prefixo repetido, como wp_wp_, ou quando o $table_prefix do wp-config.php deixa de bater com o banco. O site perde acesso aos dados porque procura as tabelas com o nome errado, e até a wp_options e a wp_usermeta guardam o prefixo internamente.

## O que é o prefixo de tabela errado no WordPress?

O problema de prefixo de tabela no WordPress surge quando o valor de $table_prefix no wp-config.php não corresponde mais ao prefixo real das tabelas no banco. Em migrações, algumas ferramentas duplicam o prefixo (gerando wp_wp_) ou trocam o prefixo padrão por outro sem atualizar o arquivo. Como o WordPress monta o nome de cada tabela com esse prefixo, qualquer descompasso faz o site procurar tabelas inexistentes. Pior: a wp_options e a wp_usermeta guardam o prefixo dentro de alguns nomes de opção e de chave (como wp_user_roles e wp_capabilities), então mudar só o nome das tabelas não basta.

## Como identificar

- O front mostra erro de banco ou o wp-admin retorna "Sorry, you are not allowed to access this page" após login.
- No phpMyAdmin as tabelas aparecem com prefixo duplicado, como wp_wp_posts em vez de wp_posts.
- Você perdeu o perfil de administrador: entra no painel mas sem permissões de admin.
- O erro começou logo após uma migração ou um plugin de mudança de prefixo de tabela.

**Antes de começar:** Faça backup completo do banco antes de renomear tabelas ou editar a wp_options e a wp_usermeta. Um prefixo corrigido pela metade pode bloquear o acesso de administrador ao painel.

## Como prevenir

- Defina o prefixo de tabela uma única vez, no início do projeto, e evite trocá-lo depois
- Use ferramentas de migração que preservam o prefixo original em vez de concatená-lo
- Ao mudar o prefixo, atualize sempre as chaves internas na wp_options e na wp_usermeta junto com as tabelas

Erros relacionados

- [Como corrigir Table doesn't exist após migração](https://full.services/wp-fixer/corrigir-table-doesnt-exist-wordpress/)
- [Como corrigir Error establishing a database connection](https://full.services/wp-fixer/corrigir-erro-conexao-banco-dados-wordpress/)
- [Como corrigir One or more database tables are unavailable](https://full.services/wp-fixer/corrigir-database-tables-unavailable-wordpress/)

## Causa

- Ferramenta de migração que concatenou o prefixo duas vezes, criando nomes como wp_wp_posts.
- Valor de $table_prefix no wp-config.php diferente do prefixo real das tabelas no banco.
- Mudança de prefixo nas tabelas sem atualizar as chaves internas na wp_options e na wp_usermeta.
- Importação que renomeou as tabelas mas manteve o wp-config.php apontando para o prefixo antigo.
- Plugin de segurança que trocou o prefixo pela metade, deixando tabelas e config dessincronizados.

## Como resolver

1. Identifique o prefixo real das tabelas: no phpMyAdmin, abra o banco e observe o prefixo que se repete no início das tabelas. Se vir wp_wp_, o prefixo foi duplicado; se vir um prefixo custom, anote-o para usar no wp-config.
2. Ajuste o $table_prefix no wp-config.php: via FTP, edite o wp-config.php e defina $table_prefix com o prefixo exato visto no banco, incluindo o sublinhado final. Esse é o caminho mais simples quando você só quer voltar a apontar para as tabelas existentes.
3. Renomeie as tabelas se o prefixo estiver duplicado: se preferir limpar o prefixo wp_wp_ de volta para wp_, renomeie cada tabela no phpMyAdmin ou via SQL. Esse caminho exige também ajustar as chaves internas no passo seguinte.
4. Corrija as chaves na wp_options e na wp_usermeta: atualize as opções e metas que carregam o prefixo no nome, como user_roles na wp_options e capabilities e user_level na wp_usermeta. Sem isso, você perde o acesso de administrador mesmo com as tabelas certas.
5. Teste o login e as permissões: limpe o cache, faça login e confirme que o perfil de administrador voltou com todas as permissões. Se ainda faltar acesso, revise se alguma chave com o prefixo antigo ficou para trás na wp_usermeta.

## Código

```sql
-- Caso o prefixo tenha duplicado (wp_wp_), renomeie de volta para wp_
RENAME TABLE wp_wp_posts TO wp_posts;
RENAME TABLE wp_wp_options TO wp_options;
-- (repita o RENAME para todas as tabelas wp_wp_*)

-- Corrija as chaves internas que carregam o prefixo no nome
UPDATE wp_options SET option_name = 'wp_user_roles' WHERE option_name = 'wp_wp_user_roles';
UPDATE wp_usermeta SET meta_key = 'wp_capabilities' WHERE meta_key = 'wp_wp_capabilities';
UPDATE wp_usermeta SET meta_key = 'wp_user_level' WHERE meta_key = 'wp_wp_user_level';
```

## Perguntas frequentes

### Por que o prefixo das tabelas duplicou após a migração?

Algumas ferramentas de migração concatenam o prefixo configurado com o prefixo já presente nas tabelas, gerando nomes como wp_wp_posts. O WordPress passa a procurar tabelas com o prefixo do wp-config, que não casa mais com os nomes duplicados no banco.

### Posso só ajustar o $table_prefix no wp-config e resolver?

Se você quer apenas voltar a apontar para as tabelas existentes, ajustar o $table_prefix costuma bastar. Mas se decidir renomear as tabelas para limpar o prefixo, precisa também corrigir as chaves internas na wp_options e na wp_usermeta.

### Por que perdi as permissões de administrador após mudar o prefixo?

Porque a wp_options e a wp_usermeta guardam o prefixo dentro de chaves como user_roles e capabilities. Se você renomeou as tabelas mas não atualizou essas chaves, o WordPress não reconhece o seu papel de administrador e o acesso fica limitado.

### Quais chaves internas precisam ser atualizadas?

Na wp_options, a opção user_roles leva o prefixo no nome. Na wp_usermeta, as chaves capabilities e user_level também. Ao trocar o prefixo das tabelas, essas três precisam ser renomeadas para o novo prefixo, senão você perde permissões.

### É mais seguro renomear as tabelas ou ajustar o wp-config?

Ajustar o $table_prefix no wp-config é o caminho mais simples e com menos risco, pois não mexe no banco. Renomear as tabelas só vale a pena se você quer um prefixo limpo, e exige cuidado extra com as chaves internas e um backup antes.

### Mudar o prefixo de tabela melhora a segurança do site?

Um prefixo diferente do padrão wp_ dificulta um pouco ataques automatizados que assumem nomes de tabela fixos, mas é uma camada fraca. Vale mais investir em senhas fortes, atualizações e um firewall do que confiar a segurança ao prefixo.

**Fonte:** [WordPress.org — Editing wp-config.php (table prefix)](https://wordpress.org/documentation/article/editing-wp-config-php/)
