Som en av de ledende fritt tilgjengelige databasene, er MySQL et populært valg for mange nettapplikasjoner. Når appen din er eksponert for internett, blir den utsatt for ondsinnede angrep. Hvis serveren din er kompromittert, må du i beste fall installere programmet på nytt; i verste fall kan du miste dataene dine. I tillegg kan du komme i en situasjon der du trenger å migrere en database fra en server til en annen.
Hva brukes mysqldump til?
Mysqldump-verktøyet dekker deg for både serverkompromittering og migreringssituasjoner. Dens grunnleggende funksjon er å ta en MySQL-database og dumpe den ut som en tekstfil. Men ikke hvilken som helst tekstfil; filen er et sett med SQL-setninger. Disse setningene, når de utføres, rekonstruerer databasen til den nøyaktige tilstanden den var i da dumpen ble utført.
Bruk mysqldump for å lage eksporter av en database som sikkerhetskopier, eller når du flytter databasen til en ny vert. I begge tilfeller vil tekstfilen importeres tilbake til en MySQL-databaseserver. Den vil kjøre alle SQL-setningene i filen, som gjenoppbygger databasen til sin opprinnelige tilstand. Denne delen bruker ikke mysqldump-kommandoen, men det ville heller ikke vært mulig uten dette verktøyet.
MySQL-dokumentene viser andre metoder for å lage sikkerhetskopier, men disse har ulemper:
- Hotkopiering av en database fra MySQL Enterprise er en flott måte å oppnå disse sikkerhetskopiene på – hvis du ikke har noe imot Enterprise-prislappen.
- Det kan være vanskelig å kopiere databasedatakatalogene når du flytter på tvers av operativsystemer, siden destinasjonene vil være forskjellige.
- Eksport til en avgrenset tekstfil vil gi deg innholdet, men du må gjenskape strukturen.
- Du kan ofte sikkerhetskopiere databaser fra GUI-programmer som MySQL Workbench. Men dette er en manuell prosess; ikke noe du kan skrive eller inkludere i en batchjobb.
Installer mysqldump-verktøyet
For Windows, sjekk instruksjonene våre for å installere MySQL på Windows 7 (installasjonsprosessen er den samme for Windows 10). På macOS, se instruksjonene våre for å installere MySQL på macOS 10.7 (igjen, eldre, men fortsatt gjeldende). Brukere av Ubuntu-baserte Linux-systemer kan bruke følgende kommando for å installere MySQL-klienten og verktøyene:
sudo apt install mysql-client
Extract a MySQL Dump
Når installert, bruk mysqldump for å få en fullstendig sikkerhetskopi av en database.
mysqldump -h [navnet eller IP-adressen til DB-verten din] -u [navnet til DB-brukeren] -p [databasenavnet] > db_backup.sql
Her er en beskrivelse av flaggene som brukes i denne kommandoen:
- - h: Dette flagget er databaseverten. Det kan være et fullstendig vertsnavn (for eksempel myhost.domain.com) eller en IP-adresse. La dette stå tomt hvis du kjører kommandoen på samme vert som MySQL-serveren.
- - u: Brukernavnet ditt.
- - p: Hvis du har sikret MySQL-installasjonen riktig, trenger du et passord for å koble til. Dette flagget uten argument ber deg om et passord når du utfører kommandoen. Noen ganger er det nyttig å oppgi passordet direkte som argument for dette flagget, for eksempel i et sikkerhetskopiskript. Men når du blir bedt om det, bør du ikke det, for hvis noen fikk tilgang til datamaskinen din, kunne de få dette passordet i kommandohistorikken.
- > db_backup.sql: Denne delen ber mysqldump sende utdataene til en fil. Norm alt sender kommandoen alt til konsollen, noe som betyr at du vil se flere SQL-setninger på skjermen. >-symbolet sender utdataene inn i den navngitte tekstfilen. Hvis denne filen ikke eksisterer, opprettes den automatisk.
Når den er ferdig, har du en. SQL-fil. Dette er en tekstfil som inneholder SQL-setninger. Du kan åpne den i et hvilket som helst tekstredigeringsprogram for å inspisere innholdet. Her er en eksport fra en WordPress-database som viser hvordan disse filene er satt sammen.
Filen er delt inn i seksjoner. Den første delen setter opp tabellen for WordPress-kommentarer. Den andre delen gjenskaper innholdet i disse tabellene (i dette eksemplet, kommentarpostene). Når du importerer MySQL-dumpen på nytt, fungerer kommandoen gjennom filen, utfører setningene og bygger databasen på nytt slik den var.
Importer en MySQL-dumpfil
Før du importerer dumpfilen, trenger du en database som allerede er opprettet og dens gyldige brukernavn og passord. Du bør også ha alle tillatelsene til databasen. Du trenger ikke GRANT-tillatelsen, men det er enklere å gi dem alle.
Les mer om databasetillatelser før du endrer sikkerhetsroller i databasen.
For å re-importere dataene dine, logg inn på MySQL-serveren med mysql kommandoen. Skriv bruk [databasenavn] ved ledeteksten, og bytt inn navnet på databasen. Skriv inn kilde [filnavn], og bytt inn navnet på dumpfilen du tok tidligere.
Når du er ferdig, vises en liste over meldinger som viser at SQL-setninger kjøres. Hold øye med feil, men hvis du har de riktige tillatelsene, bør det gå bra.
Når prosessen er fullført, vil du ha et duplikat av den opprinnelige databasen. For å bekrefte likheten mellom databasene, utfør en ny dumping og sammenlign deretter de to utdataene. Bruk et tekstredigeringsprogram eller et dedikert diff-verktøy for å sammenligne de to filene.
Det er to forskjeller mellom disse filene, som representert av røde linjer øverst og nederst på høyre rullefelt. Den første er linjen som inneholder databasenavnet, og dette er annerledes fordi filene ble navngitt annerledes. Det andre er tidsstemplet for dumpfilen. Dette er annerledes fordi den andre databasen ble gjenskapt etter den første. Ellers er filene nøyaktig de samme, noe som betyr at databasene som genererte dem også er det.
FAQ
Hvordan fikser du mysqldump-feilen: Tilgang nektet ved bruk av låsetabeller?
Be databaseadministratoren om å gi deg LÅSE-privilegiet. Hvis dette ikke løser problemet, kan du prøve å kjøre den samme mysqldump-kommandoen ved å legge til - -single-transaction-flagget, for eksempel [ $ mysqldump --single-transaction] [-u bruker] [-p DBNAME] > backup.sql
Kan du bruke en "where"-klausul med mysqldump?
Bruk en WHERE-klausul når du oppretter en sikkerhetskopi som bare inkluderer radene som oppfyller den gitte betingelsen. For for eksempel å dumpe data bare fra rader med id-kolonnen større enn 100, skriv inn "mysqldump my_db_name my_table_name --where="id > 100" > my_backup.sql".