Dans un précédent billet où j’expliquais mes déboires avec les grosses bases de données (on y trouvait aussi des conseils pour ne pas s’arracher les cheveux), j’ai expliqué comment importer une base de données MySQL à partir d’un fichier SQL en ligne de commandes grâce à source
ou mysql
. Aujourd’hui, j’ai découvert ce que je cherchais depuis pas mal de temps : exporter une base de données MySQL dans un fichier SQL en ligne de commandes, grâce à mysqldump
. !
Importer un fichier SQL en ligne de commandes
J’ai une table de 3 millions de tuples (très très grosses quoi), que je souhaite importer dans ma base de données. Pour se faire, j’ai un fichier SQL assez volumineux contenant les requêtes d’insertions qui vont bien. Utiliser PhpMyAdmin serait long et il y a des risques que cela ne fonctionne pas si le fichier est trop gros. La solution consiste à utiliser des lignes de commandes, comme ça, pas de risques d’arrêts inopinés (ou presque) et c’est vraiment plus rapide.
Solution 1 : on est déjà connecté
Si on est déjà connecté à SQL et donc qu’on a accès au prompt mysql
, (si on utilise Wamp par exemple, ou si on a fait un connect -u username -p nombdd [-b motdepasse]
ou mysql -u username -p nombdd [-b motdepasse]
selon le système qu’on utilise) il faut utiliser source
.
source cheminVersLeFichier.sql
Cette commande va exécuter les requêtes contenues dans le fichier « cheminVersLeFichier.sql », dans la base de données « nombdd ».
Solution 2 : on n’est pas encore connecté
Si on n’a pas encore accès au prompt mysql
, on peut utiliser directement la commande mysql
en se servant d’un chevron :
mysql -u username -p nombdd [-h localhost] < cheminVersLeFichier.sql
Votre mot de passe vous sera demandé. (s’il n’y en a pas, « Enter » suffira) Cette commande est identique à la précédente. !
Exporter un fichier SQL en ligne de commandes
Imaginons que j’ai réussi l’import de tout à l’heure et que j’ai mes 3 millions de tuples dans ma base de données. J’ai effectué plein de modifications dessus, et désormais je souhaite copier ma table vers une autre BDD. Je sais que je pourrai l’importer facilement à partir d’un fichier SQL, mais il faut générer ce fichier. Avec PhpMyAdmin ça sera long, mais ça devrait fonctionner, (et il y a plein d’options possible) mais, vous vous en doutez, on peut faire tout ça en ligne de commandes.
Solution 1 : on est déjà connecté
Si on est déjà connecté à SQL et donc qu’on a accès au prompt mysql
, j’imagine qu’il y a un moyen de le faire (de la même manière qu’avec source
), mais je n’ai pas encore trouvé. Cela n’a pas tellement d’importance puisqu’on a la solution 2. (que je préfère d’ailleurs)
Solution 2 : on n’est pas encore connecté
Si on n’a pas encore accès au prompt mysql
, on peut utiliser la commande mysqldump
en se servant d’un chevron. C’est une commande similaire à mysql
(on va pouvoir se connecter à une base de données de la même manière qu’avec mysql
), mais avec des options en plus pour paramétrer l’export. Par défaut, elle envoie les requêtes pour créer la table désirée sur la sortie standard (l’écran), mais avec un chevron, on peut rediriger vers un fichier.
mysqldump -u username -p nombdd [table1 table2] > cheminVersLeFichier.sql
Votre mot de passe vous sera demandé. (s’il n’y en a pas, « Enter » suffira) cheminVersLeFichier.sql contiendra différentes requêtes, dont la requête de création des tables, et un requête INSERT par insertion. On peut ajouter l’option -c
(insertions complètes), qui précisera le nom des colonnes ce qui est relativement plus sûr. Il est aussi conseillé d’utiliser l’option -e
(insertions étendues), qui créera une requête INSERT pour 50 insertions par exemple. Cela accélère considérablement la durée d’un import. Naturellement, il ne faut pas faire trop d’insertions en une seule fois, sous risque de faire pleurer votre serveur. (je crois que par défaut, MySQL effectue 50000 insertions d’un seul coup avec l’option -e
, à vérifier) La requête devient donc :
mysqldump -ce -u username -p nombdd [table1 table2] > cheminVersLeFichier.sql
Comme vous vous en doutez, la doc MySQL nous explique toutes les options possibles, ainsi que quelques subtilités d’utilisation. Et voilà ! Ces petites lignes de commandes m’ont bien servi ces derniers jours, cela fait plusieurs fois que je me retrouve sans PhpMyAdmin, et je me débrouille de mieux en mieux avec juste un petit terminal.