Gisteren heb ik gekeken naar het basisgebruik van mysqldump voor het maken van back-ups van MySQL-databases. Vandaag zal ik kijken hoe mysqldump te gebruiken om de gegevens van een MySQL-database te dumpen in CSV en tab-gelimiteerde tekstbestanden, in plaats van SQL insert queries te gebruiken, wat de standaard dump-methode is.
mysqldump -u -p -T/path/to/directory
De -u vlag wordt gebruikt om de gebruikersnaam te specificeren die wordt gebruikt om verbinding te maken met de MySQL-database server, en u zou het deel van het bovenstaande voorbeeld kunnen vervangen door uw gebruikersnaam.
De -p vlag geeft aan dat u een wachtwoord moet opgeven om verbinding te maken met de database; u zult er om gevraagd worden zodra het commando begint.
De -T vlag gevolgd door de directory naam is waar MySQL zijn bestanden naar toe zal schrijven. Je kan een spatie hebben tussen de -T en het begin van de directory naam of geen spatie: het is aan jou, beide zal werken. Het is belangrijk op te merken dat de directory die u opgeeft schrijfbaar moet zijn door de gebruiker als wie de MySQL server draait. Als dat niet zo is, krijgt u een foutmelding als deze:
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Als uw Linux machine SELinux aan heeft staan, dan moet de directory ook toegestaan zijn door de SELinux configuratie voor MySQL om naar te schrijven.
Bestanden gemaakt door mysqldump
Gebruik makend van bovenstaand voorbeeld, met een database die twee tabellen heeft genaamd “something” en “something_else”, zullen vier bestanden als volgt worden aangemaakt:
- something.sql – bevat de SQL om de tabel aan te maken. Bevat standaard
DROP TABLE IF EXISTS `something`;
als onderdeel van de query - something.txt – de gegevens van de tabel “something” in door tabbladen gescheiden formaat
- something_else.sql – bevat de SQL om de tabel aan te maken. Standaard bevat het
DROP TABLE IF EXISTS `something_else`;
als onderdeel van de query - something_else.txt – de gegevens van de tabel “something_else” in tab delimited formaat
Als u niet wilt dat de *.sql bestanden niet aangemaakt worden, dan kunt u de -t vlag aan het mysqldump commando toevoegen zoals dit:
mysqldump -u -p -t -T/path/to/directory
Merk op dat zelfs als de directory die u specificeert niet door de MySQL server kan worden beschreven, de *.sql bestanden nog steeds worden gemaakt; het is alleen de tekst bestanden die niet kunnen worden gemaakt.
Het veranderen van de output formaat
Standaard, mysqldump met de -T vlag zal de gegevens dumpen in tab delimited bestanden. Het is echter mogelijk om het scheidingsteken te veranderen, en ook om aan te geven dat aanhalingstekens de veldwaarden omringen.
Om het scheidingsteken te veranderen, gebruik de --fields-terminated-by=
vlag zoals in het volgende voorbeeld. In dit voorbeeld dumpen we de gegevens in door komma’s gescheiden waarden of CSV:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
Wilt u ook nog aanhalingstekens rond elk veld, gebruik dan de --fields-enclosed-by=
vlag. In het onderstaande voorbeeld is elk veld omgeven door aanhalingstekens. Merk op dat we het aanhalingstekensymbool op de commandoregel moeten escapen met een schuine streep.
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
Het resulterende bestand zou er uit zien als in het volgende voorbeeld: