Vodič za WordPress database tabele

Uvod u WordPress bazu podataka
WordPress CMS rešenje koristi MySQL ili MariaDB bazu podataka za čuvanje praktično svega na vašem sajtu - od postova i stranica do komentara, korisničkih podataka, podešavanja i plugin konfiguracija. Razumevanje strukture baze podataka je ključno za napredno administriranje WordPress sajta, rešavanje problema, optimizaciju performansi i pravilno pravljenje backup-a. Svaka WordPress instalacija kreira 12 podrazumevanih tabela koje zajedno čine kompletan sistem za upravljanje sadržajem.
Podrazumevani prefiks za WordPress tabele je wp_ ali se preporučuje promena prefiksa prilikom instalacije iz bezbednosnih razloga jer napadači koji pokušavaju SQL injection napade često ciljaju standardni wp_ prefiks. Promenom u nešto poput bh29_ otežavate automatizovane napade. U ovom vodiču koristimo standardni wp_ prefiks radi jasnoće ali imajte na umu da vaš sajt može koristiti drugačiji prefiks.
wp_posts - srce WordPress-a
Struktura tabele
Tabela wp_posts je najvažnija tabela u WordPress bazi podataka jer čuva sav sadržaj uključujući postove, stranice, priložene medija fajlove, revizije, meni stavke i custom post types. Svaki red u tabeli predstavlja jedan sadržajni objekat sa kolonama poput ID koji je jedinstveni identifikator, post_author koji referencira korisnika koji je kreirao sadržaj, post_date za datum kreiranja, post_content za glavni sadržaj u HTML formatu, post_title za naslov, post_excerpt za kratak opis, post_status za status (publish, draft, pending, private, trash) i post_type za tip sadržaja.
Post tipovi u wp_posts
Kolona post_type određuje vrstu sadržaja. Vrednost post označava blog postove, page označava stranice, attachment označava uploadovane medija fajlove, revision čuva prethodne verzije sadržaja, nav_menu_item čuva stavke navigacionog menija i custom post types imaju sopstveni slug. Ovo znači da u istoj tabeli možete imati hiljade postova, stotine stranica, hiljade medija fajlova i desetine hiljada revizija. Revizije su čest uzrok naduvavanja baze jer WordPress podrazumevano čuva neograničen broj revizija za svaki post.
Optimizacija wp_posts
Ograničite broj revizija dodavanjem WP_POST_REVISIONS konstante u wp-config.php. Vrednost 5 čuva poslednjih 5 revizija za svaki post što je dovoljno za većinu sajtova. Periodično brišite stare revizije, auto-draft postove i obrisane postove iz korpe koristeći WP-Optimize plugin ili direktnim SQL upitom. Za sajtove sa velikim brojem postova, indeksiranje post_type i post_status kolona ubrzava upite. Ako koristite custom post types sa WP_Query, uvek specificirajte post_type u upitu da izbegnete skeniranje cele tabele.
wp_postmeta - meta podaci sadržaja
Struktura i namena
Tabela wp_postmeta čuva dodatne podatke o sadržaju koji nisu pokriveni kolonama u wp_posts. Struktura je EAV (Entity-Attribute-Value) model sa četiri kolone - meta_id, post_id koji referencira wp_posts, meta_key koji je naziv meta podatka i meta_value koji je vrednost. Ova tabela je gde ACF (Advanced Custom Fields) čuva sva prilagođena polja, gde WooCommerce čuva cene i atribute proizvoda i gde WordPress čuva featured image ID, template fajl, serijalizovane podatke i mnogo više.
Problem sa wp_postmeta
Tabela wp_postmeta je najčešći uzrok performansnih problema jer raste veoma brzo. Svaki post može imati desetine ili stotine meta podataka. ACF dodaje barem dva reda po polju (vrednost i referencu), WooCommerce dodaje 20 do 50 meta podataka po proizvodu i svaki plugin može dodati sopstvene meta podatke. Sajt sa 1.000 postova može lako imati 100.000 ili više redova u wp_postmeta. Nedostajući ili neoptimalan indeks na meta_key koloni je čest uzrok sporih upita.
Optimizacija wp_postmeta
Dodajte indeks na meta_key kolonu ako ne postoji jer WordPress podrazumevani indeks na ovoj koloni ima ograničenu dužinu. Koristite WP-Optimize ili Advanced Database Cleaner plugin da identifikujete i obrišete orphan meta podatke koji pripadaju obrisanim postovima. Za česte meta_query upite, razmotrite kreiranje prilagođene tabele umesto korišćenja wp_postmeta jer prilagođena tabela sa specifičnim kolonama je mnogo brža od EAV modela. Izbegavajte čuvanje velikih serijalizovanih nizova u meta_value jer se ne mogu efikasno pretraživati.
wp_options - podešavanja sajta
Struktura i sadržaj
Tabela wp_options čuva sva podešavanja WordPress sajta uključujući naziv sajta, URL, email administratora, aktivnu temu, aktivne plugine, permalink strukturu, vremensku zonu i stotine drugih podešavanja. Svaki plugin i tema mogu dodati sopstvene redove u wp_options za čuvanje konfiguracije. Kolona autoload sa vrednošću yes ili no određuje da li se opcija automatski učitava pri svakom zahtevu ili samo kada je specifično zatražena.
Autoload problem
WordPress učitava sve opcije sa autoload=yes u memoriju pri svakom zahtevu. Ako imate mnogo plugina, ova tabela može imati stotine autoloaded opcija sa ukupnom veličinom od nekoliko megabajta. Ovo troši RAM i usporava svaki zahtev čak i za stranice koje ne koriste te opcije. Proverite ukupnu veličinu autoloaded opcija sa SQL upitom koji sabira veličinu option_value za sve redove gde autoload je yes. Ako rezultat prelazi 1 MB, imate problem koji treba rešiti.
Čišćenje wp_options
Plugini koji su uklonjeni često ostavljaju svoje opcije u tabeli jer WordPress nema automatski mehanizam za čišćenje. Transient podaci, koji su privremeni keš, čuvaju se u wp_options sa ključevima koji počinju sa _transient_ i mogu nagomilati hiljade redova. Koristite plugin poput Advanced Database Cleaner da identifikujete opcije od obrisanih plugina i zastarele transient-e. Ručno možete promeniti autoload na no za opcije koje se retko koriste SQL upitom u phpMyAdmin-u ali budite oprezni da ne promenite core WordPress opcije.
wp_users i wp_usermeta
Korisnički podaci
Tabela wp_users čuva osnovne korisničke podatke uključujući ID, user_login za korisničko ime, user_pass za hashiranu lozinku, user_nicename za URL-friendly verziju imena, user_email, user_url za web sajt korisnika, user_registered za datum registracije, user_activation_key za aktivaciju naloga i user_status. WordPress koristi phpass hashing za lozinke sa prilagodljivim brojem iteracija za zaštitu od brute force napada na haševe.
User meta podaci
Tabela wp_usermeta ima istu EAV strukturu kao wp_postmeta i čuva dodatne korisničke podatke poput uloge korisnika u wp_capabilities, nivoa pristupa u wp_user_level, preferencija admin panela, dashboard widget rasporeda i svih prilagođenih korisničkih polja. WooCommerce dodaje adresu za dostavu i naplatu kao user meta. Membership i LMS plugini mogu dodati desetine meta podataka po korisniku. Za sajtove sa mnogo korisnika, wp_usermeta može postati veoma velika tabela.
Tabele komentara i linkova
wp_comments i wp_commentmeta
Tabela wp_comments čuva sve komentare na postove sa kolonama za ID komentara, post_id za povezivanje sa postom, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved za status odobrenja, comment_parent za odgovore na komentare i user_id za registrovane korisnike. Spam komentari se označavaju sa comment_approved=spam ali ostaju u tabeli dok ih ne obrišete. Akismet plugin i slični anti-spam alati koriste wp_commentmeta za čuvanje spam score-a i drugih meta podataka.
wp_terms, wp_termmeta i wp_term_taxonomy
WordPress koristi tri tabele za taksonomije. Tabela wp_terms čuva same termine sa ID-jem, name za naziv, slug za URL i term_group za grupisanje. Tabela wp_term_taxonomy povezuje terme sa taksonomijama i čuva taxonomy tip, description, parent ID za hijerarhiju i count za broj postova. Tabela wp_term_relationships je vezna tabela koja povezuje postove sa terminima sa colonama object_id za post ID i term_taxonomy_id. Tabela wp_termmeta dodaje mogućnost čuvanja meta podataka za termine poput slike kategorije ili boje.
Optimizacija WordPress baze podataka
Redovno održavanje
WordPress baza podataka zahteva redovno održavanje za optimalne performanse. Ključne akcije uključuju brisanje revizija postova starijih od 30 dana, čišćenje auto-draft i trashed postova, brisanje spam i trashed komentara, uklanjanje expired transient-a iz wp_options, optimizaciju tabela sa OPTIMIZE TABLE komandom i proveravanje integriteta tabela sa CHECK TABLE. WP-Optimize plugin automatizuje sve ove operacije sa mogućnošću zakazivanja nedeljnog ili mesečnog čišćenja.
Indeksi i performanse
Indeksi su ključni za brže upite u bazi podataka. WordPress kreira podrazumevane indekse ali za sajtove sa velikim brojem postova ili prilagođenim upitima, dodatni indeksi mogu značajno poboljšati performanse. Koristite EXPLAIN pred SQL upitom u phpMyAdmin-u da vidite da li upit koristi indekse ili radi full table scan. Za česte meta_query upite na specifičnom meta_key, dodajte kompozitni indeks na post_id i meta_key kolone u wp_postmeta. Alat Query Monitor WordPress plugin prikazuje sve SQL upite na stranici sa vremenima izvršavanja i identifikuje spore upite.
Veličina baze podataka
Pratite veličinu baze podataka redovno jer naduvana baza usporava backup-e, migracije i svakodnevne operacije. Prosečan WordPress blog treba da ima bazu manju od 100 MB. Ako je vaša baza veća od 500 MB, verovatno imate problem sa revizijama, transient-ima ili plugin podacima. WooCommerce sajtovi sa mnogo proizvoda i narudžbina prirodno imaju veće baze ali i tada treba da čistite zastarele podatke. Na BeoHosting-u naši hosting paketi dolaze sa dovoljno prostora za bazu podataka ali optimizovana baza znači brži sajt za vaše posetioce.
Backup WordPress baze podataka
Metode za backup
Postoji nekoliko načina za pravljenje backup-a WordPress baze podataka. PHPMyAdmin export funkcija omogućava ručni download SQL dump fajla sa svim tabelama i podacima. WP-CLI komanda wp db export kreira dump fajl iz komandne linije što je pogodno za automatizaciju. WordPress plugini poput UpdraftPlus, BackWPup i All-in-One WP Migration pružaju automatizovane zakazane backup-e sa upload-om na cloud storage poput Google Drive-a, Dropbox-a ili Amazon S3. Na BeoHosting-u pravimo automatske dnevne backup-e celokupnog hosting naloga uključujući bazu podataka sa mogućnošću restauracije jednim klikom u cPanel-u.
Best practices za backup
Pravite backup pre svakog ažuriranja WordPress-a, teme ili plugina. Čuvajte backup-e na više lokacija, ne samo na istom serveru. Periodično testirajte restauraciju backup-a na staging okruženju da potvrdite da su backup-i ispravni. Automatizujte dnevne backup-e sa retention politikom od najmanje 30 dana. Za e-commerce sajtove sa čestim transakcijama, razmotrite backup svakih 6 ili 12 sati. Šifrujte backup-e koji sadrže osetljive podatke poput korisničkih informacija ili informacija o plaćanju.
Napredne teme
Multisite tabele
WordPress Multisite instalacija kreira dodatne tabele za upravljanje mrežom sajtova. Tabela wp_blogs sadrži informacije o svakom sajtu u mreži, wp_site čuva podatke o mreži i wp_sitemeta čuva meta podatke mreže. Svaki sajt u mreži dobija sopstveni set tabela sa prefiksom koji uključuje ID sajta poput wp_2_posts za drugi sajt, wp_3_options za treći sajt i tako dalje. Ovo znači da Multisite instalacija sa 10 sajtova ima preko 120 tabela u bazi.
Custom tabele
Za plugine i teme sa specifičnim zahtevima za podatke, kreiranje prilagođenih tabela je često bolje od korišćenja wp_postmeta. Prilagođena tabela sa specifičnim kolonama i indeksima je dramatično brža za upite nego EAV model u wp_postmeta. Koristite WordPress dbDelta funkciju za kreiranje i ažuriranje prilagođenih tabela jer ona automatski upoređuje postojeću strukturu sa željenom i primenjuje samo potrebne izmene. Registrujte aktivaciju plugin-a sa register_activation_hook za kreiranje tabela pri instalaciji plugina i obezbedite deinstalacioni hook za čišćenje pri brisanju plugina.
Zaključak
Razumevanje WordPress database tabela je fundamentalno znanje za svakog ozbiljnog WordPress administratora i developera. Tabele wp_posts i wp_postmeta čuvaju sav sadržaj, wp_options čuva konfiguraciju a wp_users i wp_usermeta korisničke podatke. Redovno održavanje baze kroz brisanje nepotrebnih revizija, transient-a i orphan podataka održava sajt brzim. Pravilno indeksiranje ubrzava upite a redovni backup-i obezbeđuju podatke od gubitka. Na BeoHosting-u naši optimizovani MySQL serveri i automatski backup-i obezbeđuju pouzdanu osnovu za vaš WordPress sajt sa podrškom koja razume baze podataka iznutra.
BeoHosting Tim
10+ godina iskustva — Stručnjaci za web hosting i infrastrukturu
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Poslednje ažurirano: