Usare mysqldump per salvare i dati in file CSV

, Author

Ieri ho visto l’uso base di mysqldump per il backup dei database MySQL. Oggi vedrò come usare mysqldump per scaricare i dati da un database MySQL in file di testo CSV e delimitati da tabulazione, invece di usare query di inserimento SQL che è il metodo di scarico predefinito.

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

Il flag -u è usato per specificare il nome utente usato per connettersi al server del database MySQL, e si dovrebbe sostituire la parte dell’esempio precedente con il proprio nome utente.

Il flag -p indica che dovrai inserire una password per connetterti al database; ti verrà richiesta una volta che il comando inizierà l’esecuzione.

Il flag -T seguito dal nome della directory è dove MySQL scriverà i suoi file. Puoi avere uno spazio tra -T e l’inizio del nome della directory o nessuno spazio: dipende da te, entrambi funzioneranno. È importante notare che la directory specificata deve essere scrivibile dall’utente che esegue il server MySQL. Se non lo è, otterrai un errore come questo:

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

Se la tua macchina Linux ha SELinux abilitato, allora la directory deve anche essere permessa dalla configurazione SELinux per la scrittura di MySQL.

Files creati da mysqldump

Utilizzando l’esempio precedente, con un database che ha due tabelle chiamate “qualcosa” e “qualcosa_else”, saranno creati quattro file come segue:

  • something.sql – contiene l’SQL per creare la tabella. Per default, include DROP TABLE IF EXISTS `something`; come parte della query
  • qualcosa.txt – i dati dalla tabella “qualcosa” in formato delimitato da tabulazione
  • qualcosa_altra.sql – contiene l’SQL per creare la tabella. Per impostazione predefinita, include DROP TABLE IF EXISTS `something_else`; come parte della query
  • something_else.txt – i dati della tabella “something_else” in formato delimitato da tabulazione

Se non vuoi che i file *.sql, allora puoi aggiungere il flag -t al comando mysqldump come segue:

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

Nota che anche se la directory specificata non può essere scritta dal server MySQL, i file *.sql verranno comunque creati; sono solo i file di testo che non possono essere creati.

Modificare il formato di output

Di default, mysqldump con il flag -T scarica i dati in file delimitati da tabulazione. Tuttavia, è possibile cambiare il delimitatore, e anche specificare che le virgolette circondino i valori dei campi.

Per cambiare il delimitatore, usa il flag --fields-terminated-by= come nel seguente esempio. In questo esempio scaricheremo i dati in valori separati da virgola o CSV:

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

Se vuoi anche mettere le virgolette intorno ad ogni campo, allora usa il flag --fields-enclosed-by=. Nell’esempio qui sotto, ogni campo è circondato da virgolette. Notate che abbiamo bisogno di evitare il simbolo delle virgolette sulla linea di comando con una barra.

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

Il file risultante assomiglierebbe al seguente esempio:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.