> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/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"](/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"](/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"](/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>
    #### Préparation

    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>
    #### Créer une sauvegarde de base

    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>
    #### Ajoutez plus de données

    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>
    #### Effectuer une sauvegarde incrémentielle

    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>
    #### Restaurer depuis la sauvegarde incrémentielle

    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>
    #### Vérifiez le nombre de lignes

    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>
    #### Vérifiez le contenu

    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>
