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

# Migrando entre ClickHouse autogerenciado e ClickHouse Cloud usando remoteSecure

> Página que descreve como migrar entre ClickHouse autogerenciado e 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/B2SPNiDHMxYV1gTC/images/integrations/migration/self-managed-01.webp?fit=max&auto=format&n=B2SPNiDHMxYV1gTC&q=85&s=8007ed5959028547503a7811ed0d3084" size="lg" alt="Migrando ClickHouse autogerenciado" width="2048" height="936" data-path="images/integrations/migration/self-managed-01.webp" />

Este guia mostra como migrar de um servidor ClickHouse autogerenciado para o ClickHouse Cloud, além de como migrar entre serviços do ClickHouse Cloud.
A função [`remoteSecure`](/docs/pt-BR/reference/functions/table-functions/remote) é usada em consultas `SELECT` e `INSERT` para permitir o acesso a servidores remotos do ClickHouse, o que torna a migração de tabelas tão simples quanto escrever uma consulta `INSERT INTO` com um `SELECT` embutido.

<div id="migrating-from-self-managed-clickhouse-to-clickhouse-cloud">
  ## Migrando de ClickHouse autogerenciado para ClickHouse Cloud
</div>

<Image img="https://mintcdn.com/private-7c7dfe99/B2SPNiDHMxYV1gTC/images/integrations/migration/self-managed-02.webp?fit=max&auto=format&n=B2SPNiDHMxYV1gTC&q=85&s=177a7c5d307386ed999905995a255130" size="lg" alt="Migrando ClickHouse autogerenciado" width="2048" height="936" data-path="images/integrations/migration/self-managed-02.webp" />

Independentemente de a tabela de origem estar em shards e/ou ser replicada, no ClickHouse Cloud você só precisa criar uma tabela de destino (pode omitir o parâmetro `Engine` dessa tabela; `SharedMergeTree` será selecionado automaticamente como o mecanismo da tabela),
e o ClickHouse Cloud cuidará automaticamente do escalonamento vertical e horizontal.
Você não precisa se preocupar com como replicar e dividir a tabela em shards.

Neste exemplo, o servidor ClickHouse autogerenciado é a *origem* e o serviço ClickHouse Cloud é o *destino*.

<div id="overview">
  ### Visão geral
</div>

O processo é:

1. Adicione um usuário somente leitura ao serviço de origem
2. Duplique a estrutura da tabela de origem no serviço de destino
3. Extraia os dados da origem para o destino ou envie os dados da origem, dependendo da conectividade de rede da origem
4. Remova o servidor de origem da Lista de acesso por IP no destino (se aplicável)
5. Remova o usuário somente leitura do serviço de origem

<div id="migration-of-tables-from-one-system-to-another">
  ### Migração de tabelas de um sistema para outro:
</div>

Este exemplo migra uma tabela de um servidor ClickHouse autogerenciado para o ClickHouse Cloud.

<Info>
  **Compatibilidade**

  Se você estiver percebendo diferenças de comportamento entre sua implantação autogerenciada do ClickHouse e seu serviço do ClickHouse Cloud,
  isso pode estar relacionado à [configuração de compatibilidade](/docs/pt-BR/reference/settings/session-settings#compatibility).
  No Cloud, a compatibilidade é definida quando um serviço é criado e não muda no nível do serviço, para garantir que os clientes tenham um comportamento consistente mesmo à medida que o serviço é atualizado.
  Se quiser alterar a compatibilidade, você pode solicitar isso por meio do [suporte](https://clickhouse.com/support/program).
</Info>

<div id="on-the-source-clickhouse-system-the-system-that-currently-hosts-the-data">
  ### No sistema ClickHouse de origem (o sistema que atualmente armazena os dados)
</div>

* Adicione um usuário com permissão somente de leitura para ler a tabela de origem (`db.table` neste exemplo)

```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;
```

* Copie a definição da tabela

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

<div id="on-the-destination-clickhouse-cloud-system">
  ### No sistema ClickHouse Cloud de destino:
</div>

* Crie o banco de dados de destino:

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

* Usando a instrução CREATE TABLE da origem, crie o destino.

<Tip>
  Altere o ENGINE para ReplicatedMergeTree sem nenhum parâmetro ao executar a instrução CREATE. O ClickHouse Cloud sempre replica as tabelas e fornece os parâmetros corretos. Mantenha, porém, as cláusulas `ORDER BY`, `PRIMARY KEY`, `PARTITION BY`, `SAMPLE BY`, `TTL` e `SETTINGS`.
</Tip>

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

* Use a função `remoteSecure` para extrair os dados a partir da origem autogerenciada

<Image img="https://mintcdn.com/private-7c7dfe99/B2SPNiDHMxYV1gTC/images/integrations/migration/self-managed-03.webp?fit=max&auto=format&n=B2SPNiDHMxYV1gTC&q=85&s=c3b3f850953b88fa14a1abf71db66b68" size="lg" alt="Migrando o ClickHouse autogerenciado" 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>
  Se o sistema de origem não estiver disponível em redes externas, você poderá enviar os dados em vez de extraí-los, pois a função `remoteSecure` funciona tanto para consultas quanto para inserções. Veja a próxima opção.
</Note>

* Use a função `remoteSecure` para enviar os dados para o serviço ClickHouse Cloud

<Image img="https://mintcdn.com/private-7c7dfe99/B2SPNiDHMxYV1gTC/images/integrations/migration/self-managed-04.webp?fit=max&auto=format&n=B2SPNiDHMxYV1gTC&q=85&s=850053e2837cf32fc40020a82eaba085" size="lg" alt="Migrando o ClickHouse autogerenciado" width="2048" height="936" data-path="images/integrations/migration/self-managed-04.webp" />

<Tip>
  **Adicione o sistema remoto à lista de acesso por IP do seu serviço ClickHouse Cloud**

  Para que a função `remoteSecure` se conecte ao seu serviço ClickHouse Cloud, o endereço IP do sistema remoto precisará estar autorizado na lista de acesso por IP. Expanda **Manage your lista de acesso por IP** abaixo desta dica para obter mais informações.
</Tip>

<Accordion title="Gerenciar sua IP Access List">
  Na lista de serviços do ClickHouse Cloud, escolha o serviço com o qual você vai trabalhar e vá para **Configurações**. Se a IP Access List não incluir o endereço IP ou o intervalo de IPs do sistema remoto que precisa se conectar ao seu serviço do ClickHouse Cloud, você pode resolver o problema com **Adicionar IPs**:

  <div className="ch-image-md">
    <Frame>
      <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/ip-allow-list-check-list.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=14fc8b7b7a3e42ebdd45507e630d4702" alt="Verifique se o serviço permite tráfego do seu endereço IP na IP Access List" width="3840" height="2042" data-path="images/_snippets/ip-allow-list-check-list.webp" />
    </Frame>
  </div>

  Adicione o endereço IP individual ou o intervalo de endereços que precisam se conectar ao seu serviço do ClickHouse Cloud. Ajuste o formulário conforme necessário e depois clique em **Salvar**.

  <div className="ch-image-md">
    <Frame>
      <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/ip-allow-list-add-current-ip.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=cab1bb3c9ae950e59acdb2cd5daeaea4" alt="Adicione seu endereço IP atual à IP Access List no ClickHouse Cloud" width="1188" height="796" data-path="images/_snippets/ip-allow-list-add-current-ip.webp" />
    </Frame>
  </div>
</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">
  ## Migração entre serviços do ClickHouse Cloud
</div>

<Image img="https://mintcdn.com/private-7c7dfe99/B2SPNiDHMxYV1gTC/images/integrations/migration/self-managed-05.webp?fit=max&auto=format&n=B2SPNiDHMxYV1gTC&q=85&s=4f6403d5e2042312f4b14ac9c99b5fcd" size="lg" alt="Migração de ClickHouse autogerenciado" width="2048" height="356" data-path="images/integrations/migration/self-managed-05.webp" />

Alguns casos de uso para migrar dados entre serviços do ClickHouse Cloud:

* Migrar dados de um backup restaurado
* Copiar dados de um serviço Development para um serviço de staging (ou de staging para produção)

Neste exemplo, há dois serviços do ClickHouse Cloud, que serão chamados de *origem* e *destino*. Os dados serão extraídos da origem para o destino. Embora você também possa optar por enviar, a extração é mostrada porque usa um usuário somente leitura.

<Image img="https://mintcdn.com/private-7c7dfe99/B2SPNiDHMxYV1gTC/images/integrations/migration/self-managed-06.webp?fit=max&auto=format&n=B2SPNiDHMxYV1gTC&q=85&s=9570badf0b96ecac3d9c76570627cfac" size="lg" alt="Migração de ClickHouse autogerenciado" width="2048" height="356" data-path="images/integrations/migration/self-managed-06.webp" />

Há algumas etapas na migração:

1. Identifique um serviço do ClickHouse Cloud como a *origem* e o outro como o *destino*
2. Adicione um usuário somente leitura ao serviço de origem
3. Duplique a estrutura da tabela de origem no serviço de destino
4. Permita temporariamente o acesso por IP ao serviço de origem
5. Copie os dados da origem para o destino
6. Restabeleça a lista de acesso por IP no serviço de destino
7. Remova o usuário somente leitura do serviço de origem

<div id="add-a-read-only-user-to-the-source-service">
  #### Adicione um usuário somente leitura ao serviço de origem
</div>

* Adicione um usuário somente leitura que possa ler a tabela de origem (`db.table` neste exemplo)

  ```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;
  ```

* Copie a definição da tabela
  ```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">
  #### Duplique a estrutura da tabela no serviço de destino
</div>

No destino, crie o banco de dados, caso ele ainda não exista:

* Crie o banco de dados de destino:
  ```sql theme={null}
  CREATE DATABASE db
  ```

* Usando a instrução CREATE TABLE da origem, crie a tabela no destino.

  No destino, crie a tabela usando a saída de `select create_table_query...` da origem:

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

<div id="allow-remote-access-to-the-source-service">
  #### Permita acesso remoto ao serviço de origem
</div>

Para extrair dados da origem para o destino, o serviço de origem precisa permitir conexões. Desative temporariamente a funcionalidade "lista de acesso por IP" no serviço de origem.

<Tip>
  Se você pretende continuar usando o serviço ClickHouse Cloud de origem, exporte a lista de acesso por IP atual para um arquivo JSON antes de alterar a configuração para permitir acesso de qualquer lugar; assim, você poderá importar a lista de acesso novamente após a migração dos dados.
</Tip>

Modifique a lista de permissões e permita acesso de **Anywhere** temporariamente. Consulte a documentação de [lista de acesso por IP](/docs/pt-BR/products/cloud/guides/security/connectivity/setting-ip-filters) para mais detalhes.

<div id="copy-the-data-from-source-to-destination">
  #### Copie os dados da origem para o destino
</div>

* Use a função `remoteSecure` para extrair os dados do serviço de origem no ClickHouse Cloud
  Conecte-se ao destino. Execute este comando no serviço de destino no ClickHouse Cloud:

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

* Verifique os dados no serviço de destino

<div id="re-establish-the-ip-access-list-on-the-source">
  #### Restabeleça a lista de acesso por IP na origem
</div>

Se você exportou a lista de acesso antes, pode reimportá-la usando **Share**; caso contrário, adicione novamente os IPs à lista de acesso.

<div id="remove-the-read-only-exporter-user">
  #### Remova o usuário somente leitura `exporter`
</div>

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

* Altere a lista de acesso por IP do serviço para restringir o acesso
