Använda mysqldump för att spara data till CSV-filer

, Author

I går tittade jag på grundläggande användning av mysqldump för säkerhetskopiering av MySQL-databaser. Idag ska jag titta på hur man använder mysqldump för att dumpa data från en MySQL-databas till CSV- och tabb-avgränsade textfiler, istället för att använda SQL-insertfrågor som är standardmetoden för dumpning.

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

Flaggan -u används för att specificera användarnamnet som används för att ansluta till MySQL-databasservern, och du ersätter den del av ovanstående exempel med ditt användarnamn.

Flaggan -p anger att du ska ange ett lösenord för att ansluta till databasen; du kommer att uppmanas att ange det när kommandot börjar exekveras.

Flaggan -T följt av katalognamnet anger var MySQL kommer att skriva sina filer till. Du kan ha ett mellanslag mellan -T och början av katalognamnet eller inget mellanslag: det är upp till dig eftersom båda fungerar. Det är viktigt att notera att den katalog du anger måste vara skrivbar för den användare som MySQL-servern körs som. Om den inte är det får du ett fel som detta:

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

Om din Linux-maskin har SELinux aktiverat måste katalogen också tillåtas av SELinux-konfigurationen för MySQL att skriva till.

Filer som skapas av mysqldump

Med hjälp av exemplet ovan, med en databas som har två tabeller som heter ”something” och ”something_else”, kommer fyra filer att skapas enligt följande:

  • something.sql – innehåller SQL för att skapa tabellen. Som standard innehåller den DROP TABLE IF EXISTS `something`; som en del av frågan
  • something.txt – data från tabellen ”something” i tabbdelimiterat format
  • something_else.sql – innehåller SQL för att skapa tabellen. Som standard innehåller den DROP TABLE IF EXISTS `something_else`; som en del av frågan
  • something_else.txt – data från tabellen ”something_else” i tabbdelimiterat format

Om du inte vill ha *.sql-filerna skapas kan du lägga till flaggan -t till mysqldump-kommandot så här:

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

Bemärk att även om katalogen du anger inte kan skrivas till av MySQL-servern, kommer *.sql-filerna kommer fortfarande att skapas; det är bara textfilerna som inte kan skapas.

Ändring av utdataformatet

Som standard kommer mysqldump med flaggan -T att dumpa data i tabbdelimiterade filer. Det är dock möjligt att ändra avgränsaren och även att specificera att citattecken omger fältvärdena.

För att ändra avgränsaren använder du flaggan --fields-terminated-by= som i följande exempel. I det här exemplet kommer vi att dumpa data till kommaseparerade värden eller CSV:

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

Om du också vill sätta citationstecken runt varje fält använder du flaggan --fields-enclosed-by=. I exemplet nedan är varje fält omgivet av citationstecken. Observera att vi måste undvika citationstecken på kommandoraden med ett snedstreck.

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

Den resulterande filen skulle se ut som i följande exempel:

Lämna ett svar

Din e-postadress kommer inte publiceras.