Hier, j’ai examiné l’utilisation de base de mysqldump pour sauvegarder des bases de données MySQL. Aujourd’hui, je vais voir comment utiliser mysqldump pour déverser les données d’une base de données MySQL dans des fichiers texte CSV et délimités par des tabulations, au lieu d’utiliser des requêtes d’insertion SQL qui est la méthode de déversement par défaut.
mysqldump -u -p -T/path/to/directory
Le drapeau -u est utilisé pour spécifier le nom d’utilisateur utilisé pour se connecter au serveur de base de données MySQL, et vous substitueriez la partie de l’exemple ci-dessus avec votre nom d’utilisateur.
Le drapeau -p indique que vous allez entrer un mot de passe pour vous connecter à la base de données ; il vous sera demandé une fois que la commande commencera à s’exécuter.
Le drapeau -T suivi du nom du répertoire est l’endroit où MySQL écrira ses fichiers. Vous pouvez avoir un espace entre le -T et le début du nom du répertoire ou aucun espace : c’est à vous de voir car l’un ou l’autre fonctionnera. Il est important de noter que le répertoire que vous spécifiez doit être accessible en écriture par l’utilisateur sous lequel le serveur MySQL fonctionne. S’il ne l’est pas, vous obtiendrez une erreur comme celle-ci :
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Si votre machine Linux a SELinux activé, alors le répertoire doit également être autorisé par la configuration SELinux pour que MySQL puisse y écrire.
Fichiers créés par mysqldump
En utilisant l’exemple ci-dessus, avec une base de données qui a deux tables appelées « quelque chose » et « quelque chose_autre », quatre fichiers seront créés comme suit :
- quelque chose.sql – contient le SQL pour créer la table. Par défaut, il inclut
DROP TABLE IF EXISTS `something`;
comme partie de la requête - something.txt – les données de la table « something » au format délimité par des tabulations
- something_else.sql – contient le SQL pour créer la table. Par défaut, il inclut
DROP TABLE IF EXISTS `something_else`;
comme partie de la requête - something_else.txt – les données de la table « something_else » au format délimité par des tabulations
Si vous ne voulez pas que les fichiers *.sql soient créés, alors vous pouvez ajouter l’indicateur -t à la commande mysqldump comme suit :
mysqldump -u -p -t -T/path/to/directory
Notez que même si le répertoire que vous spécifiez ne peut pas être écrit par le serveur MySQL, les fichiers *.sql seront quand même créés ; ce sont seulement les fichiers texte qui ne peuvent pas être créés.
Changer le format de sortie
Par défaut, mysqldump avec l’option -T déversera les données dans des fichiers délimités par des tabulations. Cependant, il est possible de changer le délimiteur, et aussi de spécifier que les guillemets entourent les valeurs des champs.
Pour changer le délimiteur, utilisez le drapeau --fields-terminated-by=
comme dans l’exemple suivant. Dans cet exemple, nous allons vider les données dans des valeurs séparées par des virgules ou CSV:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
Si vous vouliez également mettre des guillemets autour de chaque champ, alors utilisez le drapeau --fields-enclosed-by=
. Dans l’exemple ci-dessous, chaque champ est entouré de guillemets. Notez que nous devons échapper au symbole de citation sur la ligne de commande avec une barre oblique.
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
Le fichier résultant ressemblerait à l’exemple suivant:
.