13 tips för en säker och effektiv WordPress-databas

Om någon ber dig att nämna två av de vanligaste problemen med WordPress-webbplatser svarar du nog ”säkerhet och hastighet”. Och vad är gemensamt för båda dessa problemområden? Just det, databasen.

Databasen för en WordPress-webbplats innehåller all värdefull information och utgör ofta samtidigt flaskhalsen för webbplatsens prestanda. Därför kan vi med säkerhet påstå att databasen är den allra viktigaste enstaka komponenten i din WordPress-infrastruktur.

Vi har sammanställt denna lista med våra 13 bästa tips på hur du gör databasen hos din webbplats så effektiv och säker som möjligt. 

Databasen är den allra viktigaste enstaka komponenten i din WordPress-infrastruktur.

Tips 1 – Säkerhetskopiera databasen

Eftersom databasen är den allra viktigaste delen av din WordPress-infrastruktur ska den självklart ingå i säkerhetskopieringen av din WordPress-webbplats. Tyvärr ser man dock alltför ofta att några säkerhetskopierar sina webbplatser genom att enbart kopiera filerna under WordPress-katalogen.

En databas-dump är en fil i textformat, vilket gör det enkelt både att läsa och att vid behov göra ändringar i den. Dessutom kan de användas med alla olika MySQL- och MariaDB-servrar, vilket gör att du kan ladda upp filen till vilken MySQL- eller MariaDB-server som helst.

Det är enkelt att skapa en databas-dump direkt från kommandoraden med kommandona mysqldump och wp db export. Om du har Seravo som ditt webbhotell sköter vi automatiskt säkerhetskopieringen åt dig, av både databasen och WordPress-filerna. Vidare kan du använda våra olika verktyg och kommandon för att manuellt göra en extra säkerhetskopia när som helst.

Tips 2 – Lär dig databaskommandona i WP-CLI

Alla utvecklare och WordPress-användare har god nytta av att lära sig hur man använder WP-CLI. Men det är särskilt användbart att lära sig de kommandon som berör databasen eftersom de tenderar att vara de mest kraftfulla verktygen.

Du visa en lista med alla WP-CLI-kommandon som finns för hanteringen av databasen med hjälp av kommandot wp db --help

Min personliga favorit bland alla databaskommandona i WP-CLI är wp search-replace --all-tables som ger dig ett smidigt sätt att bland annat ändra alla länkar i webbplatsens innehåll som använder http i någon URL till https. Nu är det enklare än någonsin ändra från http://exampel.com till https://exempel.com.

Alla våra kunder har automstiskt gratis SSL-certifikat installerade för sina webbplatser som de har på våra servrar. wp search-replace kan exempelvis användas för att bli av med alla varningar om blandat innehåll på webbplatsens sidor efter att man flyttat till våra servrar.

Tips 3 – Använd Adminer för att bläddra i databasen

Adminer är ett mindre och säkrare alternativ till PHPMyAdmin.  Det består av en enda PHP-fil och ger ett grafiskt gränssnitt för hantering av databasen. Alla våra WordPress-webbplatser levereras med Adminer förinstallerat och våra kunder kan använda det för att säkert och effektivt hantera sina databaser.

Tips 4 – wp_options och Autoload

När en WordPress-sida hämtas, körs följande databasfråga varje gång:

SELECT * FROM wp_options WHERE autoload = 'yes'

Om tabellen wp_options är större än 1 MB ger denna databasfråga ganska stor belastning på databasen. Därför bör du försöka att städa i tabellen wp_options.

Du kan hitta de rader som innehåller mest data i fältet option_value med hjälp av databasfrågan:

SELECT option_name, length(option_value) FROM wp_options WHERE autoload='yes' ORDER BY length(option_value) DESC LIMIT 30

Om du märker att något tillägg förorenar tabellen options med onödigt långa rader rekommenderar vi att du skriver en felrapport till tilläggets utvecklare.

Om du inte lyckas rensa upp i tabellen wp_options bör du lägga till ett index för autoload:

CREATE INDEX autoloadindex ON wp_options(autoload, option_name)

Det är dock meningslöst att skapa ett index för en liten wp_options-tabell eftersom indexet då riskerar att bli lika stort eller rentav större än själva tabellen. Denna lösning bör du därför endast använda om tabellen wp_options är större än 1MB och du inte lyckas rensa den.

Tips 5 – Nedskräpad wp_postmeta

En WordPress-webbplats som använder anpassade inläggstyper eller WooCommerce har troligtvis en stor tabell wp_postmeta. Varje ny post/varje nytt inlägg lägger bara till en ny rad med flera olika fält i databasen, och antalet kolumner och deras namn ändras inte. Men när man anropar add_post_meta() kommer databasen att fyllas med tiotals eller hundratals rader per post/inlägg, där varje enstaka rad innehåller endast två fält: namn och värde.

Denna typ av uppsvälld databas kan snabbt göra databasen mycket större. Därför är det viktigt att ta reda på vilka namngivningsmönster för meta_key som har flest rader. Dessa mönster kan man hitta med hjälp av denna databasfråga: 

SELECT substring(meta_key, 1, 20) AS key_start, count(*) AS count FROM wp_postmeta GROUP BY key_start ORDER BY count DESC LIMIT 30

Tips 6 – Lär dig SQL

Databaser bygger på 20 års utveckling kring hur man så snabbt som möjligt ska kunna hämta en liten mängd efterfrågad information ur en enorm mängd sparad information. Du bör inte försöka göra om samma effektiviseringsarbete i PHP. Lär dig SQL i stället.

När det gäller WordPress ska du se till att inte spara allting i tabellen wp_postmeta. Det är helt OK, och till och med bättre, att skapa egna, anpassade tabeller där du redan från början har definierat de kolumner, relationer och index som behövs.

Du bör även lära dig mer om databas-index och varför du inte vill ge upphov till genomsökningar av fullständiga tabeller i databasen.

Tips 7 – Men använd inte SQL-kommandona direkt

I WordPress ska du inte använda SQL-kommandona direkt. I stället ska du använda PHP-funktionen get_posts() för det grundläggande och klassen WP_Query för mer avancerad användning.

Om klassen WP_Query inte passar för dina behov använder du istället funktionerna i gruppen $wpdb som är utformade för interaktion med databasen, t.ex. $wpdp->get_row() och $wp_db->insert().

Om du trots allt behöver använda rena SQL-kommandon ska du ändå inte kommunicera direkt med databasen, utan i stället använda $wpdb->prepare() och $wpdb->query() för att undvika sårbarheter på grund av SQL-injektion.

Tips 8 – Konfiguration av databasservern

Databasservern behöver vara korrekt konfigurerad för optimal prestanda och maximal säkerhet.

MariaDB är ett bättre val än Oracle MySQL och du ska alltid använda en färsk version (10.1 eller senare). Vad gäller databasmotorn bör du hellre använda InnoDB än MyISAM och teckenkodningen bör vara angiven som UTFMB4 (så att du kan använda emoji 😉 ). Vad gäller kollationeringen (collation) behöver du se till att den stämmer för sorteringsordningen hos det lokala språkets A-Ö.

Sedan behöver du bara optimera alla övriga inställningar…

Det är inte helt enkelt att konfigurera en databas optimalt. I synnerhet när det gäller andra saker än det grundläggande som vi just beskrev här ovan. Om du inte på egen hand vill gå igenom all konfiguration av din databas men ändå vill att den ska vara optimerad för bästa prestanda och högsta säkerhet rekommenderar vi att du anlitar en databasadministratör eller väljer webbhotell som specialiserar sig på drift av WordPress, såsom Seravo.

Om du vill köra din WordPress-webbplats på optimalt konfigurerad hårdvara och programvara kan vi rekommendera att du studerar våra premiumpaket för WordPress-webbhotell och -drift

Tips 9 – Transienter och objekts-cache

Använd Redis Cache eller något liknande för att spara transienter och sessioner, så att de inte behöver sparas i wp_options. Redis och WP Transients-API:et minskar belastningen på databasen och bidrar till att din webbplats blir riktigt snabb.

Ett enkelt exempel på WP Transient-API

Tips 10 – Övervaka prestandan

Det är av avgörande vikt att övervaka webbplatsens och databasens prestanda för att säkerställa optimal funktion och att webbplatsens besökare blir nöjda. Vi på Seravo övervakar våra kunders webbplatser dygnet runt. Om din webbplats är hos oss kommer vi därför troligtvis att upptäcka vilka flaskhalsar din webbplats har och meddela dig. Men det är aldrig fel att vara väl förberedd genom att veta hur man övervakar prestandan för en webbplats och en databas.

Vad gäller själva databasen finns det två extremt användbara sätt att följa upp prestandan för din databas och dess databasfrågor. Du kan använda kommandot SHOW PROCESSLIST för att få en översikt över alla processer och trådar som för tillfället körs. För att ta reda på alla ovanligt långsamma databasfrågor bör du aktivera loggen över långsamma databasfrågor som visar alla databasfrågor som tog längre tid att utföra än den tidsgräns som är inställd för långsamma databasfrågor, long_query_time. Standardvärdet för long_query_time är 10 sekunder.

För att upptäcka flaskhalsar som slår mot prestandan på en webbplats i drift rekommenderar vi att man aktiverar Tideways för att samla in information och underlätta felsökning av långsam PHP-körning och programfel.

Tips 11 – Städning av databasen

Ett bra sätt att öka databasens prestanda och säkerhet är att städa bort en del överblivna saker som finns kvar. Till exempel kan man radera gamla transienter och inläggsversioner för inlägg som skapats i fjol eller ännu tidigare med följande kommandon:

DELETE FROM `wp_posts` WHERE post_type = 'revision' AND post_date NOT LIKE '2019-%'

DELETE FROM wp_options WHERE option_name LIKE ('_transient_%') OR option_name LIKE ('_site_transient_%');

Man kan rensa databasen på data från tillägg som man tänker ta bort genom att titta i tilläggets katalog wp-content/plugins/tilläggets-namn och där öppna filen uninstall.php och se vad den innehåller. Samma trick kan också användas för att ta bort överflödiga data för tillägg som fortfarande används genom att undersöker vilka data tillägget skulle ta bort efter att det avinstallerats, och sedan manuellt städa bland en del av dess äldre information.

Tips 12 – Kan du förklara? Kommandot Explain

Ibland kanske man behöver lite mer information om hur optimeringsfunktionen kör en databasfråga. Då kan man använda kommandot EXPLAIN så kommer optimeringsfunktionen att visa exakt hur den aktuella databasfrågan körs.

EXPLAIN SELECT * FROM wp_options WHERE autoload = 'yes'

Tips 13 – Prova med testdata

När man utvecklar en ny webbplats är det alltid användbart att fylla webbplatsen med innehåll för att se hur den ser ut och uppträder när den används. Det finns tre populära sätt att lägga till testdata till en webbplats, alla med olika svårhetsgrad och stil. Beroende på vad du vill uppnå kan en eller flera av följande lösningar vara till hjälp.

Det enklaste sättet att göra detta är att importera en fil som tagits fram av utvecklarna bakom WordPress som ett hjälpmedel för dem som utvecklar teman. Filen heter themeunittestdata.wordpress.xml och den finns, tillsammans med mer specifika instruktioner för användningen på WordPress Codex men, kort sagt, behöver du bara ladda ned filen från GitHub och importera den till webbplatsen med hjälp av det inbyggda importverktyget i WordPress, som du hittar under menyvalet Verktyg i adminpanelen.

För den som behöver mer testdata kan det bästa alternativet vara kommandoradsverktyget WP-CLI och dess kommando wp post generate. Om vi kombinerar detta med curl och API:et för testdatageneratorn loripsum.net har vi genast en kraftfull generator för testdata.

curl http://loripsum.net/api/5 | 
wp post generate --post_content --count=10

Slutligen finns också alternativet wp-cli-fixtures. Det är i sig självt en komplett testdatagenerator med allt från installationsinstruktioner till en demo-gif, och finns på GitHub.

Bonustips

Kopiera aldrig din utvecklingsdatabas till webbplatsen för skarp drift om du inte är totalt säker på vad du gör. För det mesta blir resultatet att du får en onödigt stor databas på en webbplats i drift, men värsta fall kommer du att ha en trasig databas till din skarpa webbplats.

Det var alla våra tips för detta inlägg om effektivitet och säkerhet för databasen. Vi hoppas du gillar artikeln och, som vanligt, ställer eventuella frågor och ger dina kommentarer nedan. Och om du letar efter ett premiumwebbhotell för WordPress med driftstjänster bör du studera våra olika paket.