> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Vue d’ensemble de la sauvegarde et de la restauration de ClickHouse

# SAUVEGARDE / RESTAURATION vers ou depuis un point de terminaison S3

Cet article traite de la sauvegarde vers un bucket S3 ou de la restauration depuis celui-ci
via un point de terminaison S3.

<div id="syntax">
  ## Syntaxe
</div>

```sql theme={null}
-- core commands
BACKUP | RESTORE 
--- what to backup/restore (or exclude)
TABLE [db.]table_name           [AS [db.]table_name_in_backup] |
DICTIONARY [db.]dictionary_name [AS [db.]name_in_backup] |
DATABASE database_name          [AS database_name_in_backup] |
TEMPORARY TABLE table_name      [AS table_name_in_backup] |
VIEW view_name                  [AS view_name_in_backup] |
[EXCEPT TABLES ...] |
ALL [EXCEPT {TABLES|DATABASES}...] } [,...]
--- 
[ON CLUSTER 'cluster_name']
--- where to backup or restore to or from
TO|FROM 
File('<path>/<filename>') | 
Disk('<disk_name>', '<path>/') | 
S3('<S3 endpoint>/<path>', '<Access key ID>', '<Secret access key>', '<extra_credentials>') |
AzureBlobStorage('<connection string>/<url>', '<container>', '<path>', '<account name>', '<account key>')
--- additional settings
[SETTINGS ...]
[ASYNC]
```

**Consultez ["résumé des commandes"](/docs/fr/concepts/features/backup-restore/overview#command-summary) pour obtenir plus de détails
sur chaque commande.**

<div id="usage-examples">
  ## Exemple d’utilisation
</div>

<div id="incremental-backup-to-an-s3-endpoint">
  ### Sauvegarde incrémentielle vers un point de terminaison S3
</div>

Dans cet exemple, nous allons créer une sauvegarde vers un point de terminaison S3, puis effectuer une restauration à partir de celle-ci.

<Note>
  Pour une explication des différences entre une sauvegarde complète et une sauvegarde incrémentielle,
  consultez ["Types de sauvegarde"](/docs/fr/concepts/features/backup-restore/overview#backup-types)
</Note>

Vous aurez besoin des informations suivantes pour utiliser cette méthode :

| Paramètre                  | Exemple                                                      |
| -------------------------- | ------------------------------------------------------------ |
| Un point de terminaison S3 | `https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/` |
| ID de la clé d’accès       | `BKIOZLE2VYN3VXXTP9RC`                                       |
| Clé d’accès secrète        | `40bwYnbqN7xU8bVePaUCh3+YEyGXu8UOMV9ANpwL`                   |

<Tip>
  La création d’un bucket S3 est expliquée dans la section ["utiliser le stockage objet S3 comme disque ClickHouse"](/docs/fr/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse#configuring-s3-for-clickhouse-use)
</Tip>

La destination d’une sauvegarde est spécifiée comme suit :

```sql theme={null}
S3('<s3 endpoint>/<directory>', '<access key id>', '<secret access key>', '<extra_credentials>')
```

<br />

<Steps>
  <Step title="Préparation" id="create-a-table">
    Créez la base de données et la table suivantes, puis insérez-y des données aléatoires :

    ```sql theme={null}
    CREATE DATABASE IF NOT EXISTS test_db;
    CREATE TABLE test_db.test_table
    (
        `key` Int,
        `value` String,
        `array` Array(String)
    )
    ENGINE = MergeTree
    ORDER BY tuple()
    ```

    ```sql theme={null}
    INSERT INTO test_db.test_table SELECT *
    FROM generateRandom('key Int, value String, array Array(String)')
    LIMIT 1000
    ```
  </Step>

  <Step title="Créer une sauvegarde de base" id="create-a-base-initial-backup">
    Les sauvegardes incrémentielles nécessitent une sauvegarde de *base* comme point de départ. Le premier paramètre de
    la destination S3 est l’endpoint S3, suivi du répertoire dans le bucket
    à utiliser pour cette sauvegarde. Dans cet exemple, le répertoire s’appelle `my_backup`.

    Exécutez la commande suivante pour créer la sauvegarde de base :

    ```sql theme={null}
    BACKUP TABLE test_db.test_table TO S3(
    'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
    '<access key id>',
    '<secret access key>'
    )
    ```

    ```response theme={null}
    ┌─id───────────────────────────────────┬─status─────────┐
    │ de442b75-a66c-4a3c-a193-f76f278c70f3 │ BACKUP_CREATED │
    └──────────────────────────────────────┴────────────────┘
    ```
  </Step>

  <Step title="Ajoutez plus de données" id="add-more-data">
    Les sauvegardes incrémentielles ne contiennent que les différences entre la sauvegarde de base et
    le contenu actuel de la table sauvegardée. Ajoutez plus de données avant d'effectuer la
    sauvegarde incrémentielle :

    ```sql theme={null}
    INSERT INTO test_db.test_table SELECT *
    FROM generateRandom('key Int, value String, array Array(String)')
    LIMIT 100
    ```
  </Step>

  <Step title="Effectuer une sauvegarde incrémentielle" id="take-an-incremental-backup">
    Cette commande de sauvegarde est similaire à celle de la sauvegarde de base, mais elle ajoute `SETTINGS base_backup` ainsi que l’emplacement de la sauvegarde de base. Notez que la destination de la sauvegarde incrémentielle n'est pas le même répertoire que celui de la sauvegarde de base : c'est le même endpoint, mais avec un répertoire cible différent dans le bucket. La sauvegarde de base se trouve dans `my_backup` et la sauvegarde incrémentielle sera écrite dans `my_incremental` :

    ```sql theme={null}
    BACKUP TABLE test_db.test_table TO S3(
    'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
    '<access key id>',
    '<secret access key>'
    )
    SETTINGS base_backup = S3(
    'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/base_backup',
    '<access key id>',
    '<secret access key>'
    )
    ```

    ```response theme={null}
    ┌─id───────────────────────────────────┬─status─────────┐
    │ f6cd3900-850f-41c9-94f1-0c4df33ea528 │ BACKUP_CREATED │
    └──────────────────────────────────────┴────────────────┘
    ```
  </Step>

  <Step title="Restaurer depuis la sauvegarde incrémentielle" id="restore-from-the-incremental-backup">
    Cette commande restaure la sauvegarde incrémentielle dans une nouvelle table, `test_table_restored`.
    Notez que lors de la restauration d'une sauvegarde incrémentielle, la sauvegarde de base est également incluse.
    Indiquez uniquement la **sauvegarde incrémentielle** lors de la restauration :

    ```sql theme={null}
    RESTORE TABLE data AS test_db.test_table_restored FROM S3(
    'https://backup-ch-docs.s3.us-east-1.amazonaws.com/backups/incremental_backup',
    '<access key id>',
    '<secret access key>'
    )
    ```

    ```response theme={null}
    ┌─id───────────────────────────────────┬─status───┐
    │ ff0c8c39-7dff-4324-a241-000796de11ca │ RESTORED │
    └──────────────────────────────────────┴──────────┘
    ```
  </Step>

  <Step title="Vérifiez le nombre de lignes" id="verify-the-count">
    La table d’origine `data` a fait l’objet de deux insertions : l’une de 1 000 lignes et l’autre de 100 lignes, soit un total de 1 100.
    Vérifiez que la table restaurée contient bien 1 100 lignes :

    ```sql theme={null}
    SELECT count()
    FROM test_db.test_table_restored
    ```

    ```response theme={null}
    ┌─count()─┐
    │    1100 │
    └─────────┘
    ```
  </Step>

  <Step title="Vérifiez le contenu" id="verify-the-content">
    Cette commande compare le contenu de la table d’origine, `test_table`, avec celui de la table restaurée `test_table_restored` :

    ```sql theme={null}
    SELECT throwIf((
       SELECT groupArray(tuple(*))
       FROM test_db.test_table
       ) != (
       SELECT groupArray(tuple(*))
       FROM test_db.test_table_restored
    ), 'Data does not match after BACKUP/RESTORE')
    ```
  </Step>
</Steps>
