Image Principale

Import/Export de fichiers SQL


Dans ce très court article, nous verrons quelques commandes utiles pour importer ou exporter ses bases de données MySQL en utilisant des fichiers .sql

Contact Person Mathieu Marteau
il y a 8 mois

Pour suivre cet article, assurez-vous d'avoir MySQL installé sur votre ordinateur. Pour vérifier, vous pouvez taper mysql --version dans votre terminal. Cela devrait vous sortir quelque chose du style:

mysql  Ver 15.1 Distrib 10.1.21-MariaDB, for Linux (x86_64) using readline 5.1

Une fois que c'est fait, vous aurez besoin d'une base avec laquelle vous souhaitez travailler. Pour cet article, nous travaillerons avec deux bases:

  • La base MySQL de mon blog hébergée chez OVH, nous la nommerons martar_live
  • Une base locale que nous nommerons martar_dev

Commençons donc par rappeler comment se connecter à MySQL à distance, en ligne de commande.

Mon serveur MySQL est installé sur le même serveur que mon serveur Web, et il n'est censé être accessible que en local. Pour pouvoir y accéder à distance, je suis obligé de créer un tunnel SSH

Pour cela, il vous faudra lancer la commande suivante:

$ ssh -f root@51.254.132.166 -L 3307:127.0.0.1:3306 -N

51.254.132.166 est l'adresse IP de mon serveur, et je veux que le port 3307 de ma machine redirige vers le port 3306 de ma machine distante. Ainsi, je pourrais me connecter directement en lançant la commande:

$ mysql -h 127.0.0.1 -P 3307 -uroot -p

MySQL me demandera ensuite mon mot de passe, et je pourrais accéder à la ligne de commande MySQL.

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 26173
Server version: 5.5.47-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| martar             |
| mysql              |
| performance_schema |
+--------------------+

Pour les gens qui ont juste une configuration classique, la commande à lancer est:

mysql -h votre_hote_mysql -u utilisateur -p

De la même façon, on vous demandera le mot de passe ici pour ne pas qu'il reste enregistré dans l'historique de vos commandes.

Export avec mysqldump

Commençons donc par la commande permettant d'effectuer un export de notre base de données:

mysqldump -h 127.0.0.1 -P 3307 -uroot -p martar > ~/Downloads/martar.sql

Cette simple commande exportera la base martar pour la placer dans le fichier ~/Downloads/martar.sql

import avec mysql

Je vais réimporter ma base sur mon serveur local. Pour cela, je vais d'abord créer la base:

$ mysql -uroot 

MariaDB [(none)]> create database martar_dev;
Query OK, 1 row affected (0.00 sec)

Puis sortir de la commande MySQL pour finalement lancer la commande:

mysql -uroot martar_dev < ~/Downloads/martar.sql

Et ma base est bien importée:

MariaDB [martar_dev]> select title,slug from articles order by created_at desc limit 0,1;
+-------------------------------+-----------------------------------------------+
| title                         | slug                                          |
+-------------------------------+-----------------------------------------------+
| Import/Export de fichiers SQL | importer-un-fichier-sql-en-ligne-de-commandes |
+-------------------------------+-----------------------------------------------+
1 row in set (0.00 sec)

Import/Export de tables

Parfois, il n'est pas nécessaire d'exporter ou d'importer toute une base de données et il n'est nécessaire d'effectuer l'opération que sur une seule table. Prenons l'exemple de ma table articles. Si je souhaite l'exporter, je devrais taper la commande suivante:

mysqldump -uroot martar articles > ~/Downloads/martar.articles.sql

Cela aura pour effet de générer un fichier qui contiendra les lignes suivantes au début:

DROP TABLE IF EXISTS `articles`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `articles` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `content` text COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `published` tinyint(1) NOT NULL,
  `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `image_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `articles_slug_unique` (`slug`),
  KEY `articles_user_id_foreign` (`user_id`),
  CONSTRAINT `articles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

Comme vous le voyez, ce fichier SQL se chargera de vider la table avant de réimporter le fichier si celle-ci existe déjà. Assurez-vous donc de faire des sauvegardes des données si vous le souhaitez.

Pour réimporter le fichier, il n'y a plus qu'à lancer la commande classique:

mysql -uroot martar_dev < ~/Downloads/martar.articles.sql

Comme le fichier .sql contient les informations de la table que vous avez exporté, il n'y aura pas besoin de préciser lors de l'import dans quelle table on souhaite effectuer l'import.