Ieri am analizat utilizarea de bază a mysqldump pentru salvarea bazelor de date MySQL. Astăzi mă voi uita cum să folosesc mysqldump pentru a salva datele dintr-o bază de date MySQL în fișiere de text delimitate CSV și tab, în loc să folosesc interogări de inserție SQL, care este metoda implicită de salvare.
mysqldump -u -p -T/path/to/directory
Semnalizatorul -u este folosit pentru a specifica numele de utilizator folosit pentru a vă conecta la serverul bazei de date MySQL, și veți înlocui partea din exemplul de mai sus cu numele dvs. de utilizator.
Semnalizatorul -p indică faptul că veți introduce o parolă pentru a vă conecta la baza de date; aceasta vă va fi solicitată odată ce comanda începe să se execute.
Semnalizatorul -T urmat de numele directorului este locul în care MySQL își va scrie fișierele. Puteți avea un spațiu între -T și începutul numelui directorului sau niciun spațiu: depinde de dumneavoastră, deoarece oricare dintre ele va funcționa. Este important de reținut că directorul pe care îl specificați trebuie să poată fi scris de către utilizatorul cu care rulează serverul MySQL. Dacă nu este, veți primi o eroare de genul acesta:
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Dacă mașina dvs. Linux are SELinux activat, atunci directorul trebuie să fie, de asemenea, permis de configurația SELinux pentru ca MySQL să poată scrie în el.
File create de mysqldump
Utilizând exemplul de mai sus, cu o bază de date care are două tabele numite „ceva” și „ceva_altfel”, vor fi create patru fișiere după cum urmează:
- something.sql – conține SQL-ul pentru a crea tabelul. În mod implicit, include
DROP TABLE IF EXISTS `something`;
ca parte a interogării - something.txt – datele din tabelul „ceva” în format delimitat de tabulare
- something_else.sql – conține SQL pentru a crea tabelul. În mod implicit, include
DROP TABLE IF EXISTS `something_else`;
ca parte a interogării - something_else.txt – datele din tabelul „something_else” în format delimitat de tabulație
Dacă nu doriți ca *.sql să fie create, atunci puteți adăuga stegulețul -t la comanda mysqldump astfel:
mysqldump -u -p -t -T/path/to/directory
Rețineți că, chiar dacă directorul pe care îl specificați nu poate fi scris de serverul MySQL, fișierele *.sql vor fi create în continuare; doar fișierele text nu pot fi create.
Modificarea formatului de ieșire
În mod implicit, mysqldump cu steagul -T va descărca datele în fișiere delimitate de tabulare. Cu toate acestea, este posibil să se schimbe delimitatorul și, de asemenea, să se precizeze că ghilimelele înconjoară valorile câmpurilor.
Pentru a schimba delimitatorul, folosiți steagul --fields-terminated-by=
ca în exemplul următor. În acest exemplu vom arunca datele în valori separate prin virgulă sau CSV:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
Dacă doriți să puneți și ghilimele în jurul fiecărui câmp, atunci folosiți steagul --fields-enclosed-by=
. În exemplul de mai jos, fiecare câmp este înconjurat de ghilimele. Rețineți că trebuie să scăpăm simbolul ghilimelelor de pe linia de comandă cu o bară oblică.
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
Filmul rezultat ar arăta ca în exemplul următor: