> For the complete documentation index, see [llms.txt](https://docs.glassworks.tech/sgbdr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.glassworks.tech/sgbdr/setup-initial/020-import-des-donnees.md).

# 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.

{% hint style="info" %}
Pour les instructions suivantes, je suppose que vous avez déjà installé un SGBDR avec Docker, en suivant [les instructions ici](/sgbdr/setup-initial/010-mariadb-via-docker-en-dev.md), et que le service Docker s'appelle `mon_sgbdr`.
{% endhint %}

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

```sh
mycli -h mon_sgbdr -u root
```

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

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

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

```sql
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 :

```sql
show databases;
```

## Supprimer une base de données

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

```sql
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](https://dev.glassworks.tech:18081/courses/sgbdr/sgbdr-supports/-/raw/main/src/samples/saas/saas_dump.sql)

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 :

```sh
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.

```sh
# 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` :

```sh
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 :

```sh
# 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 :

```sh
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 :

{% code title="docker-compose.yml" lineNumbers="true" %}

```yaml
version: '3.9'

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

{% endcode %}

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 :

```sh
docker exec -it [CONTAINER_ID] /bin/bash
```

Ensuite, dans le Container :

```sh
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.
