Import des données

Il serait pratique de pouvoir importer des données existantes (provenant des sauvegardes d'une base existante par exemple).

Il faut d'abord créer une database dans notre SGBDR, et ensuite importer des données.

Créer la "database"

Avant d'importer les données, il faut d'abord se connecter à votre SGBDR en tant que root, et créer la base de données.

Pour les instructions suivantes, je suppose que vous avez déjà installé un SGBDR avec Docker, en suivant les instructions ici, et que le service Docker s'appelle mon_sgbdr.

Si on utilise le DevContainer fourni par ces supports, on peut se connecter directement avec mycli :

mycli -h mon_sgbdr -u root

Sinon, on peut créer une connexion avec une séance interactive Docker :

docker exec -it [CONTAINER_ID] mysql -u root -p

Nous allons ensuite créer la base de données :

create database saas;

Afficher les bases de données

À tout moment, on peut afficher la liste de base de données présentes dans le SGBDR :

show databases;

Supprimer une base de données

À tout moment, on peut supprimer une base de données présente dans le SGBDR :

drop database saas;

Importer des données d'une sauvegarde

Je vous ai mis à disposition une sauvegarde d'une base de données (anonymisée), sur ce lien :

Base d'un service SaaS

Cette sauvegarde est issue de la procédure mysqldump qui crée juste la liste de commandes SQL nécessaires pour recréer la base de données.

Il faut donc exécuter les commandes dans ce fichier sur notre base de données saas.

En revanche, on ne peut pas le faire dans l'interprète mycli ou mysql. En effet, il faut plutôt lire les contenus du fichier et les rediriger vers l'interprète (en utilisant une redirection UNIX).

Donc, si vous êtes encore connecté à mycli ou mysql, quittez.

Nous allons ouvrir un interprète bash sur notre Container MariaDB avec docker. Dans l'invite de commandes de votre ordinateur :

docker exec -it [CONTAINER_ID] /bin/bash

Ensuite, dans BASH de notre container, nous allons installer wget temporairement, afin de télécharger le fichier dump.

# Installer wget
apt update
apt install wget

# Télécharger le dump dans le dossier /tmp
cd /tmp
wget https://dev.glassworks.tech:18081/courses/sgbdr/sgbdr-supports/-/raw/main/src/samples/saas/saas_dump.sql

On pourrait maintenant importer les données en utilisant la commande mysql :

mysql -u root -p saas < saas_dump.sql

Ici, on se connecte au SGBDR local (dans le container) en tant que l'utilisateur root, en précisant d'utiliser la database saas. On redirige les contenus du fichier saas_dump.sql vers l'interprète.

Après, on peut faire le ménage de notre container :

# Supprimer le sauvegarde
rm saas_dump.sql

# Désinstaller wget
apt remove wget

Autres stratégies d'import

Il y a plusieurs façons de rediriger les données d'un dump vers votre SGBDR.

Via docker exec (Linux / MacOS)

Si vous avez déjà téléchargé les données en local, vous pouvez envoyer directement les données avec docker exec :

docker exec -i [CONTAINER_ID] mysql -u -pPASSWORD saas < saas_dump.sql

À noter:

  • Remplacez PASSWORD par le mot de passe de root. Il doit être collé au paramètre -p.

  • On utilise l'option -i (et pas -it), car les instructions viennent d'un fichier, pas du clavier (tty)

Monter un volume

Vous pouvez aussi modifier votre docker-compose.yml, et monter le dossier qui contient le fichier saas_dump.sql. Imaginons, vous avez téléchargé au préalable le dump dans votre sous-dossier dump. On peut donc monter de dossier sur le chemin /tmp/dump dans le Container :

docker-compose.yml
version: '3.9'

services:
  mon_sgbdr:
    ...
    volumes:
      ...
      - ./dump:/tmp/dump
    
    ...

Ensuite, il faut quand même ouvrir un interprète /bin/bash et exécuter la commande mysql comme dans les étapes précédentes :

docker exec -it [CONTAINER_ID] /bin/bash

Ensuite, dans le Container :

cd /tmp/dump
mysql -u root -p saas < saas_dump.sql

Avec phpMyAdmin

Vous pouvez essayer d'importer les données avec phpMyAdmin. Attention, par contre, à l'encodage !

C'est moins choix le moins préféré, car il suppose qu'on a le droit de uploader un fichier aussi grand via HTTP sur ce serveur. Souvent, on constate un timeout avant de réussir.

Dernière mise à jour