Saltar para o conteúdo
BeoHosting
BeoHosting
WordPress

Guia das Tabelas da Base de Dados do WordPress

BeoHosting Team··10 min read de leitura
Guia das Tabelas da Base de Dados do WordPress

Introdução à base de dados do WordPress

A solução CMS WordPress utiliza uma base de dados MySQL ou MariaDB para armazenar praticamente tudo no seu site - desde publicações e páginas até comentários, dados de utilizadores, definições e configurações de plugins. Compreender a estrutura da base de dados é essencial para a administração avançada de um site WordPress, para a resolução de problemas, a otimização do desempenho e a realização de cópias de segurança adequadas. Cada instalação do WordPress cria 12 tabelas predefinidas que, em conjunto, constituem o sistema completo de gestão de conteúdos.

O prefixo predefinido para as tabelas do WordPress é wp_, mas recomenda-se alterar o prefixo durante a instalação por razões de segurança, porque os atacantes que tentam ataques de injeção de SQL visam frequentemente o prefixo padrão wp_. Ao alterar para algo como bh29_, dificulta os ataques automatizados. Neste guia utilizamos o prefixo padrão wp_ para maior clareza, mas tenha em conta que o seu site pode utilizar um prefixo diferente.

wp_posts - o coração do WordPress

Estrutura da tabela

A tabela wp_posts é a tabela mais importante da base de dados do WordPress, porque armazena todo o conteúdo, incluindo publicações, páginas, ficheiros de media anexados, revisões, itens de menu e tipos de conteúdo personalizados. Cada linha da tabela representa um objeto de conteúdo, com colunas como ID, que é um identificador único, post_author, que referencia o utilizador que criou o conteúdo, post_date para a data de criação, post_content para o conteúdo principal em formato HTML, post_title para o título, post_excerpt para a descrição curta, post_status para o estado (publish, draft, pending, private, trash) e post_type para o tipo de conteúdo.

Tipos de conteúdo em wp_posts

A coluna post_type determina o tipo de conteúdo. O valor post indica publicações de blog, page indica páginas, attachment indica ficheiros de media carregados, revision armazena versões anteriores do conteúdo, nav_menu_item armazena itens do menu de navegação, e os tipos de conteúdo personalizados têm o seu próprio slug. Isto significa que na mesma tabela pode ter milhares de publicações, centenas de páginas, milhares de ficheiros de media e dezenas de milhares de revisões. As revisões são uma causa comum de inchaço da base de dados, porque o WordPress, por predefinição, armazena um número ilimitado de revisões para cada publicação.

Otimizar wp_posts

Limite o número de revisões adicionando a constante WP_POST_REVISIONS no wp-config.php. O valor 5 mantém as últimas 5 revisões de cada publicação, o que é suficiente para a maioria dos sites. Elimine periodicamente revisões antigas, publicações em rascunho automático e publicações eliminadas do lixo utilizando o plugin WP-Optimize ou uma consulta SQL direta. Para sites com um grande número de publicações, a indexação das colunas post_type e post_status acelera as consultas. Se utiliza tipos de conteúdo personalizados com WP_Query, especifique sempre o post_type na consulta para evitar percorrer toda a tabela.

wp_postmeta - metadados de conteúdo

Estrutura e finalidade

A tabela wp_postmeta armazena dados adicionais sobre o conteúdo que não estão cobertos pelas colunas de wp_posts. A estrutura é um modelo EAV (Entity-Attribute-Value) com quatro colunas - meta_id, post_id, que referencia wp_posts, meta_key, que é o nome do metadado, e meta_value, que é o valor. É nesta tabela que o ACF (Advanced Custom Fields) armazena todos os campos personalizados, onde o WooCommerce armazena preços e atributos de produtos, e onde o WordPress armazena o ID da imagem destacada, o ficheiro de template, dados serializados e muito mais.

O problema da wp_postmeta

A tabela wp_postmeta é a causa mais comum de problemas de desempenho, porque cresce muito rapidamente. Cada publicação pode ter dezenas ou centenas de entradas meta. O ACF adiciona pelo menos duas linhas por campo (valor e referência), o WooCommerce adiciona 20 a 50 entradas meta por produto, e cada plugin pode adicionar as suas próprias entradas meta. Um site com 1.000 publicações pode facilmente ter 100.000 ou mais linhas em wp_postmeta. Um índice em falta ou não otimizado na coluna meta_key é uma causa comum de consultas lentas.

Otimizar wp_postmeta

Adicione um índice na coluna meta_key, se não existir, porque o índice predefinido do WordPress nesta coluna tem um comprimento limitado. Utilize o plugin WP-Optimize ou Advanced Database Cleaner para identificar e eliminar entradas meta órfãs que pertencem a publicações eliminadas. Para consultas frequentes de meta_query, considere criar uma tabela personalizada em vez de utilizar wp_postmeta, porque uma tabela personalizada com colunas específicas é muito mais rápida do que o modelo EAV. Evite armazenar grandes arrays serializados em meta_value, porque não podem ser consultados de forma eficiente.

