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: