Å flytte et nettsted eller et WordPress-nettsted mellom servere krever nesten alltid at du tar med deg databasen. phpMyAdmin er det vanligste verktøyet for jobben, men det har ofte strenge grenser for hvor store filer du kan laste opp og ned, og store databaser feiler gjerne midt i en import. Da er kommandolinjen (shell via SSH) et raskere og langt mer pålitelig alternativ. I denne guiden går vi gjennom hvordan du eksporterer og importerer en MySQL- eller MariaDB-database med verktøyene mysqldump og mysql – med riktig syntaks, konkrete eksempler og de vanligste feilene forklart underveis.
Viktige punkter
- mysqldump lager en
.sql-fil med alleCREATE– ogINSERT-setninger; mysql spiller filen tilbake inn i databasen. - Det skal aldri være mellomrom mellom
-pog passordet. Bruk helst bare-pog tast passordet når du blir spurt. - Pass på retningen:
>eksporterer (ut),<importerer (inn). - Måldatabasen må finnes før import – opprett den med
CREATE DATABASEførst. - For store databaser: bruk
--single-transaction, komprimer medgzipog økmax_allowed_packetved behov. - I MariaDB 11 heter verktøyene nå
mariadb-dumpogmariadb, menmysqldumpogmysqlvirker fortsatt som alias.
Hva betyr det å eksportere og importere en database?
Å eksportere en database betyr å lagre hele innholdet som en tekstfil med SQL-setninger. Verktøyet mysqldump leser gjennom databasen og skriver ut kommandoene som skal til for å gjenskape den: CREATE TABLE for strukturen og INSERT for alle radene med data. Resultatet er én .sql-fil – ofte kalt en «dump» – som du kan åpne i en vanlig teksteditor.
Å importere betyr det motsatte: du kjører SQL-filen inn i en database igjen, slik at tabeller og data blir gjenskapt. Til dette bruker du MySQL-klienten mysql. Fordi en dump bare er vanlig tekst, kan den flyttes mellom servere, komprimeres og versjoneres helt fritt. Dette kalles en logisk sikkerhetskopi, i motsetning til en fysisk kopi av selve datafilene på disken.
En database henger tett sammen med nettstedet som bruker den. For WordPress ligger for eksempel alle innlegg, sider, kommentarer og innstillinger i databasen, mens temaer og bilder ligger som filer. En full flytting krever derfor både databasen (denne guiden) og filene (via FTP eller SSH). Les mer om hvor alt dette bor hos oss under WordPress-hosting.
Hvorfor bruke kommandolinjen i stedet for phpMyAdmin?
Kommandolinjen omgår grensene som stopper phpMyAdmin på store databaser. phpMyAdmin kjører i nettleseren gjennom PHP, og er derfor bundet av PHP-innstillinger som upload_max_filesize, post_max_size, max_execution_time og memory_limit. Når en dump blir større enn disse grensene, stopper importen midt i – ofte uten en tydelig feilmelding.
Via shell finnes ikke disse begrensningene. Fordelene er konkrete:
- Ingen opplastingsgrense: filstørrelsen er bare begrenset av diskplass, ikke av PHP.
- Raskere: dataene går rett mellom fil og database uten å måtte gjennom nettleseren.
- Pålitelig på store databaser: ingen tidsavbrudd i nettleseren midt i jobben.
- Kan automatiseres: kommandoene kan legges inn i skript og planlagte sikkerhetskopier (cron-jobber).
Det eneste du trenger, er SSH-tilgang til serveren og innloggingsdetaljene til databasen. For å følge eksemplene under går vi ut fra denne informasjonen:
| Databasebrukernavn | bruker1 |
| Databasepassord | f535254 |
| Databasenavn | database1 |
| Ønsket filnavn på dumpen | export.sql |
Slik eksporterer du en database med mysqldump
Du eksporterer en database ved å sende utdata fra mysqldump til en fil med tegnet >. Den generelle formen er:
mysqldump -u BRUKERNAVN -p DATABASENAVN > filnavn.sql
Med informasjonen fra tabellen over blir kommandoen:
mysqldump -u bruker1 -p database1 > export.sql
Når du trykker Enter, blir du bedt om passordet. Skriv det inn (det vises ikke på skjermen) og trykk Enter igjen. Etter noen sekunder ligger hele databasen i filen export.sql i mappen du står i.
Riktig plassering av passordet – en vanlig felle
Det skal aldri være mellomrom mellom -p og passordet. Dette er den vanligste feilen med mysqldump, og eldre guider gjør den ofte. Ifølge MySQLs offisielle dokumentasjon tolkes -p med et mellomrom etter seg som «spør etter passordet interaktivt». Skriver du mysqldump -u bruker1 -p f535254 database1, oppfatter altså verktøyet f535254 som et databasenavn, ikke som passordet – og kommandoen feiler.
Du har to korrekte alternativer:
- Anbefalt: skriv bare
-puten passord, og tast det inn når du blir spurt. Dette er både tryggest og enklest:mysqldump -u bruker1 -p database1 > export.sql - Passord direkte i kommandoen: skriv det klistret inntil
-puten mellomrom:mysqldump -u bruker1 -pf535254 database1 > export.sql. Dette fungerer, men er mindre trygt (se avsnittet om passordsikkerhet lenger ned).
Nyttige flagg for eksport
Noen ekstra flagg gjør dumpen mer pålitelig, særlig på databaser som er i bruk:
--single-transaction– tar et konsistent øyeblikksbilde av InnoDB-tabeller uten å låse dem, slik at nettstedet kan fortsette å skrive mens dumpen pågår.--quick– leser store tabeller rad for rad i stedet for å laste hele tabellen inn i minnet.--routinesog--events– tar med lagrede prosedyrer, funksjoner og planlagte hendelser, som ikke blir med i standarddumpen.--no-tablespaces– unngår en rettighetsfeil som ofte dukker opp på delt webhotell.
En robust eksport av en database i drift ser da slik ut:
mysqldump -u bruker1 -p --single-transaction --quick database1 > export.sql
Slik importerer du en database med mysql
Du importerer en dump ved å lese filen inn i mysql-klienten med tegnet <. Legg merke til at pilen nå peker andre veien enn ved eksport. Den generelle formen er:
mysql -u BRUKERNAVN -p DATABASENAVN < filnavn.sql
Med eksempeldataene våre:
mysql -u bruker1 -p database1 < export.sql
Også her gjelder regelen om passordet: bruk -p alene og tast passordet når du blir spurt, eller skriv det klistret inntil som -pf535254 – aldri med mellomrom.
Databasen må finnes før du importerer
En dump inneholder som regel CREATE TABLE, men ikke alltid en kommando som oppretter selve databasen. Finnes ikke måldatabasen fra før, får du en feilmelding. Opprett den først ved å logge inn i MySQL og kjøre:
CREATE DATABASE database1;
Importerer du til en tom, nyopprettet database, slipper du også rester fra gammelt innhold som kan skape konflikter.
Importere med «source» inne i MySQL
Alternativt kan du logge inn i MySQL-klienten, velge databasen og lese inn filen derfra:
mysql -u bruker1 -p
Deretter, på MySQL-prompten: USE database1; og så SOURCE /full/sti/til/export.sql;. Denne metoden viser deg hver setning som kjøres, noe som er greit for feilsøking. For store filer er likevel <-metoden over oftest raskest.
Kommandooversikt
| Oppgave | Kommando |
|---|---|
| Eksportere én database | mysqldump -u bruker1 -p database1 > export.sql |
| Eksportere alle databaser | mysqldump -u bruker1 -p --all-databases > alle.sql |
| Eksportere én tabell | mysqldump -u bruker1 -p database1 tabell > tabell.sql |
| Konsistent InnoDB-backup | mysqldump -u bruker1 -p --single-transaction --quick database1 > export.sql |
| Eksportere og komprimere | mysqldump -u bruker1 -p database1 | gzip > export.sql.gz |
| Importere en database | mysql -u bruker1 -p database1 < export.sql |
| Importere en gzip-fil | gunzip < export.sql.gz | mysql -u bruker1 -p database1 |
Eksportere og importere store databaser
Store databaser bør komprimeres og kan kreve at du justerer én serverinnstilling. Komprimering kan skje «i farten» ved at du sender dumpen gjennom gzip før den skrives til fil:
mysqldump -u bruker1 -p database1 | gzip > export.sql.gz
En komprimert SQL-fil blir ofte 5–10 ganger mindre, noe som sparer både diskplass og overføringstid. For å importere en slik fil pakker du den ut i samme operasjon:
gunzip < export.sql.gz | mysql -u bruker1 -p database1
Får du feilen «packet bigger than max_allowed_packet» under import, inneholder dumpen rader som er større enn den tillatte pakkestørrelsen. Den kan økes midlertidig på klientsiden med flagget --max_allowed_packet, for eksempel:
mysql --max_allowed_packet=256M -u bruker1 -p database1 < export.sql
Merk at både klienten og serveren har sin egen grense; på en server du selv styrer, kan verdien også settes permanent i konfigurasjonsfilen. Å ta sikkerhetskopi før større endringer er uansett god praksis – les gjerne mer om drift av WordPress og rutinene rundt dette før du for eksempel skal oppgradere WordPress.
Passordsikkerhet på kommandolinjen
Å skrive passordet direkte i kommandoen er praktisk, men regnes som usikkert. MySQLs egen dokumentasjon fraråder det, av to grunner: andre brukere på samme server kan se kommandoen i prosesslisten mens den kjører, og passordet havner i shellens kommandohistorikk (~/.bash_history).
Tryggere alternativer:
- La verktøyet spørre: bruk bare
-pog tast passordet når du blir bedt om det. Da havner det aldri i historikken. - Bruk en konfigurasjonsfil: legg brukernavn og passord i en beskyttet fil (for eksempel
~/.my.cnfmed rettighetenchmod 600), så slipper du å oppgi dem i hver kommando.
Generell sikkerhet på nettstedet henger tett sammen med dette. Har du en WordPress-side, er det verdt å lese om sikkerhet i WordPress og hvordan du fjerner virus og skadevare fra nettsiden – en ren sikkerhetskopi er førstelinjeforsvaret når noe går galt.
MySQL eller MariaDB – mysqldump eller mariadb-dump?
MariaDB har gitt verktøyene nye navn, men de gamle fungerer fortsatt. Mange webhotell bruker MariaDB, en avlegger av MySQL som er svært lik i bruk. Fra og med MariaDB 11 heter eksportverktøyet offisielt mariadb-dump og klienten mariadb. De gamle navnene mysqldump og mysql beholdes som alias (snarveier), men skriver nå ut en advarsel om at de kan bli fjernet i en framtidig versjon.
I praksis betyr det at alle kommandoene i denne guiden virker på begge systemene. Får du en advarsel om at mysqldump er avviklet, bytter du bare til mariadb-dump med nøyaktig samme flagg og argumenter.
Vanlige feil og hvordan du unngår dem
De fleste problemene skyldes små detaljer i kommandoen. Her er de hyppigste:
- Mellomrom etter -p: den klassiske feilen.
-p f535254gjør at passordet oppfattes som et databasenavn. Bruk-palene eller-pf535254uten mellomrom. - Feil retning på pilen:
>eksporterer (ut til fil),<importerer (inn fra fil). Bytter du dem om ved import, kan du i verste fall overskrive dumpen din med en tom fil. - Databasen finnes ikke: opprett måldatabasen med
CREATE DATABASEfør import. - «Access denied»: feil brukernavn, passord eller manglende rettigheter. Dobbeltsjekk innloggingsdetaljene, som ofte står i nettstedets konfigurasjonsfil (for WordPress:
wp-config.php). - Import stopper på store filer: øk
max_allowed_packetog vurder komprimering, som beskrevet over. - Manglende prosedyrer eller hendelser: husk
--routinesog--eventsi eksporten hvis databasen bruker dem.
Kilder
Vanlige spørsmål (FAQ)
Trenger jeg SSH-tilgang for å bruke mysqldump?
Ja. mysqldump og mysql kjøres fra serverens kommandolinje, så du trenger SSH-tilgang til webhotellet eller serveren. Har du ikke SSH, må du bruke phpMyAdmin i stedet, men da gjelder opplastingsgrensene som gjør store databaser vanskelige.
Hvor finner jeg databasenavn, brukernavn og passord?
For WordPress står alt i filen wp-config.php i rotmappen til nettstedet, under variablene DB_NAME, DB_USER og DB_PASSWORD. Andre systemer har tilsvarende konfigurasjonsfiler, og detaljene finnes også i kontrollpanelet hos webhotellet ditt.
Kan jeg eksportere bare én tabell?
Ja. Legg tabellnavnet etter databasenavnet: mysqldump -u bruker1 -p database1 tabellnavn > tabell.sql. Det er nyttig når du bare trenger en enkelt tabell og ikke hele databasen.
Hvorfor får jeg «Access denied» selv med riktig passord?
Den vanligste årsaken er et mellomrom mellom -p og passordet, som gjør at verktøyet venter på et passord du aldri oppga. Sjekk også at brukeren faktisk har rettigheter til databasen, og at du ikke har skrivefeil i brukernavn eller databasenavn.
Hvordan importerer jeg en .sql.gz-fil uten å pakke den ut først?
Send den gjennom gunzip rett inn i mysql: gunzip < export.sql.gz | mysql -u bruker1 -p database1. Da slipper du å lage en stor utpakket mellomfil på disken.