wp_options - definições do site

Estrutura e conteúdo

A tabela wp_options armazena todas as definições do site WordPress, incluindo o nome do site, o URL, o e-mail do administrador, o tema ativo, os plugins ativos, a estrutura das permalinks, o fuso horário e centenas de outras definições. Cada plugin e tema pode adicionar as suas próprias linhas a wp_options para armazenar configurações. A coluna autoload, com o valor yes ou no, determina se a opção é carregada automaticamente em cada pedido ou apenas quando especificamente solicitada.

O problema do autoload

O WordPress carrega na memória todas as opções com autoload=yes em cada pedido. Se tiver muitos plugins, esta tabela pode ter centenas de opções com autoload, com um tamanho total de vários megabytes. Isto consome RAM e torna mais lento cada pedido, mesmo para páginas que não utilizam essas opções. Verifique o tamanho total das opções com autoload com uma consulta SQL que some o tamanho de option_value para todas as linhas onde autoload é yes. Se o resultado ultrapassar 1 MB, tem um problema que precisa de ser resolvido.

Limpar wp_options

Os plugins que foram removidos deixam frequentemente as suas opções na tabela, porque o WordPress não tem um mecanismo de limpeza automática. Os dados transientes, que são cache temporária, são armazenados em wp_options com chaves que começam por _transient_ e podem acumular milhares de linhas. Utilize um plugin como o Advanced Database Cleaner para identificar opções de plugins eliminados e transientes obsoletos. Manualmente, pode alterar o autoload para no nas opções raramente utilizadas com uma consulta SQL no phpMyAdmin, mas tenha cuidado para não alterar as opções principais do WordPress.

wp_users e wp_usermeta

Dados dos utilizadores

A tabela wp_users armazena os dados básicos dos utilizadores, incluindo ID, user_login para o nome de utilizador, user_pass para a palavra-passe encriptada, user_nicename para a versão do nome adequada a URLs, user_email, user_url para o site do utilizador, user_registered para a data de registo, user_activation_key para a ativação da conta, e user_status. O WordPress utiliza a encriptação phpass para as palavras-passe, com um número ajustável de iterações, para proteger contra ataques de força bruta às hashes.

Metadados dos utilizadores

A tabela wp_usermeta tem a mesma estrutura EAV de wp_postmeta e armazena dados adicionais dos utilizadores, como a função do utilizador em wp_capabilities, o nível de acesso em wp_user_level, as preferências do painel de administração, a disposição dos widgets do dashboard e todos os campos personalizados de utilizador. O WooCommerce adiciona moradas de envio e de faturação como meta de utilizador. Os plugins de membros e de LMS podem adicionar dezenas de entradas meta por utilizador. Para sites com muitos utilizadores, a wp_usermeta pode tornar-se uma tabela muito grande.

Tabelas de comentários e ligações

wp_comments e wp_commentmeta

A tabela wp_comments armazena todos os comentários nas publicações, com colunas para o ID do comentário, post_id para ligar à publicação, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved para o estado de aprovação, comment_parent para as respostas a comentários, e user_id para os utilizadores registados. Os comentários de spam são marcados com comment_approved=spam, mas permanecem na tabela até os eliminar. O plugin Akismet e ferramentas anti-spam semelhantes utilizam wp_commentmeta para armazenar pontuações de spam e outros metadados.

wp_terms, wp_termmeta e wp_term_taxonomy

O WordPress utiliza três tabelas para as taxonomias. A tabela wp_terms armazena os próprios termos, com ID, name para o nome, slug para o URL, e term_group para o agrupamento. A tabela wp_term_taxonomy liga os termos às taxonomias e armazena o tipo de taxonomia, a descrição, o ID do pai para a hierarquia, e count para o número de publicações. A tabela wp_term_relationships é uma tabela de junção que liga as publicações aos termos, com as colunas object_id para o ID da publicação e term_taxonomy_id. A tabela wp_termmeta acrescenta a possibilidade de armazenar metadados para os termos, como a imagem ou a cor da categoria.

Otimização da base de dados do WordPress

Manutenção regular

A base de dados do WordPress requer manutenção regular para um desempenho ótimo. As ações principais incluem eliminar revisões de publicações com mais de 30 dias, limpar publicações em rascunho automático e no lixo, eliminar comentários de spam e no lixo, remover transientes expirados de wp_options, otimizar tabelas com o comando OPTIMIZE TABLE, e verificar a integridade das tabelas com CHECK TABLE. O plugin WP-Optimize automatiza todas estas operações, com a possibilidade de agendar limpezas semanais ou mensais.

Índices e desempenho

