> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-postgresql-tls-support.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Migration entre un ClickHouse autogéré et ClickHouse Cloud avec remoteSecure

> Page expliquant comment migrer entre un ClickHouse autogéré et ClickHouse Cloud

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/LZf1zoV79myFHYZi/images/integrations/migration/self-managed-01.webp?fit=max&auto=format&n=LZf1zoV79myFHYZi&q=85&s=46b5ecba89b1066753efeb78507016ea" size="lg" alt="Migration de ClickHouse autogéré" width="2048" height="936" data-path="images/integrations/migration/self-managed-01.webp" />

Ce guide explique comment migrer d’un serveur ClickHouse autogéré vers ClickHouse Cloud, ainsi que comment migrer entre des services ClickHouse Cloud.
La fonction [`remoteSecure`](/fr/reference/functions/table-functions/remote) est utilisée dans les requêtes `SELECT` et `INSERT` afin d’accéder à des serveurs ClickHouse distants, ce qui rend la migration des tables aussi simple que de rédiger une requête `INSERT INTO` avec un `SELECT` imbriqué.

<div id="migrating-from-self-managed-clickhouse-to-clickhouse-cloud">
  ## Migration de ClickHouse autogéré vers ClickHouse Cloud
</div>

<Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/LZf1zoV79myFHYZi/images/integrations/migration/self-managed-02.webp?fit=max&auto=format&n=LZf1zoV79myFHYZi&q=85&s=f398f6a46086ea3245d706f4871e9847" size="lg" alt="Migration de ClickHouse autogéré" width="2048" height="936" data-path="images/integrations/migration/self-managed-02.webp" />

Que votre table source soit partitionnée et/ou répliquée, dans ClickHouse Cloud il vous suffit de créer une table de destination (vous pouvez omettre le paramètre Engine pour cette table, `SharedMergeTree` sera automatiquement sélectionné comme moteur de table),
et ClickHouse Cloud gérera automatiquement la mise à l’échelle verticale et horizontale.
Vous n’avez pas à vous préoccuper du partitionnement ni de la réplication de la table.

Dans cet exemple, le serveur ClickHouse autogéré est la *source* et le service ClickHouse Cloud est la *destination*.

<div id="overview">
  ### Vue d’ensemble
</div>

Le processus est le suivant :

1. Ajouter un utilisateur en lecture seule au service source
2. Dupliquer la structure de la table source sur le service de destination
3. Récupérer les données de la source vers la destination, ou les envoyer depuis la source, selon la disponibilité réseau de la source
4. Retirer le serveur source de la liste d’accès IP de la destination (le cas échéant)
5. Supprimer l’utilisateur en lecture seule du service source

<div id="migration-of-tables-from-one-system-to-another">
  ### Migration de tables d’un système à un autre :
</div>

Cet exemple montre comment migrer une table d’un serveur ClickHouse autogéré vers ClickHouse Cloud.

