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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.glassworks.tech/sgbdr/setup-initial/020-import-des-donnees.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