Os índices são essenciais para consultas mais rápidas à base de dados. O WordPress cria índices predefinidos, mas para sites com um grande número de publicações ou consultas personalizadas, índices adicionais podem melhorar significativamente o desempenho. Utilize EXPLAIN antes de uma consulta SQL no phpMyAdmin para ver se a consulta utiliza índices ou faz uma leitura completa da tabela. Para consultas frequentes de meta_query num meta_key específico, adicione um índice composto nas colunas post_id e meta_key em wp_postmeta. O plugin de WordPress Query Monitor apresenta todas as consultas SQL de uma página, com os tempos de execução, e identifica as consultas lentas.

Tamanho da base de dados

Acompanhe regularmente o tamanho da base de dados, porque uma base de dados inchada torna mais lentas as cópias de segurança, as migrações e as operações diárias. O blog WordPress médio deve ter uma base de dados com menos de 100 MB. Se a sua base de dados tiver mais de 500 MB, é provável que tenha um problema com revisões, transientes ou dados de plugins. Os sites WooCommerce com muitos produtos e encomendas têm naturalmente bases de dados maiores, mas mesmo assim é necessário limpar dados obsoletos. Na BeoHosting, os nossos planos de alojamento vêm com espaço suficiente para a base de dados, mas uma base de dados otimizada significa um site mais rápido para os seus visitantes.

Cópia de segurança da base de dados do WordPress

Métodos de cópia de segurança

Existem várias formas de fazer cópias de segurança da base de dados do WordPress. A funcionalidade de exportação do phpMyAdmin permite descarregar manualmente um ficheiro de dump SQL com todas as tabelas e dados. O comando WP-CLI wp db export cria um ficheiro de dump a partir da linha de comandos, o que é adequado para automatização. Plugins de WordPress como o UpdraftPlus, o BackWPup e o All-in-One WP Migration fornecem cópias de segurança automáticas agendadas com carregamento para armazenamento na cloud, como o Google Drive, o Dropbox ou o Amazon S3. Na BeoHosting fazemos cópias de segurança automáticas diárias de toda a conta de alojamento, incluindo a base de dados, com restauro num clique no cPanel.

Boas práticas de cópia de segurança

Faça uma cópia de segurança antes de cada atualização do WordPress, do tema ou de um plugin. Guarde as cópias de segurança em vários locais, não apenas no mesmo servidor. Teste periodicamente o restauro das cópias de segurança num ambiente de staging para confirmar que as cópias estão corretas. Automatize as cópias de segurança diárias com uma política de retenção de pelo menos 30 dias. Para sites de comércio eletrónico com transações frequentes, considere cópias de segurança a cada 6 ou 12 horas. Encripte as cópias de segurança que contenham dados sensíveis, como informações de utilizadores ou de pagamentos.

Tópicos avançados

Tabelas de Multisite

Uma instalação WordPress Multisite cria tabelas adicionais para gerir a rede de sites. A tabela wp_blogs contém informações sobre cada site da rede, wp_site armazena os dados da rede, e wp_sitemeta armazena os metadados da rede. Cada site da rede obtém o seu próprio conjunto de tabelas com um prefixo que inclui o ID do site, como wp_2_posts para o segundo site, wp_3_options para o terceiro site, e assim por diante. Isto significa que uma instalação Multisite com 10 sites tem mais de 120 tabelas na base de dados.

Tabelas personalizadas

Para plugins e temas com requisitos de dados específicos, criar tabelas personalizadas é muitas vezes melhor do que utilizar wp_postmeta. Uma tabela personalizada com colunas e índices específicos é drasticamente mais rápida nas consultas do que o modelo EAV em wp_postmeta. Utilize a função dbDelta do WordPress para criar e atualizar tabelas personalizadas, porque compara automaticamente a estrutura existente com a desejada e aplica apenas as alterações necessárias. Registe a ativação do plugin com register_activation_hook para criar as tabelas durante a instalação do plugin e forneça um hook de desinstalação para a limpeza quando o plugin for eliminado.

Conclusão

Compreender as tabelas da base de dados do WordPress é um conhecimento fundamental para qualquer administrador e programador de WordPress sério. As tabelas wp_posts e wp_postmeta armazenam todo o conteúdo, wp_options armazena as configurações, e wp_users e wp_usermeta armazenam os dados dos utilizadores. A manutenção regular da base de dados, através da eliminação de revisões desnecessárias, transientes e dados órfãos, mantém o site rápido. Uma indexação adequada acelera as consultas e as cópias de segurança regulares protegem os dados contra a perda. Na BeoHosting, os nossos servidores MySQL otimizados e as cópias de segurança automáticas proporcionam uma base fiável para o seu site WordPress, com um suporte que conhece as bases de dados a fundo.

BeoHosting Team

10+ anos de experiência — Especialistas em alojamento web e infraestrutura

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Última atualização: