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: