Som en af de førende frit tilgængelige databaser er MySQL et populært valg for mange webapplikationer. Når din app er udsat for internettet, er den udsat for ondsindede angreb. Hvis din server er kompromitteret, skal du i bedste fald geninstallere applikationen; i værste fald kan du miste dine data. Derudover kan du komme i en situation, hvor du skal migrere en database fra en server til en anden.
Hvad bruges mysqldump til?
Mysqldump-værktøjet har dig dækket til både serverkompromis- og migreringssituationer. Dens grundlæggende funktion er at tage en MySQL-database og dumpe den ud som en tekstfil. Men ikke nogen tekstfil; filen er et sæt SQL-sætninger. Disse sætninger, når de udføres, rekonstruerer databasen til den præcise tilstand, den var i, da dumpet blev udført.
Brug mysqldump til at oprette eksporter af en database som backup, eller når databasen flyttes til en ny vært. I begge tilfælde vil tekstfilen blive importeret tilbage til en MySQL-databaseserver. Det vil udføre alle SQL-sætningerne i filen, som genopbygger databasen til dens oprindelige tilstand. Denne del bruger ikke mysqldump-kommandoen, men det ville heller ikke være muligt uden dette værktøj.
MySQL-dokumenterne viser andre metoder til sikkerhedskopiering, men disse har ulemper:
- Hotcopying af en database fra MySQL Enterprise er en fantastisk måde at opnå disse sikkerhedskopier på - hvis du ikke har noget imod Enterprise-prisskiltet.
- Det kan være vanskeligt at kopiere databasedatamapper, når man flytter på tværs af operativsystemer, da destinationerne vil være forskellige.
- Eksport til en afgrænset tekstfil vil give dig indholdet, men du bliver nødt til at genskabe strukturen.
- Du kan ofte sikkerhedskopiere databaser fra GUI-programmer som MySQL Workbench. Men dette er en manuel proces; ikke noget, du kan skrive til eller inkludere i et batchjob.
Installer mysqldump-værktøjet
For Windows, tjek vores instruktioner for at installere MySQL på Windows 7 (installationsprocessen er den samme for Windows 10). På macOS, se vores vejledning for at installere MySQL på macOS 10.7 (igen, ældre, men stadig gældende). Brugere af Ubuntu-baserede Linux-systemer kan bruge følgende kommando til at installere MySQL-klienten og hjælpeprogrammer:
sudo apt install mysql-client
Udtræk en MySQL-dump
Når det er installeret, skal du bruge mysqldump til at få en komplet sikkerhedskopi af en database.
mysqldump -h [din DB-værts navn eller IP] -u [DB-brugerens navn] -p [databasenavnet] > db_backup.sql
Her er en beskrivelse af flagene, der bruges i denne kommando:
- - h: Dette flag er databaseværten. Det kan være et fuldt værtsnavn (f.eks. myhost.domain.com) eller en IP-adresse. Lad dette stå tomt, hvis du kører kommandoen på samme vært som MySQL-serveren.
- - u: Dit brugernavn.
- - p: Hvis du har sikret MySQL-installationen korrekt, skal du bruge en adgangskode for at oprette forbindelse. Dette flag uden argument beder dig om en adgangskode, når du udfører kommandoen. Nogle gange er det nyttigt at angive adgangskoden direkte som argument for dette flag, for eksempel i et backup-script. Men når du bliver bedt om det, skal du ikke, for hvis nogen fik adgang til din computer, kunne de få denne adgangskode i kommandohistorikken.
- > db_backup.sql: Denne del fortæller mysqldump at dirigere sit output til en fil. Norm alt udsender kommandoen alt til konsollen, hvilket betyder, at du vil se flere SQL-sætninger på skærmen. Symbolet > sender outputtet ind i den navngivne tekstfil. Hvis denne fil ikke findes, oprettes den automatisk.
Når det er færdigt, har du en. SQL-fil. Dette er en tekstfil, der indeholder SQL-sætninger. Du kan åbne den i en hvilken som helst teksteditor for at inspicere indholdet. Her er en eksport fra en WordPress-database, der viser, hvordan disse filer er sat sammen.
Filen er opdelt i sektioner. Den første sektion opsætter tabellen for WordPress-kommentarer. Den anden sektion genskaber indholdet i disse tabeller (i dette eksempel, kommentarposterne). Når du genimporterer MySQL-dumpen, arbejder kommandoen gennem filen, udfører sætningerne og genopbygger databasen, som den var.
Importer en MySQL-dumpfil
Før du importerer dumpfilen, skal du bruge en database, der allerede er oprettet og dens gyldige brugernavn og adgangskode. Du skal også have alle tilladelser til databasen. Du behøver ikke GRANT-tilladelsen, men det er nemmere at give dem alle.
Få mere at vide om databasetilladelser, før du ændrer sikkerhedsroller i din database.
For at genimportere dine data skal du logge ind på MySQL-serveren med kommandoen mysql. Indtast brug [databasenavn] ved prompten, og erstat navnet på databasen. Indtast kilde [filnavn], og erstat navnet på den dump-fil, du tidligere tog.
Når du er færdig, vises en liste over meddelelser, der bemærker, at SQL-sætninger udføres. Hold øje med fejl, men hvis du har de rigtige tilladelser, burde du have det fint.
Når processen er fuldført, har du en kopi af den originale database. For at verificere ligheden mellem databaserne skal du udføre endnu et dump og derefter sammenligne de to output. Brug en teksteditor eller et dedikeret diff-værktøj til at sammenligne de to filer.
Der er to forskelle mellem disse filer, som repræsenteret ved røde linjer øverst og nederst på højre rullepanel. Den første er den linje, der indeholder databasenavnet, og dette er anderledes, fordi filerne blev navngivet anderledes. Det andet er tidsstemplet for dumpfilen. Dette er anderledes, fordi den anden database blev genskabt efter den første. Ellers er filerne nøjagtig de samme, hvilket betyder, at de databaser, der genererede dem, også er det.
FAQ
Hvordan retter du mysqldump-fejlen: Adgang nægtet ved brug af låsetabeller?
Bed din databaseadministrator om at give dig LOCK-privilegiet. Hvis dette ikke løser problemet, kan du prøve at køre den samme mysqldump-kommando ved at tilføje - -single-transaction flaget, såsom [ $ mysqldump --single-transaction] [-u bruger] [-p DBNAME] > backup.sql
Kan du bruge en "where"-klausul med mysqldump?
Brug en WHERE-sætning, når du opretter en sikkerhedskopi, der kun inkluderer de rækker, der opfylder den givne betingelse. Hvis du f.eks. kun vil dumpe data fra rækker med id-kolonnen større end 100, skal du indtaste "mysqldump my_db_name mit_table_name --where="id > 100" > my_backup.sql".