Průvodce tabulkami databáze WordPress

Úvod do databáze WordPress
CMS řešení WordPress používá databázi MySQL nebo MariaDB k ukládání prakticky všeho na vašem webu – od příspěvků a stránek po komentáře, uživatelská data, nastavení a konfigurace pluginů. Pochopení struktury databáze je klíčové pro pokročilou správu WordPress webu, řešení problémů, optimalizaci výkonu a správné zálohování. Každá instalace WordPress vytvoří 12 výchozích tabulek, které dohromady tvoří kompletní systém pro správu obsahu.
Výchozí prefix pro tabulky WordPress je wp_, ale z bezpečnostních důvodů se doporučuje prefix při instalaci změnit, protože útočníci pokoušející se o SQL injection útoky často cílí na standardní prefix wp_. Změnou na něco jako bh29_ ztížíte automatizované útoky. V tomto průvodci používáme pro přehlednost standardní prefix wp_, ale mějte na paměti, že váš web může používat jiný prefix.
wp_posts – srdce WordPressu
Struktura tabulky
Tabulka wp_posts je nejdůležitější tabulkou v databázi WordPress, protože ukládá veškerý obsah včetně příspěvků, stránek, připojených mediálních souborů, revizí, položek menu a vlastních typů obsahu. Každý řádek v tabulce představuje jeden objekt obsahu se sloupci jako ID, což je jedinečný identifikátor, post_author, který odkazuje na uživatele, jenž obsah vytvořil, post_date pro datum vytvoření, post_content pro hlavní obsah ve formátu HTML, post_title pro titulek, post_excerpt pro krátký popis, post_status pro stav (publish, draft, pending, private, trash) a post_type pro typ obsahu.
Typy obsahu v wp_posts
Sloupec post_type určuje druh obsahu. Hodnota post označuje blogové příspěvky, page označuje stránky, attachment označuje nahrané mediální soubory, revision ukládá předchozí verze obsahu, nav_menu_item ukládá položky navigačního menu a vlastní typy obsahu mají svůj vlastní slug. To znamená, že ve stejné tabulce můžete mít tisíce příspěvků, stovky stránek, tisíce mediálních souborů a desítky tisíc revizí. Revize jsou častou příčinou nabobtnání databáze, protože WordPress ve výchozím nastavení ukládá neomezený počet revizí pro každý příspěvek.
Optimalizace wp_posts
Omezte počet revizí přidáním konstanty WP_POST_REVISIONS do wp-config.php. Hodnota 5 ponechá posledních 5 revizí pro každý příspěvek, což je pro většinu webů dostačující. Pravidelně mažte staré revize, příspěvky ve stavu auto-draft a smazané příspěvky z koše pomocí pluginu WP-Optimize nebo přímého SQL dotazu. U webů s velkým počtem příspěvků zrychlí dotazy indexování sloupců post_type a post_status. Pokud používáte vlastní typy obsahu s WP_Query, vždy v dotazu specifikujte post_type, abyste se vyhnuli skenování celé tabulky.
wp_postmeta – metadata obsahu
Struktura a účel
Tabulka wp_postmeta ukládá dodatečná data o obsahu, která nejsou pokryta sloupci v wp_posts. Struktura je model EAV (Entity-Attribute-Value) se čtyřmi sloupci – meta_id, post_id, který odkazuje na wp_posts, meta_key, což je název metadat, a meta_value, což je hodnota. V této tabulce ACF (Advanced Custom Fields) ukládá všechna vlastní pole, WooCommerce ukládá ceny a atributy produktů a WordPress ukládá ID hlavního obrázku, soubor šablony, serializovaná data a mnoho dalšího.
Problém s wp_postmeta
Tabulka wp_postmeta je nejčastější příčinou výkonnostních problémů, protože roste velmi rychle. Každý příspěvek může mít desítky nebo stovky meta záznamů. ACF přidává nejméně dva řádky na pole (hodnota a reference), WooCommerce přidává 20 až 50 meta záznamů na produkt a každý plugin může přidat své vlastní meta záznamy. Web s 1 000 příspěvky může snadno mít 100 000 nebo více řádků v wp_postmeta. Chybějící nebo neoptimální index na sloupci meta_key je častou příčinou pomalých dotazů.
Optimalizace wp_postmeta
Přidejte index na sloupec meta_key, pokud neexistuje, protože výchozí index WordPress na tomto sloupci má omezenou délku. Pomocí pluginu WP-Optimize nebo Advanced Database Cleaner identifikujte a smažte osiřelé meta záznamy patřící smazaným příspěvkům. U častých dotazů meta_query zvažte vytvoření vlastní tabulky místo používání wp_postmeta, protože vlastní tabulka s konkrétními sloupci je mnohem rychlejší než model EAV. Vyhněte se ukládání velkých serializovaných polí do meta_value, protože je nelze efektivně dotazovat.
wp_options – nastavení webu
Struktura a obsah
Tabulka wp_options ukládá všechna nastavení WordPress webu včetně názvu webu, URL, e-mailu administrátora, aktivní šablony, aktivních pluginů, struktury permalinků, časového pásma a stovek dalších nastavení. Každý plugin a šablona může do wp_options přidat své vlastní řádky pro ukládání konfigurace. Sloupec autoload s hodnotou yes nebo no určuje, zda se možnost automaticky načítá při každém požadavku, nebo pouze tehdy, když je konkrétně vyžádána.
Problém s autoload
WordPress načítá při každém požadavku do paměti všechny možnosti s autoload=yes. Pokud máte mnoho pluginů, tato tabulka může mít stovky automaticky načítaných možností s celkovou velikostí několika megabajtů. To spotřebovává RAM a zpomaluje každý požadavek i u stránek, které tyto možnosti nepoužívají. Zkontrolujte celkovou velikost automaticky načítaných možností SQL dotazem, který sečte velikost option_value pro všechny řádky, kde je autoload yes. Pokud výsledek překročí 1 MB, máte problém, který je třeba vyřešit.
Čištění wp_options
Pluginy, které byly odstraněny, často zanechávají své možnosti v tabulce, protože WordPress nemá automatický mechanismus čištění. Transientní data, což je dočasná cache, se ukládají v wp_options s klíči začínajícími _transient_ a mohou nahromadit tisíce řádků. Pomocí pluginu jako Advanced Database Cleaner identifikujte možnosti ze smazaných pluginů a zastaralé transienty. Ručně můžete změnit autoload na no u zřídka používaných možností pomocí SQL dotazu v phpMyAdmin, ale buďte opatrní, abyste nezměnili základní možnosti WordPressu.
wp_users a wp_usermeta
Uživatelská data
Tabulka wp_users ukládá základní uživatelská data včetně ID, user_login pro uživatelské jméno, user_pass pro hashované heslo, user_nicename pro URL přívětivou verzi jména, user_email, user_url pro web uživatele, user_registered pro datum registrace, user_activation_key pro aktivaci účtu a user_status. WordPress používá pro hesla hashování phpass s nastavitelným počtem iterací pro ochranu proti brute force útokům na hashe.
Uživatelská metadata
Tabulka wp_usermeta má stejnou strukturu EAV jako wp_postmeta a ukládá dodatečná uživatelská data jako roli uživatele v wp_capabilities, úroveň přístupu v wp_user_level, předvolby administračního panelu, uspořádání widgetů nástěnky a všechna vlastní uživatelská pole. WooCommerce přidává dodací a fakturační adresy jako uživatelská metadata. Pluginy pro členství a LMS mohou přidat desítky meta záznamů na uživatele. U webů s mnoha uživateli se wp_usermeta může stát velmi velkou tabulkou.
Tabulky komentářů a odkazů
wp_comments a wp_commentmeta
Tabulka wp_comments ukládá všechny komentáře k příspěvkům se sloupci pro ID komentáře, post_id pro propojení s příspěvkem, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved pro stav schválení, comment_parent pro odpovědi na komentáře a user_id pro registrované uživatele. Spamové komentáře jsou označeny comment_approved=spam, ale zůstávají v tabulce, dokud je nesmažete. Plugin Akismet a podobné antispamové nástroje používají wp_commentmeta k ukládání spamových skóre a dalších metadat.
wp_terms, wp_termmeta a wp_term_taxonomy
WordPress používá pro taxonomie tři tabulky. Tabulka wp_terms ukládá samotné termy s ID, name pro název, slug pro URL a term_group pro seskupování. Tabulka wp_term_taxonomy propojuje termy s taxonomiemi a ukládá typ taxonomie, popis, ID nadřazeného prvku pro hierarchii a count pro počet příspěvků. Tabulka wp_term_relationships je spojovací tabulka, která propojuje příspěvky s termy se sloupci object_id pro ID příspěvku a term_taxonomy_id. Tabulka wp_termmeta přidává možnost ukládat metadata pro termy jako obrázek nebo barvu kategorie.
Optimalizace databáze WordPress
Pravidelná údržba
Databáze WordPress vyžaduje pro optimální výkon pravidelnou údržbu. Mezi klíčové akce patří mazání revizí příspěvků starších než 30 dní, čištění příspěvků ve stavu auto-draft a v koši, mazání spamových a smazaných komentářů, odstraňování expirovaných transientů z wp_options, optimalizace tabulek příkazem OPTIMIZE TABLE a kontrola integrity tabulek příkazem CHECK TABLE. Plugin WP-Optimize automatizuje všechny tyto operace s možností naplánovat týdenní nebo měsíční čištění.
Indexy a výkon
Indexy jsou klíčové pro rychlejší databázové dotazy. WordPress vytváří výchozí indexy, ale u webů s velkým počtem příspěvků nebo vlastních dotazů mohou dodatečné indexy výrazně zlepšit výkon. Použijte EXPLAIN před SQL dotazem v phpMyAdmin, abyste viděli, zda dotaz používá indexy nebo provádí úplné skenování tabulky. U častých dotazů meta_query na konkrétní meta_key přidejte složený index na sloupcích post_id a meta_key v wp_postmeta. WordPress plugin Query Monitor zobrazuje všechny SQL dotazy na stránce s časy provedení a identifikuje pomalé dotazy.
Velikost databáze
Pravidelně sledujte velikost databáze, protože nabobtnalá databáze zpomaluje zálohy, migrace a každodenní operace. Průměrný WordPress blog by měl mít databázi menší než 100 MB. Pokud je vaše databáze větší než 500 MB, pravděpodobně máte problém s revizemi, transienty nebo daty pluginů. WooCommerce weby s mnoha produkty a objednávkami mají přirozeně větší databáze, ale i tehdy je potřeba čistit zastaralá data. V BeoHosting přicházejí naše hostingové tarify s dostatkem místa pro databázi, ale optimalizovaná databáze znamená rychlejší web pro vaše návštěvníky.
Zálohování databáze WordPress
Metody zálohování
Existuje několik způsobů, jak zálohovat databázi WordPress. Funkce exportu v phpMyAdmin vám umožní ručně stáhnout soubor SQL dumpu se všemi tabulkami a daty. Příkaz WP-CLI wp db export vytvoří soubor dumpu z příkazové řádky, což je vhodné pro automatizaci. WordPress pluginy jako UpdraftPlus, BackWPup a All-in-One WP Migration poskytují automatizované naplánované zálohy s nahráváním do cloudového úložiště jako Google Drive, Dropbox nebo Amazon S3. V BeoHosting děláme automatické denní zálohy celého hostingového účtu včetně databáze s obnovením jedním kliknutím v cPanelu.
Osvědčené postupy zálohování
Před každou aktualizací WordPressu, šablony nebo pluginu udělejte zálohu. Zálohy uchovávejte na více místech, ne jen na stejném serveru. Pravidelně testujte obnovení zálohy na staging prostředí, abyste potvrdili, že jsou zálohy správné. Automatizujte denní zálohy s retenční politikou alespoň 30 dní. U e-commerce webů s častými transakcemi zvažte zálohy každých 6 nebo 12 hodin. Zálohy obsahující citlivá data jako uživatelské informace nebo platební informace šifrujte.
Pokročilá témata
Tabulky Multisite
Instalace WordPress Multisite vytváří dodatečné tabulky pro správu sítě webů. Tabulka wp_blogs obsahuje informace o každém webu v síti, wp_site ukládá data sítě a wp_sitemeta ukládá metadata sítě. Každý web v síti dostane svou vlastní sadu tabulek s prefixem, který zahrnuje ID webu, jako wp_2_posts pro druhý web, wp_3_options pro třetí web a tak dále. To znamená, že instalace Multisite s 10 weby má v databázi přes 120 tabulek.
Vlastní tabulky
U pluginů a šablon se specifickými požadavky na data je vytvoření vlastních tabulek často lepší než používání wp_postmeta. Vlastní tabulka s konkrétními sloupci a indexy je pro dotazy dramaticky rychlejší než model EAV v wp_postmeta. Pro vytváření a aktualizaci vlastních tabulek použijte WordPress funkci dbDelta, protože automaticky porovnává stávající strukturu s požadovanou a aplikuje pouze nezbytné změny. Zaregistrujte aktivaci pluginu pomocí register_activation_hook pro vytvoření tabulek při instalaci pluginu a poskytněte uninstall hook pro čištění při smazání pluginu.
Závěr
Pochopení tabulek databáze WordPress je základní znalostí pro každého seriózního administrátora a vývojáře WordPressu. Tabulky wp_posts a wp_postmeta ukládají veškerý obsah, wp_options ukládá konfiguraci a wp_users a wp_usermeta ukládají uživatelská data. Pravidelná údržba databáze pomocí mazání zbytečných revizí, transientů a osiřelých dat udržuje web rychlý. Správné indexování zrychluje dotazy a pravidelné zálohy chrání data před ztrátou. V BeoHosting poskytují naše optimalizované MySQL servery a automatické zálohy spolehlivý základ pro váš WordPress web s podporou, která rozumí databázím do hloubky.
BeoHosting Team
10+ let zkušeností — Specialisté na webhosting a infrastrukturu
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Naposledy aktualizováno: