Hoppa till innehållet
Problemlösning

Flytta WordPress till nytt webbhotell utan driftstopp

Ljus datahall med rader av serverrack och kabelstegar i taket
Foto: Taylor Vick / Unsplash

Ordningen avgör om en flytt märks eller inte. Sänk TTL på domänens DNS-poster ett dygn i förväg, kopiera filer och databas till det nya hotellet, testa sajten där via hosts-filen på din egen dator, och peka om DNS först när allt fungerar. Gör du stegen i den ordningen ligger gamla och nya hotellet parallellt under hela bytet och ingen besökare ser en död sida.

För en WooCommerce-butik tillkommer en sak: ordrar som läggs efter att du tog den sista databaskopian hamnar i fel databas. Därför tar jag den kopian i en lugn timme och stänger beställningar på det gamla hotellet direkt efteråt. Det är det enda avbrottet, och det gäller bara kassan, inte sajten.

Sänk TTL ett dygn i förväg

TTL är antalet sekunder som DNS-servrar runt om i världen får minnas domänens IP-adress innan de frågar igen. Står den på 3600 kan det ta en timme innan en besökare hamnar på nya hotellet, står den på 86400 kan det ta ett dygn. Sänk till 300 sekunder dagen innan flytten, så att det gamla värdet hinner gå ut ur alla cachar innan du byter.

Hos Loopia hittar du inställningen i Kundzonen: klicka på domänen och sedan på den blå knappen DNS-editor. Loopia sätter 300 eller 3600 sekunder som standard och skriver själva att en lägre TTL gör att ändringar slår igenom snabbare. Hos Oderland ligger posterna i cPanel under DNS-hantering (Zone Editor om panelen är på engelska), där du klickar på Hantera vid domänen och sedan Redigera vid posten. Oderland föreslår 7200 som standardvärde, så där finns det mycket att vinna på att sänka.

Ligger DNS hos någon annan än webbhotellet, till exempel hos en registrar eller Cloudflare, är det där du ändrar. Kontrollera var namnservrarna pekar innan du letar efter fältet.

Ta en fullständig backup

Innan något kopieras tar jag en backup som jag kan återställa från om allt går fel: hela filkatalogen inklusive wp-content/uploads, och en databasdump. Hotellets egen backupfunktion räcker inte, eftersom den försvinner när kontot sägs upp. Ladda ner kopian till din egen dator eller till ett lagringsutrymme som inte hör till något av hotellen.

Kopiera filer och databas

Har du SSH på båda hotellen går flytten snabbast med WP-CLI och rsync. Kommandona nedan körs på det gamla hotellet, i WordPress-katalogen. Flaggan --add-drop-table skickas vidare till mysqldump så att importen skriver över eventuella tabeller som redan finns på nya hotellet.

# Run on the OLD host, inside the WordPress directory.
wp db export dump-fore-flytt.sql --add-drop-table

# Copy every file, uploads included, to the new host. Trailing slashes matter.
rsync -az --progress /var/www/exempel.se/ user@ny-server:/var/www/exempel.se/

På det nya hotellet skapar du en tom databas, uppdaterar wp-config.php med nya databasuppgifter och importerar dumpen. Behåller du domänen är databasen klar efter importen. Byter adressen form samtidigt, till exempel från http:// till https:// eller till ett tillfälligt testdomännamn, kör du wp search-replace. Kommandot hanterar serialiserad data, vilket en ren SQL-ersättning inte gör. Jag kör alltid med --dry-run först och ser hur många rader som träffas.

# Run on the NEW host, inside the WordPress directory.
wp db import dump-fore-flytt.sql

# Only when the address changes form. Dry-run first, then for real.
wp search-replace 'http://exempel.se' 'https://exempel.se' --skip-columns=guid --dry-run
wp search-replace 'http://exempel.se' 'https://exempel.se' --skip-columns=guid

Saknar du SSH fungerar ett migreringsplugin som Duplicator. Det paketerar filer och databas i ett arkiv som du laddar upp och packar upp på det nya hotellet, och sköter adressbytet själv. För en butik med många gigabyte bilder tar det betydligt längre tid än rsync, och vissa hotell har gränser för hur stora filer som får laddas upp via webben.

Testa på nya hotellet via hosts-filen

Nu finns sajten på två ställen, men DNS pekar fortfarande på det gamla. För att se den nya kopian utan att röra DNS lägger du in nya serverns IP-adress i hosts-filen på din egen dator. På Mac och Linux ligger den i /etc/hosts, på Windows i C:\Windows\System32\drivers\etc\hosts. Både Oderland och Inleed har hjälpsidor som visar exakt hur du öppnar filen med rättigheter att spara. En rad per värdnamn:

# Add to /etc/hosts (macOS, Linux) or C:WindowsSystem32driversetchosts.
203.0.113.10  exempel.se
203.0.113.10  www.exempel.se

Efter det visar din webbläsare nya hotellet under den riktiga domänen, medan alla andra ser det gamla. Gå igenom startsidan, en artikel, en produkt, varukorgen och kassan fram till betalsteget, mediebiblioteket och ett par inställningssidor i admin. Prova att ladda upp en bild, så att du vet att uploads är skrivbar. Titta i serverns felsökningslogg efter PHP-varningar som inte fanns på gamla hotellet, oftast en PHP-version eller ett tillägg som saknas.

Ta bort raderna ur hosts-filen när du är klar, annars blir du förvirrad senare.

Frys butiken och ta den sista kopian

Allt du testat hittills bygger på en databas som är några timmar gammal. För en blogg spelar det ingen roll, för en butik är det hela skillnaden. Ordrar, lagersaldon och kundkonton som ändras efter dumpen finns bara på det gamla hotellet.

Så här gör jag med en butik: jag väljer en lugn timme, ofta sent på kvällen, och meddelar kunden i förväg. Sedan tar jag en ny databasdump på det gamla hotellet, importerar den på det nya och sätter samtidigt det gamla hotellet i underhållsläge med wp maintenance-mode activate. Från den sekunden kan ingen lägga en order i fel databas. Den sista filsynkningen med rsync kör jag samtidigt, så att uppladdningar från dagen följer med. Hela fönstret brukar landa på tio till tjugo minuter.

Peka om DNS

Ändra A-posten för domänen och för www till nya serverns IP-adress, på samma ställe där du sänkte TTL. Eftersom TTL nu står på 300 sekunder slår ändringen igenom på några minuter för de flesta, men Loopia skriver själva att enskilda DNS-servrar kan ligga kvar på gamla uppgifter i upp till ett dygn. Därför låter jag det gamla hotellet stå kvar i underhållsläge en vecka innan jag säger upp det.

Kontrollera med dig exempel.se +short eller en webbtjänst för DNS-uppslag att svaret är den nya adressen. När det är klart höjer jag TTL igen till 3600.

Efter bytet: SSL, e-post, cron och uppladdningar

Fyra saker kontrollerar jag alltid efteråt, i den här ordningen.

SSL-certifikatet följer inte med. Nya hotellet behöver utfärda ett eget, och de flesta gör det automatiskt med Let’s Encrypt först när DNS pekar dit. Fram till dess visar nya servern certifikatfel om någon träffar den direkt. Öppna sajten i ett privat fönster och klicka på hänglåset.

WP-Cron startas av besök på sajten, så schemalagda jobb i WooCommerce, som utskick av ordermejl via kö och Action Scheduler, kommer igång av sig själva. Har du däremot ersatt WP-Cron med ett riktigt cronjobb på gamla hotellet, med DISABLE_WP_CRON i wp-config.php, måste cronjobbet läggas upp igen på det nya. Det glöms bort oftare än något annat, och symtomet är att ordermejl och abonnemangsförnyelser stannar utan felmeddelande.

Uppladdningar till sist: öppna mediebiblioteket och bläddra bakåt till det äldsta. Visas bilderna är uploads komplett. Ladda upp en ny bild och kontrollera att den hamnar i rätt månadsmapp och att miniatyrerna skapas.

Det som brukar gå fel

Det vanligaste är att någon pekar om DNS först och testar sedan. Då har besökarna redan hittat en sajt som saknar en PHP-modul eller har fel databasuppgifter, och det går inte att backa snabbt eftersom TTL inte sänktes i förväg. Ordningen i den här guiden finns till för exakt det.

Det näst vanligaste i butiker är ordrar som försvinner. Någon tar databasdumpen på eftermiddagen, pekar om DNS på kvällen och upptäcker efter en vecka att tre ordrar bara finns på det gamla hotellet, som nu är uppsagt. Ta backupen från gamla hotellet innan du säger upp det, även om du tror att allt är klart.

Olika PHP-versioner ger tysta fel. Ett tema eller plugin som fungerade på PHP 8.1 kan ge vit sida på 8.3, och tvärtom. Jämför PHP-versionen på båda hotellen innan du börjar, och läs felsökningsloggen på det nya under testet via hosts-filen.

Cachelager på gamla hotellet, som LiteSpeed Cache eller en server-cache, kan servera gamla sidor efter ompekningen för dem vars DNS ännu inte uppdaterats. Det ser ut som att flytten misslyckades, men är bara TTL som inte gått ut. Vänta, och kontrollera med dig i stället för med webbläsaren.

Pihlfelt & Vänner

Vill du slippa göra flytten själv?

Vi flyttar WooCommerce-butiker mellan webbhotell med fryst kassa, testad kopia och DNS-byte på en tid som passar er, och håller det gamla hotellet under uppsikt tills allt har slagit igenom.

Beskriv flytten

Vanliga frågor

Hur lång tid tar en flytt av en WordPress-sajt?

Själva kopieringen tar en kväll för en vanlig sajt. Räkna med att sänka TTL ett dygn i förväg och att låta det gamla hotellet ligga kvar en vecka efteråt. Hela processen tar alltså ungefär en vecka, men det aktiva arbetet är några timmar.

Måste jag köra wp search-replace om domänen är densamma?

Nej. Behåller du domän och protokoll är databasen oförändrad och du behöver bara kopiera den. Kommandot behövs när adressen byter form, till exempel från http till https, eller om du testar på ett tillfälligt domännamn.

Kan jag flytta utan SSH och WP-CLI?

Ja, med ett migreringsplugin som Duplicator som paketerar filer och databas i ett arkiv du packar upp på nya hotellet. Det tar längre tid för stora butiker och kräver att hotellet tillåter uppladdningar i den storleken, men arbetsordningen med TTL, hosts-fil och DNS är densamma.

Vad händer med ordrar som kommer in under flytten?

Alla ordrar som läggs efter att du tog den sista databasdumpen hamnar i den gamla databasen och följer inte med. Därför tar jag dumpen i en lugn timme, stänger beställningar på gamla hotellet direkt efteråt och låter det stå så tills DNS har slagit igenom.

Varför slutade e-posten fungera efter flytten?

Oftast för att MX-posterna ändrades i misstag, eller för att nya hotellets DNS-zon skapades med egna MX-poster som pekar på deras mejlserver. Jämför DNS-zonen med en kopia av den gamla innan du pekar om namnservrarna.

Källor

Testad med

  • WordPress 7.1.3
  • WooCommerce 11.2.1
  • PHP 8.4

Senast testad 14 oktober 2026

Fungerar inte koden hos dig, eller hittade du ett fel? Berätta

Hjälpte det här inlägget?

Läs vidare

Alla inlägg