<Info>
  **Compatibilité**

  Si vous constatez des différences de comportement entre votre déploiement ClickHouse autohébergé et votre service ClickHouse Cloud,
  cela peut être lié au [paramètre de compatibilité](/fr/reference/settings/session-settings#compatibility).
  Dans Cloud, la compatibilité est définie lors de la création d’un service et ne change pas au niveau du service afin de garantir un comportement cohérent aux clients, même lors des mises à niveau du service.
  Si vous souhaitez modifier la compatibilité, vous pouvez en faire la demande via le [support](https://clickhouse.com/support/program).
</Info>

<div id="on-the-source-clickhouse-system-the-system-that-currently-hosts-the-data">
  ### Sur le système ClickHouse source (celui qui héberge actuellement les données)
</div>

* Ajoutez un utilisateur en lecture seule autorisé à lire la table source (`db.table` dans cet exemple)

```sql theme={null}
CREATE USER exporter
IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
SETTINGS readonly = 1;
```

```sql theme={null}
GRANT SELECT ON db.table TO exporter;
```

* Copiez la définition de la table

```sql theme={null}
SELECT create_table_query
FROM system.tables
WHERE database = 'db' AND table = 'table'
```

<div id="on-the-destination-clickhouse-cloud-system">
  ### Sur le système de destination ClickHouse Cloud :
</div>

* Créez la base de données de destination :

```sql theme={null}
CREATE DATABASE db
```

* En utilisant l’instruction CREATE TABLE de la source, créez la destination.

<Tip>
  Remplacez l’ENGINE par ReplicatedMergeTree, sans aucun paramètre, lorsque vous exécutez l’instruction CREATE. ClickHouse Cloud réplique toujours les tables et fournit les paramètres appropriés. Conservez toutefois les clauses `ORDER BY`, `PRIMARY KEY`, `PARTITION BY`, `SAMPLE BY`, `TTL` et `SETTINGS`.
</Tip>

```sql theme={null}
CREATE TABLE db.table ...
```

* Utilisez la fonction `remoteSecure` pour récupérer les données depuis la source auto-gérée

<Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/LZf1zoV79myFHYZi/images/integrations/migration/self-managed-03.webp?fit=max&auto=format&n=LZf1zoV79myFHYZi&q=85&s=9f943061212924ff85b9353fe0861c93" size="lg" alt="Migration d’un ClickHouse auto-géré" width="2048" height="936" data-path="images/integrations/migration/self-managed-03.webp" />

```sql theme={null}
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
```

<Note>
  Si le système source n'est pas accessible depuis des réseaux externes, vous pouvez pousser les données au lieu de les récupérer, car la fonction `remoteSecure` fonctionne aussi bien pour les requêtes de sélection que d’insertion. Consultez l’option suivante.
</Note>

* Utilisez la fonction `remoteSecure` pour pousser les données vers le service ClickHouse Cloud

<Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/LZf1zoV79myFHYZi/images/integrations/migration/self-managed-04.webp?fit=max&auto=format&n=LZf1zoV79myFHYZi&q=85&s=632649a5b36950fb779172ab04843348" size="lg" alt="Migration d’un ClickHouse autogéré" width="2048" height="936" data-path="images/integrations/migration/self-managed-04.webp" />

<Tip>
  **Ajoutez le système distant à la liste d’accès IP de votre service ClickHouse Cloud**

  Pour que la fonction `remoteSecure` puisse se connecter à votre service ClickHouse Cloud, l’adresse IP du système distant doit être autorisée dans la liste d’accès IP. Développez **Manage your liste d’accès IP** sous cet encadré pour plus d’informations.
</Tip>

<Accordion title="Gérer votre IP Access List">
  Dans la liste de vos services ClickHouse Cloud, choisissez le service avec lequel vous allez travailler, puis ouvrez **Settings**. Si l’IP Access List ne contient pas l’adresse IP ou la plage d’adresses du système distant qui doit se connecter à votre service ClickHouse Cloud, vous pouvez résoudre le problème avec **Add IPs** :

  <Image size="md" img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/cTIaEq6k6KYDgBI1/images/_snippets/ip-allow-list-check-list.webp?fit=max&auto=format&n=cTIaEq6k6KYDgBI1&q=85&s=34efe271e66a3f2ead15332d4b095db7" alt="Vérifiez si le service autorise le trafic provenant de votre adresse IP dans l’IP Access List" border width="3840" height="2042" data-path="images/_snippets/ip-allow-list-check-list.webp" />

  Ajoutez l’adresse IP individuelle ou la plage d’adresses devant se connecter à votre service ClickHouse Cloud. Modifiez le formulaire selon vos besoins, puis cliquez sur **Save**.

  <Image size="md" img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/cTIaEq6k6KYDgBI1/images/_snippets/ip-allow-list-add-current-ip.webp?fit=max&auto=format&n=cTIaEq6k6KYDgBI1&q=85&s=0cea4d2a226a4de40b5fb4f7024d1d4d" alt="Ajoutez votre adresse IP actuelle à l’IP Access List dans ClickHouse Cloud" border width="1188" height="796" data-path="images/_snippets/ip-allow-list-add-current-ip.webp" />
</Accordion>

```sql theme={null}
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table',
'default', 'PASS') SELECT * FROM db.table
```

<div id="migrating-between-clickhouse-cloud-services">
  ## Migration entre services ClickHouse Cloud
</div>

<Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/LZf1zoV79myFHYZi/images/integrations/migration/self-managed-05.webp?fit=max&auto=format&n=LZf1zoV79myFHYZi&q=85&s=4a1a14509c0060a3bed8fe02088fbc42" size="lg" alt="Migration de ClickHouse autogéré" width="2048" height="356" data-path="images/integrations/migration/self-managed-05.webp" />

Voici quelques cas d’usage de migration de données entre services ClickHouse Cloud :

* Migrer des données depuis une sauvegarde restaurée
* Copier des données d’un service de développement vers un service de staging (ou d’un service de staging vers la production)

Dans cet exemple, il y a deux services ClickHouse Cloud, désignés par *source* et *destination*. Les données seront récupérées depuis la source vers la destination. Même s’il est également possible d’utiliser un envoi direct, la récupération est présentée ici, car elle repose sur un utilisateur en lecture seule.

<Image img="https://mintcdn.com/private-7c7dfe99-postgresql-tls-support/LZf1zoV79myFHYZi/images/integrations/migration/self-managed-06.webp?fit=max&auto=format&n=LZf1zoV79myFHYZi&q=85&s=b500081adb98232bf25e2e7f28f3c40d" size="lg" alt="Migration de ClickHouse autogéré" width="2048" height="356" data-path="images/integrations/migration/self-managed-06.webp" />

La migration se déroule en რამდენიმე étapes :

1. Identifier un service ClickHouse Cloud comme *source* et l’autre comme *destination*
2. Ajouter un utilisateur en lecture seule au service source
3. Dupliquer la structure de la table source sur le service de destination
4. Autoriser temporairement l’accès IP au service source
5. Copier les données de la source vers la destination
6. Rétablir la liste d’accès IP sur la destination
7. Supprimer l’utilisateur en lecture seule du service source

<div id="add-a-read-only-user-to-the-source-service">
  #### Ajouter un utilisateur en lecture seule au service source
</div>

* Ajoutez un utilisateur en lecture seule autorisé à lire la table source (`db.table` dans cet exemple)

  ```sql theme={null}
  CREATE USER exporter
  IDENTIFIED WITH SHA256_PASSWORD BY 'password-here'
  SETTINGS readonly = 1;
  ```

  ```sql theme={null}
  GRANT SELECT ON db.table TO exporter;
  ```

* Copiez la définition de la table
  ```sql theme={null}
  select create_table_query
  from system.tables
  where database = 'db' and table = 'table'
  ```

<div id="duplicate-the-table-structure-on-the-destination-service">
  #### Dupliquez la structure de la table sur le service de destination
</div>

Sur le service de destination, créez la base de données si elle n'existe pas déjà :

* Créez la base de données de destination :
  ```sql theme={null}
  CREATE DATABASE db
  ```

* À l'aide de l'instruction CREATE TABLE de la source, créez la table de destination.

  Sur le service de destination, créez la table à partir de la sortie de `select create_table_query...` sur la source :

  ```sql theme={null}
  CREATE TABLE db.table ...
  ```

<div id="allow-remote-access-to-the-source-service">
  #### Autoriser l’accès à distance au service source
</div>

Pour extraire les données de la source vers la destination, le service source doit autoriser les connexions. Désactivez temporairement la fonctionnalité « liste d’accès IP » sur le service source.

<Tip>
  Si vous comptez continuer à utiliser le service source ClickHouse Cloud, exportez la liste d’accès IP existante vers un fichier JSON avant d’autoriser l’accès depuis n’importe où ; vous pourrez ainsi réimporter la liste d’accès une fois la migration des données terminée.
</Tip>

Modifiez la liste d’autorisation et autorisez temporairement l’accès depuis **Anywhere**. Consultez la documentation [liste d’accès IP](/fr/products/cloud/guides/security/connectivity/setting-ip-filters) pour plus de détails.

<div id="copy-the-data-from-source-to-destination">
  #### Copiez les données de la source vers la destination
</div>

* Utilisez la fonction `remoteSecure` pour extraire les données du service ClickHouse Cloud source.
  Connectez-vous à la destination. Exécutez cette commande sur le service ClickHouse Cloud de destination :

  ```sql theme={null}
  INSERT INTO db.table SELECT * FROM
  remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
  ```

* Vérifiez les données sur le service de destination

<div id="re-establish-the-ip-access-list-on-the-source">
  #### Rétablir la liste d’accès IP sur la source
</div>

Si vous avez exporté la liste d’accès précédemment, vous pouvez la réimporter à l’aide de **Share** ; sinon, rajoutez vos adresses à la liste d’accès.

<div id="remove-the-read-only-exporter-user">
  #### Supprimer l’utilisateur `exporter` en lecture seule
</div>

```sql theme={null}
DROP USER exporter
```

* Modifiez la liste d’accès IP du service afin d’en limiter l’accès
