Brug af mysqldump til at gemme data til CSV-filer

, Author

I går kiggede jeg på grundlæggende brug af mysqldump til sikkerhedskopiering af MySQL-databaser. I dag vil jeg se på, hvordan man bruger mysqldump til at dumpe data fra en MySQL-database til CSV- og tabulatorafgrænsede tekstfiler, i stedet for at bruge SQL-indsætningsforespørgsler, som er standarddumpmetoden.

mysqldump -u -p -T/path/to/directory 

Flaget -u bruges til at angive det brugernavn, der bruges til at oprette forbindelse til MySQL-databaseserveren, og du skal erstatte den del af ovenstående eksempel med dit brugernavn.

Flaget -p angiver, at du skal indtaste en adgangskode for at oprette forbindelse til databasen; du vil blive bedt om den, når kommandoen begynder at blive udført.

Flaget -T efterfulgt af mappenavnet angiver, hvor MySQL vil skrive sine filer hen. Du kan have et mellemrum mellem -T og starten af mappenavnet eller intet mellemrum: det er op til dig, da begge dele vil fungere. Det er vigtigt at bemærke, at den mappe, du angiver, skal kunne skrives af den bruger, som MySQL-serveren kører som. Hvis den ikke er det, vil du få en fejl som denne:

mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'

Hvis din Linux-maskine har SELinux aktiveret, skal mappen også være tilladt af SELinux-konfigurationen, så MySQL kan skrive til den.

Filer oprettet af mysqldump

Med ovenstående eksempel, med en database, der har to tabeller kaldet “something” og “something_else”, vil der blive oprettet fire filer som følger:

  • something.sql – indeholder SQL’en til at oprette tabellen. Som standard indeholder den DROP TABLE IF EXISTS `something`; som en del af forespørgslen
  • something.txt – dataene fra tabellen “something” i tabulatorafgrænset format
  • something_else.sql – indeholder SQL’en til oprettelse af tabellen. Som standard indeholder den DROP TABLE IF EXISTS `something_else`; som en del af forespørgslen
  • something_else.txt – dataene fra “something_else”-tabellen i tabulatorafgrænset format

Hvis du ikke ønsker, at *.sql-filer skal oprettes, så kan du tilføje -t-flaget til mysqldump-kommandoen på følgende måde:

mysqldump -u -p -t -T/path/to/directory 

Bemærk, at selv om den mappe, du angiver, ikke kan skrives til af MySQL-serveren, vil *.sql-filerne stadig vil blive oprettet; det er kun tekstfilerne, der ikke kan oprettes.

Ændring af outputformatet

Mysqldump med T-flaget vil som standard dumpe dataene i tab-delimiterede filer. Det er dog muligt at ændre afgrænseren og også at angive, at anførselstegn skal omslutte feltværdierne.

For at ændre afgrænseren skal du bruge --fields-terminated-by=-flaget som i følgende eksempel. I dette eksempel vil vi dumpe dataene til kommaseparerede værdier eller CSV:

mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,

Hvis du også ønsker at sætte anførselstegn omkring hvert felt, skal du bruge --fields-enclosed-by=-flaget. I eksemplet nedenfor er hvert felt omgivet af anførselstegn. Bemærk, at vi skal undslippe citat-symbolet på kommandolinjen med en skråstreg.

mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,

Den resulterende fil ville se ud som i følgende eksempel:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.