Todos os produtos
Search
Central de documentação

ApsaraDB for ClickHouse:Migrar de ClickHouse autogerenciado para Cloud ClickHouse

Última atualização: Jul 29, 2026

Clusters ClickHouse autogerenciados frequentemente apresentam instabilidade, baixa escalabilidade, dificuldades de atualização e recuperação de desastres limitada. Por isso, cada vez mais clientes estão migrando seus clusters ClickHouse autogerenciados para um service PaaS na cloud. Este tópico descreve como migrar de um cluster ClickHouse autogerenciado para um cluster da edição compatível com a comunidade do ApsaraDB for ClickHouse.

Pré-requisitos

  • Cluster de destino:

  • Cluster autogerenciado:

    • É necessário ter uma conta e senha de banco de dados.

    • A conta deve ter permissões de leitura em bancos de dados e tabelas, além de permissão para executar comandos SYSTEM.

  • O cluster de destino e o cluster autogerenciado devem conseguir se comunicar pela rede.

    Se o cluster autogerenciado e o cluster de destino estiverem na mesma VPC, adicione também os endereços IP de todos os nós do cluster de destino e o bloco CIDR IPv4 do vSwitch correspondente à lista de permissões do cluster autogerenciado.

    • Para configurar uma lista de permissões em um cluster ApsaraDB for ClickHouse, consulte Configure a whitelist.

    • Para configurar uma lista de permissões em um cluster autogerenciado, consulte a documentação relevante do product.

    • Para visualizar os endereços IP de todos os nós no cluster ApsaraDB for ClickHouse, execute SELECT * FROM system.clusters;.

    • Para obter o bloco CIDR IPv4 do vSwitch do seu cluster ApsaraDB for ClickHouse, siga estas etapas:

      1. No console do ApsaraDB for ClickHouse, acesse a página Cluster Information do cluster de destino. Na seção Network Information, obtenha o VSwitch ID.

      2. Na lista de vSwitch, use o Instance ID para localizar o vSwitch de destino e obter seu IPv4 CIDR.

    Caso o cluster autogerenciado e o cluster de destino estejam em VPCs diferentes, ou se o cluster autogerenciado estiver em um data center local ou em outra plataforma cloud, estabeleça primeiro a conectividade de rede. Para mais informações, consulte How do I establish a network connection between a target cluster and a data source?.

Validação da migração

Antes de iniciar a migração de dados, recomendamos fortemente a criação de um ambiente de teste para validar a compatibilidade do negócio, o desempenho e o plano de migração. Após concluir a validação, realize a migração de dados no ambiente de produção. Essa etapa crucial ajuda a identificar e resolver problemas potenciais antecipadamente, garantindo uma migração tranquila e evitando interrupções no ambiente de produção.

  1. Crie uma tarefa de migração para transferir os dados. Para etapas detalhadas, consulte este tópico.

  2. Para informações sobre compatibilidade de migração para a cloud, análise de gargalos de desempenho e garantia de sucesso na migração, consulte Analysis and Solutions for Compatibility and Performance Bottlenecks in Migrating Self-Managed ClickHouse to the Cloud.

Escolha uma solução

Solução de migração

Vantagens

Desvantagens

Casos de uso

Console migration

Oferece uma interface visual. Não é necessário migrar metadados manualmente.

Suporta apenas migração completa e incremental de todo o cluster. Não é possível migrar bancos de dados, tabelas ou dados históricos específicos.

Migração de um cluster inteiro.

Manual migration

Permite controlar quais bancos de dados e tabelas migrar.

Envolve etapas complexas e migração manual de metadados.

  • Migração de bancos de dados e tabelas específicos.

  • Dados frios excedem 1 TB.

  • Dados quentes excedem 10 TB.

  • Migração de um cluster inteiro que não atende às condições para migração via console.

Procedimento

Migração via console

Limites

O cluster de destino deve estar executando a versão 21.8 ou posterior.

Observações

Durante a migração

  • Durante a migração, o processo de merge é pausado no cluster de destino, mas continua no cluster autogerenciado.

    Nota

    Se uma tarefa de migração durar muito tempo, pode haver acúmulo excessivo de metadados no cluster de destino. Recomendamos que as tarefas de migração não excedam 5 dias de duração. Tarefas que ultrapassam 5 dias são canceladas automaticamente.

  • O cluster de destino deve ser o cluster default. Se o seu cluster autogerenciado usar um nome diferente, o service converte automaticamente a definição de cluster nas tabelas distribuídas para default.

Escopo da migração

  • Objetos suportados

    • Bancos de dados, dicionários de dados e materialized views.

      • Este service suporta a migração de dicionários de dados criados com SQL, mas não aqueles criados com XML.

        Para verificar isso, execute a seguinte instrução: SELECT * FROM system.dictionaries WHERE (database = '') OR isNull(database);. Se a instrução retornar linhas, isso indica que você possui dicionários de dados criados usando XML.

      • Quando um dicionário de dados acessa um service externo, garanta que o service externo esteja disponível e que o cluster esteja adicionado à sua lista de permissões. Se a fonte de dados de um dicionário de dados for uma tabela interna no cluster ClickHouse atual e o parâmetro HOST na definição for um endereço IP, o acesso ao dicionário poderá falhar após a migração devido à alteração do endereço IP. Reconfirme o HOST do cluster ClickHouse atual e crie o dicionário de dados manualmente.

    • Esquemas de tabela: Todos os esquemas de tabela, exceto tabelas com engines Kafka e RabbitMQ.

    • Dados: Migração incremental de dados de tabelas da família MergeTree.

  • Objetos e dados não suportados

    • Tabelas com engines Kafka e RabbitMQ, e seus dados.

    • Dados de tabelas não-MergeTree, como tabelas externas e tabelas Log.

    Importante

    Migre manualmente os itens não suportados listados acima.

  • Limites de volume de dados

    • Dados frios: A migração de dados frios é lenta. Para evitar falhas causadas por tempos de migração longos, recomendamos limpar os dados frios do seu cluster autogerenciado para garantir que o volume total não exceda 1 TB.

    • Dados quentes: Se o volume de dados quentes exceder 10 TB, é provável que a tarefa de migração falhe.

    Se o volume de dados exceder esses limites, considere usar a solução manual migration.

Impacto no cluster

  • Cluster autogerenciado:

    • A leitura de dados do cluster autogerenciado aumenta o uso de CPU e memória.

    • Operações DDL não são permitidas.

  • Cluster de destino:

    • A gravação de dados no cluster de destino aumenta o uso de CPU e memória.

    • Operações DDL não são permitidas nos bancos de dados e tabelas que estão sendo migrados.

    • Essa restrição não se aplica a outros bancos de dados e tabelas.

    • O processo de merge é interrompido apenas para os bancos de dados e tabelas que estão sendo migrados.

    • O cluster reinicia antes do início da tarefa de migração.

    • Após a conclusão da migração, o cluster realiza operações frequentes de merge. Isso aumenta o uso de I/O e pode levar a uma maior latência nas requisições de negócio. Planeje o impacto potencial desse aumento de latência. Calcule a duração específica das operações de merge. Para instruções, consulte Calculate the merge time after migration.

Procedimento

Etapa 1: Verificar o cluster e ativar tabelas de sistema

Antes de migrar dados, modifique o arquivo config.xml no seu cluster autogerenciado para ativar a migração incremental. As modificações necessárias dependem de as tabelas system.part_log e system.query_log estarem ativadas.

Se as tabelas de sistema não estiverem ativadas

Se você não ativou system.part_log e system.query_log, adicione as seguintes configurações ao arquivo config.xml.

system.part_log

<part_log>
    <database>system</database>
    <table>part_log</table>
    <partition_by>event_date</partition_by>
    <order_by>event_time</order_by>
    <ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>

system.query_log

<query_log>
    <database>system</database>
    <table>query_log</table>
    <partition_by>event_date</partition_by>
    <order_by>event_time</order_by>
    <ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>

Se as tabelas de sistema estiverem ativadas

  1. Garanta que as configurações de system.part_log e system.query_log no arquivo config.xml correspondam ao conteúdo a seguir. Inconsistências podem causar falha na migração de dados ou torná-la lenta.

    system.part_log

    <part_log>
        <database>system</database>
        <table>part_log</table>
        <partition_by>event_date</partition_by>
        <order_by>event_time</order_by>
        <ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </part_log>

    system.query_log

    <query_log>
        <database>system</database>
        <table>query_log</table>
        <partition_by>event_date</partition_by>
        <order_by>event_time</order_by>
        <ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </query_log>
  2. Após modificar a configuração, execute as instruções drop table system.part_log e drop table system.query_log. A inserção de dados em uma tabela de negócio recria automaticamente as tabelas system.part_log e system.query_log.

Etapa 2: Configurar compatibilidade do cluster de destino

Configure o cluster de destino para ser compatível com o cluster autogerenciado. Esta etapa minimiza as alterações necessárias na aplicação após a migração.

  1. Obtenha e compare os números de versão do cluster de destino e do cluster autogerenciado.

    Faça logon no cluster de destino e no cluster autogerenciado e execute a seguinte instrução em cada um para obter seus números de versão. Para mais informações sobre como fazer logon no ApsaraDB for ClickHouse, consulte Connect to a database.

    SELECT version();
  2. Se as versões forem diferentes, faça logon no cluster de destino e defina o parâmetro de compatibilidade para corresponder à versão do cluster autogerenciado. Isso garante que os recursos sejam os mais consistentes possível. Veja um exemplo abaixo:

    SET GLOBAL compatibility = '22.8';

Etapa 3: (Opcional) Ativar a engine MaterializedMySQL

Se o seu cluster autogerenciado contiver tabelas que usam a engine MaterializedMySQL, execute a seguinte instrução para ativar essa engine.

SET GLOBAL allow_experimental_database_materialized_mysql = 1;
Nota

A comunidade ClickHouse não mantém mais a engine MaterializedMySQL. Após migrar para a cloud, recomendamos usar o Data Transmission Service (DTS) para sincronizar dados do MySQL.

Como a engine MaterializedMySQL não é mantida, o Data Transmission Service (DTS) usa tabelas ReplacingMergeTree em vez de tabelas MaterializedMySQL ao sincronizar dados do MySQL para o ApsaraDB for ClickHouse. Para mais informações, consulte MaterializedMySQL compatibility.

Para mais informações sobre como usar o DTS para migrar dados do MySQL para o ApsaraDB for ClickHouse, consulte os seguintes tópicos:

Etapa 4: Registrar e limpar tabelas com engines Kafka/RabbitMQ

Antes de iniciar a migração, registre as definições de todas as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes no cluster autogerenciado, trate as tabelas implícitas e, em seguida, exclua essas tabelas para evitar erros de migração.

  1. Faça logon no cluster autogerenciado e consulte todas as tabelas com engines Kafka e RabbitMQ, juntamente com suas dependências.

    /*
    create_table_query: table definition
    dependencies_database: database of the table that depends on this table
    dependencies_table: table that depends on this table
    From dependencies_database and dependencies_table, you can identify the materialized views that depend on Kafka/RabbitMQ tables
    */
    SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka');
  2. Visualize a definição da materialized view para verificar se sua tabela de destino é uma tabela implícita.

    /*
    View the materialized view definition.
    If the target table of the materialized view is an implicit table, pay special attention:
    Dropping the materialized view will also drop the implicit table, causing data loss.
    Example: If CREATE MATERIALIZED VIEW [db.]table_name [TO[db.]name] does not specify TO,
    the system automatically creates an implicit table, possibly in the format '.inner_id.<TABLE_UUID>' or '.inner.<TABLE>'
    */
    SELECT * FROM system.tables WHERE database='<DATABASE>' AND name = '<MATERIALIZED_VIEW_NAME>';
  3. Se a tabela de destino de uma materialized view for uma tabela implícita, renomeie a tabela de destino para um novo nome para evitar perda de dados quando a materialized view for excluída posteriormente.

    -- Rename the implicit target table to a new name to protect data
    RENAME TABLE <DATABASE>.`.inner_id.<TABLE_UUID>` TO <DATABASE>.<new_target_table_name>;
  4. Exclua as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes.

    -- Drop materialized views first
    DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>;
    -- Then drop Kafka/RabbitMQ engine tables
    DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
Importante

Certifique-se de salvar todas as instruções DDL registradas. Você precisará delas para recriar essas tabelas tanto no cluster autogerenciado quanto no cluster de destino posteriormente. Se você realizou uma operação RENAME, use a cláusula TO apontando para a tabela de destino renomeada ao recriar a materialized view. Para mais informações, consulte CREATE MATERIALIZED VIEW.

Etapa 5: Criar uma tarefa de migração de dados

  1. Faça logon no console do ApsaraDB for ClickHouse.

  2. Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster de destino.

  3. No painel de navegação à esquerda, escolha Data Migration and Synchronization > Migration from ClickHouse.

  4. Na página de tarefas de migração, clique em Create Migration Task.

    1. Configure as instâncias de origem e destino.

      Defina as seguintes configurações e clique em Test Connectivity and Proceed.

      Nota

      Se o teste de conexão for bem-sucedido, prossiga para a próxima etapa. Se o teste de conexão falhar, reconfigure as instâncias de origem e destino com base nas mensagens exibidas.

      Parâmetros do cluster de origem

      Parâmetro

      Descrição

      Exemplo

      Source Access Method

      Selecione Express Connect, VPN Gateway, Smart Access Gateway, or Self-managed ClickHouse Clusters on an ECS Instance.

      Express Connect, VPN Gateway, Smart Access Gateway, or Self-managed ClickHouse Clusters on an ECS Instance

      Cluster Name

      O nome do cluster de origem.

      O nome pode conter apenas dígitos e letras minúsculas.

      source

      Source Cluster Name

      Execute SELECT * FROM system.clusters; para obter o Source Cluster Name.

      default

      VPC IP Address

      O endereço IP e PORTA (endereço TCP) de cada shard no cluster, separados por vírgulas.

      Importante

      Não é possível usar o nome de domínio VPC ou o endereço SLB de um cluster ApsaraDB for ClickHouse.

      Formato: IP:PORT,IP:PORT,......

      O método para obter o endereço IP e a PORTA do cluster varia dependendo do cenário de migração de dados.

      Migração entre contas ou entre regiões

      Use a seguinte instrução SQL para obter o endereço IP e a PORTA do cluster autogerenciado:

      SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = 'default' and replica_num = 1;

      Aqui, replica_num=1 seleciona o primeiro conjunto de réplicas. Você também pode escolher outros conjuntos de réplicas ou selecionar uma réplica de cada shard.

      Migração de ClickHouse fora da Alibaba Cloud

      Se o endereço IP não puder ser facilmente mapeado para a Alibaba Cloud, use a seguinte instrução SQL para obter o endereço IP e a PORTA do cluster autogerenciado:

      SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = '<cluster_name>' and replica_num = 1;

      Os parâmetros são descritos da seguinte forma:

      • cluster_name: o nome do cluster de destino.

      • replica_num=1 seleciona o primeiro conjunto de réplicas. Você também pode escolher outros conjuntos de réplicas ou selecionar uma réplica de cada shard.

      Se o endereço IP e a porta forem mapeados para a Alibaba Cloud por meio de tradução de rede, configure o endereço IP e a porta mapeados correspondentes.

      192.168.0.5:9000,192.168.0.6:9000

      Database Account

      A conta de banco de dados do cluster de origem.

      test

      Database Password

      A senha da conta de banco de dados do cluster de origem.

      test

      Parâmetros do cluster de destino

      Parâmetro

      Descrição

      Exemplo

      Database Account

      A conta de banco de dados do cluster de destino.

      test

      Database Password

      A senha da conta de banco de dados do cluster de destino.

      test

    2. Confirme o conteúdo da migração.

      Revise cuidadosamente as informações sobre os dados a serem migrados na página e, em seguida, clique em Next: Pre-detect and Start Synchronization.

    3. O sistema executa uma pré-verificação no link de migração em segundo plano e inicia a tarefa.

      O sistema executa uma Instance Status Detection, uma Storage Space Detection e uma Local Table and Distributed Table Detection nos clusters de origem e destino.

      • Se a pré-verificação for bem-sucedida:

        Após o sucesso da pré-verificação, a página mostra que três verificações foram aprovadas: Instance status check, Storage space check e Local table and distributed table check. O topo da página mostra que o tempo estimado de migração é de 2 minutos e descreve os impactos durante a migração:

        • A instância de origem permite leitura e escrita, mas operações DDL não podem ser realizadas.

        • A instância de destino permite leitura, mas não é possível gravar nas tabelas migradas.

        • Quando o tempo restante for inferior a 10 minutos, pare as gravações para acionar o fim da migração.

        • Tabelas não-MergeTree retêm apenas a estrutura da tabela sem migração de dados após o dimensionamento.

        1. Revise cuidadosamente como o processo de migração de dados afeta as instâncias.

        2. Clique em Completed.

          Importante
          • Ao clicar em Complete, o sistema cria e inicia a tarefa, e seu status muda para Running. Visualize a tarefa na lista de tarefas.

          • Após criar a tarefa, monitore-a. Na fase final da migração, pare as operações de escrita no cluster autogerenciado e migre os esquemas de banco de dados e tabelas restantes. Para mais informações, consulte Monitor the migration task and stop writes to the self-managed cluster.

      • Se a pré-verificação falhar: Siga as instruções na mensagem de erro e execute a tarefa de migração de dados novamente. A tabela a seguir descreve os itens de pré-verificação e seus requisitos. Para mais informações sobre mensagens de erro de pré-verificação e suas soluções, consulte Migration precheck errors and solutions.

        Item de verificação

        Requisito

        Instance Status Detection

        A tarefa de migração de dados não pode iniciar se tarefas de gerenciamento (como scale-out, upgrade ou downgrade) estiverem em execução no cluster de origem ou destino.

        Storage Space Detection

        O espaço de armazenamento disponível do cluster de destino deve ser pelo menos 1,2 vezes o espaço de armazenamento utilizado do cluster autogerenciado.

        Local Table and Distributed Table Detection

        Se uma tabela local no cluster autogerenciado não tiver uma tabela distribuída correspondente ou tiver mais de uma tabela distribuída, a verificação falha. Para resolver isso, exclua as tabelas distribuídas redundantes ou crie uma tabela distribuída única para a tabela local.

Etapa 6: Avaliar a viabilidade da migração

Se a velocidade de escrita do cluster de origem for inferior a 20 MB/s, pule esta etapa.

Se a velocidade de escrita do cluster de origem for superior a 20 MB/s, verifique a velocidade real de escrita do cluster de destino para avaliar a viabilidade da migração. Uma migração bem-sucedida exige que a velocidade de escrita do cluster de destino acompanhe a do cluster de origem. Siga estas etapas:

  1. Visualize o TairPDBShardingIOBandwidth do cluster de destino para determinar sua velocidade real de escrita. Para informações sobre como visualizar o TairPDBShardingIOBandwidth, consulte View cluster monitoring data.

  2. Compare as velocidades de escrita dos clusters de destino e de origem.

    1. Se a velocidade de escrita do cluster de destino for superior à do cluster de origem: É provável que a migração seja bem-sucedida. Continue para a Etapa 7.

    2. Se a velocidade de escrita do cluster de destino for inferior à do cluster de origem: É provável que a migração falhe. Recomendamos que você cancel the migration task e use manual migration.

Etapa 7: Monitorar a migração e parar gravações

  1. Faça logon no console do ApsaraDB for ClickHouse.

  2. Na lista de instâncias da Community Edition, clique no ID do cluster de destino.

  3. No painel de navegação, clique em Data Migration and Synchronization > Migration from ClickHouse.

  4. Na página da lista de migração de instâncias, você pode:

    • Visualizar o status e a fase de execução da tarefa de migração.

      Importante
      • Quando a fase de execução atingir Data Migration (ou seja, a migração do esquema da tabela estiver concluída), prossiga imediatamente para Step 8 para recriar as tabelas com engines Kafka/RabbitMQ no cluster autogerenciado e retomar a ingestão incremental de dados.

      • Monitore atentamente as Running Information da tarefa alvo. Com base no tempo restante estimado na coluna Running Information, siga Step 9 para parar as gravações no cluster autogerenciado e tratar as tabelas com engines Kafka e RabbitMQ.

    • Na coluna Actions, clique em View Details para abrir a página de detalhes da tarefa. A página de detalhes da tarefa contém as seguintes informações:

      Nota

      Se a tarefa de migração estiver concluída (seu status for Completed ou Canceled), o conteúdo da página View Details será limpo. Visualize a lista de esquemas de tabelas migrados no cluster de destino executando a seguinte instrução SQL:

      SELECT `database`, `name`, `engine_full` FROM `system`.`tables` WHERE `database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema');
      • Todos os esquemas de tabelas migrados e seus status de migração.

      • Todos os esquemas de bancos de dados migrados e seus status de migração.

      • Todas as mensagens de erro para migrações de bancos de dados e tabelas com falha.

    A tabela a seguir descreve os status das tarefas de migração.

    Status da tarefa

    Descrição

    Running

    Preparando o ambiente e os recursos para a migração.

    Initializing

    Inicializando a tarefa de migração.

    Configuration Migration

    Migrando a configuração do cluster.

    Schema Migration

    Migrando todos os bancos de dados, tabelas da família MergeTree e tabelas Distributed.

    Data Migration

    Migrando incrementalmente dados de tabelas da família MergeTree.

    Other Schema Migration

    Migrando os esquemas de materialized views e tabelas não-MergeTree.

    Data Check

    Verificando se o volume de dados das tabelas concluídas no cluster de destino é consistente com o volume de dados no cluster autogerenciado. Se houver inconsistência, a tarefa pode falhar. Recomendamos reiniciar a migração.

    Post-migration Configuration

    Configurando ajustes do sistema para o cluster de destino, como limpar recursos de migração e reativar gravações na instância de origem.

    Completed

    A tarefa de migração está concluída.

    Canceled

    A tarefa de migração foi cancelada.

Etapa 8: Recriar tabelas com engines Kafka/RabbitMQ no cluster autogerenciado

Depois que a tarefa de migração entrar na fase de migração de dados (ou seja, a migração do esquema da tabela estiver concluída), use as instruções DDL salvas anteriormente para recriar as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes no cluster autogerenciado. Uma vez recriadas, os dados incrementais voltam a fluir e são sincronizados automaticamente com o cluster de destino.

Importante

Se você realizou uma operação RENAME em tabelas de destino implícitas anteriormente, use a cláusula TO apontando para a tabela de destino renomeada ao recriar a materialized view.

-- Rebuild Kafka/RabbitMQ engine tables on the self-managed cluster
CREATE TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Rebuild materialized view (pointing to the renamed target table)
CREATE MATERIALIZED VIEW <DATABASE>.<MATERIALIZED_VIEW_NAME> TO <DATABASE>.<new_target_table_name>
AS SELECT ... FROM <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;

Etapa 9: Parar gravações e realizar o cutover

Quando o tempo restante estimado para a migração for inferior a 10 minutos ou o progresso da migração atingir 99%, execute as seguintes etapas de cutover:

  1. Pare as gravações de negócio. No cluster autogerenciado, exclua as tabelas com engines Kafka/RabbitMQ recriadas anteriormente e suas materialized views dependentes.

    -- Drop materialized views first
    DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>;
    -- Then drop Kafka/RabbitMQ engine tables
    DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
  2. Aguarde até que o progresso da migração atinja 100% e a migração seja totalmente concluída.

  3. Conecte-se ao cluster de destino e use as instruções DDL salvas anteriormente para recriar as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes.

    Importante

    Se você realizou uma operação RENAME em tabelas de destino implícitas anteriormente, use a cláusula TO apontando para a tabela de destino renomeada ao recriar a materialized view.

    -- Rebuild Kafka/RabbitMQ engine tables on the destination cluster
    CREATE TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME> (...)
    ENGINE = Kafka/RabbitMQ
    SETTINGS ...;
    -- Rebuild materialized view (pointing to the renamed target table)
    CREATE MATERIALIZED VIEW <DATABASE>.<MATERIALIZED_VIEW_NAME> TO <DATABASE>.<new_target_table_name>
    AS SELECT ... FROM <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
  4. Verifique se o pipeline de dados no cluster de destino está funcionando corretamente e se os dados estão fluindo normalmente.

Etapa 10: Concluir a migração

Após parar as gravações no cluster autogerenciado, clique em Complete the task. Esta etapa migra os dados restantes, realiza uma verificação de volume de dados e migra os esquemas de banco de dados e tabelas restantes. Visualize o conteúdo migrado em task details.

Importante
  • Se a verificação de dados falhar, a tarefa de migração permanece na fase de verificação de volume de dados. Recomendamos cancelar a migração e criar uma nova tarefa de migração. Para mais informações sobre como cancelar uma tarefa de migração, consulte Other operations.

  • Uma migração de dados longa pode causar acúmulo excessivo de metadados no cluster de destino. Recomendamos que as tarefas de migração não excedam 5 dias de duração. Tarefas que ultrapassam 5 dias são canceladas automaticamente.

  1. Faça logon no console do ApsaraDB for ClickHouse.

  2. Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster de destino.

  3. No painel de navegação à esquerda, clique em Data Migration and Synchronization > Migration from ClickHouse.

  4. Para a tarefa de migração alvo, clique em Complete Migration na coluna Actions.

  5. Na caixa de diálogo Complete Migration, clique em OK.

Etapa 11: Migrar dados para tabelas não-MergeTree

A tarefa de migração transfere apenas o esquema da tabela de tabelas não-MergeTree (como tabelas externas e tabelas Log), criando-as no cluster de destino sem dados de negócio. Migre os dados de negócio manualmente. Siga estas etapas:

  1. Faça logon no cluster autogerenciado e execute a seguinte instrução para identificar as tabelas não-MergeTree que requerem migração de dados.

    SELECT
        `database` AS database_name,
        `name` AS table_name,
        `engine`
    FROM `system`.`tables`
    WHERE (`engine` NOT LIKE '%MergeTree%') AND (`engine` != 'Distributed') AND (`engine` != 'MaterializedView') AND (`engine` NOT IN ('Kafka', 'RabbitMQ')) AND (`database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema')) AND (`database` NOT IN (
        SELECT `name`
        FROM `system`.`databases`
        WHERE `engine` IN ('MySQL', 'MaterializedMySQL', 'MaterializeMySQL', 'Lazy', 'PostgreSQL', 'MaterializedPostgreSQL', 'SQLite')
    ))
  2. Faça logon no cluster de destino e use a função remote para migrar os dados da tabela. Para instruções detalhadas, consulte Migrate data using the remote function.

Outras operações

Quando uma tarefa de migração é concluída, seu Migration Status muda para Completed. A lista de tarefas não é atualizada imediatamente, portanto, atualize a página periodicamente para visualizar o status mais recente.

Ações

Descrição

Impacto

Cenário

Cancel Migration

Cancela forçosamente a tarefa e pula a verificação de volume de dados, sem migrar os esquemas de banco de dados e tabelas restantes.

  • A migração é encerrada forçosamente. Os esquemas de banco de dados e tabelas na instância de destino podem ficar incompletos e inutilizáveis.

  • Antes de reiniciar a migração, limpe os dados migrados do cluster de destino para evitar duplicação de dados.

Use esta opção quando a migração afetar negativamente seu cluster autogerenciado e você precisar restaurar as operações de escrita imediatamente.

Stop Migration

Interrompe a migração de dados imediatamente, mas conclui a migração dos esquemas de banco de dados e tabelas restantes. A verificação de volume de dados é ignorada.

A migração de dados ficará incompleta, mas os esquemas de banco de dados e tabelas na instância de destino estarão completos.

Use esta opção para testar um conjunto de dados parcialmente migrado sem interromper as gravações no cluster autogerenciado.

Parar migração

  1. Faça logon no console do ApsaraDB for ClickHouse.

  2. Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster alvo.

  3. No painel de navegação à esquerda, escolha Data Migration and Synchronization > Migration from ClickHouse.

  4. Na coluna Actions da tarefa de migração alvo, clique em Stop Migration.

  5. Na caixa de diálogo Stop Migration, clique em OK.

Cancelar migração

  1. Faça logon no console do ApsaraDB for ClickHouse.

  2. Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster alvo.

  3. No painel de navegação à esquerda, escolha Data Migration and Synchronization > Migration from ClickHouse.

  4. Na coluna Actions da tarefa de migração alvo, clique em Cancel Migration.

  5. Na caixa de diálogo Cancel Migration, clique em OK.

Migração manual

Método 1: Usar os comandos BACKUP e RESTORE

Para mais informações, consulte Use the BACKUP and RESTORE commands to back up and restore data.

Método 2: Usar a instrução INSERT FROM SELECT

Etapa 1: Migrar metadados

Migrar metadados do ClickHouse consiste principalmente em migrar o DDL de criação de tabelas.

Se precisar instalar a ferramenta clickhouse-client, garanta que sua versão corresponda à da instância de destino do ApsaraDB for ClickHouse. Encontre o link de download em clickhouse-client.

  1. Visualize a lista de bancos de dados no cluster autogerenciado.

    clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW databases"  > database.list

    Parâmetros:

    Parâmetro

    Descrição

    old host

    O endereço do cluster autogerenciado.

    old port

    A porta do cluster autogerenciado.

    old user name

    A conta usada para fazer logon no cluster autogerenciado. A conta deve ter permissões de leitura/escrita DML, permissões de configurações e permissões DDL.

    old password

    A senha da conta.

    Nota

    O banco de dados system é um banco de dados de sistema e não requer migração. Filtre-o.

  2. Visualize a lista de tabelas no cluster autogerenciado.

    clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW tables from <database_name>"  > table.list

    Parâmetros:

    Parâmetro

    Descrição

    database_name

    O nome do banco de dados.

    Alternativamente, consulte todos os nomes de bancos de dados e tabelas diretamente nas tabelas de sistema.

    SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';
    Nota

    Se um nome de tabela consultado começar com .inner., trata-se de uma representação interna de uma materialized view e não requer migração. Filtre-o.

  3. Exporte o DDL de criação de todas as tabelas em um banco de dados específico do cluster autogerenciado.

    clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SELECT concat(create_table_query, ';') FROM system.tables WHERE database='<database_name>' FORMAT TabSeparatedRaw" > tables.sql
  4. Importe o DDL de criação de tabelas para a instância de destino do ApsaraDB for ClickHouse.

    Nota

    Antes de importar o DDL de criação de tabelas, crie o banco de dados correspondente na instância do ApsaraDB for ClickHouse.

    clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>"  -d '<database_name>'  --multiquery < tables.sql

    Parâmetros:

    Parâmetro

    Descrição

    new host

    O endereço da instância de destino do ApsaraDB for ClickHouse.

    new port

    A porta da instância de destino do ApsaraDB for ClickHouse.

    new user name

    A conta usada para fazer logon na instância de destino do ApsaraDB for ClickHouse. A conta deve ter permissões de leitura/escrita DML, permissões de configurações e permissões DDL.

    new password

    A senha da conta.

Etapa 2: Migrar dados

Função Remote

  1. (Opcional) Ao migrar dados para uma instância ApsaraDB for ClickHouse, considere ajustar o parâmetro network_compression_method para reduzir o tráfego de rede.

    • Para modificar temporariamente o network_compression_method na instância de destino ApsaraDB for ClickHouse, execute o seguinte comando.

    • SET network_compression_method = 'ZSTD';
    • Para visualizar o valor do parâmetro network_compression_method na instância de destino ApsaraDB for ClickHouse, execute o seguinte comando.

    • SELECT * FROM system.settings WHERE name = 'network_compression_method';
  2. Na instância de destino ApsaraDB for ClickHouse, execute a seguinte instrução SQL para migrar dados.

    INSERT INTO <new_database>.<new_table> 
    SELECT * 
    FROM remote('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>') 
    [WHERE _partition_id = '<partition_id>']
    SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, max_result_rows = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;
    Nota

    Para a versão 20.8, use primeiro a função remoteRaw para migração de dados. Se a migração falhar, solicite um upgrade de versão secundária.

    INSERT INTO <new_database>.<new_table> 
    SELECT * 
    FROM remoteRaw('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>')
    [WHERE _partition_id = '<partition_id>']
    SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, max_result_rows = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;

    Parâmetros:

    Importante

    Use o parâmetro _partition_id para filtrar dados. Isso reduz o uso de recursos.

    (Opcional) Para obter o partition_id e o número de partes, consulte-os na tabela system.parts executando a seguinte instrução SQL.

    SELECT partition_id, count(*) AS part_count from clusterAllReplicas(default, system, parts) WHERE `database` = '<old_database>' AND `table` = '<old_table>' GROUP BY partition_id ;

    Parâmetro

    Descrição

    new_database

    O nome do banco de dados na instância de destino do ApsaraDB for ClickHouse.

    new_table

    O nome da tabela na instância de destino do ApsaraDB for ClickHouse.

    old_endpoint

    O endpoint da instância de origem.

    ClickHouse autogerenciado

    Formato do endpoint: Endereço IP de um nó da instância de origem:porta.

    Importante

    A porta deve ser a porta TCP.

    ApsaraDB for ClickHouse

    Use o endpoint interno VPC da instância de origem, não o endpoint público.

    Importante

    As portas 3306 e 9000 são valores fixos.

    • Instância da Community Edition:

      • Formato do endpoint: Endereço interno VPC:3306.

      • Exemplo: cc-2zeqhh5v7y6q*.clickhouse.ads.aliyuncs.com:3306

    • Instância Enterprise:

      • Formato do endpoint: Endereço interno VPC:9000.

      • Exemplo: cc-bp1anv7jo84ta*clickhouse.clickhouseserver.rds.aliyuncs.com:9000

    old_database

    O nome do banco de dados do cluster autogerenciado.

    old_table

    O nome da tabela do cluster autogerenciado.

    username

    A conta do cluster autogerenciado.

    password

    A senha da conta do cluster autogerenciado.

    max_execution_time

    O tempo máximo de execução para uma consulta. Defina como 0 para não haver limite de tempo.

    max_bytes_to_read

    O número máximo de bytes que uma consulta pode ler dos dados de origem. Defina como 0 para não haver limite.

    log_query_threads

    Especifica se deve registrar informações de threads durante a execução da consulta. Defina como 0 para desativar o registro.

    max_result_rows

    O número máximo de linhas no resultado da consulta. Defina como 0 para não haver limite.

    min_insert_block_size_rows

    O número mínimo de linhas por parte de dados em uma única escrita. Defina como 4294967296 (máximo) para desativar o limite de linhas. Esta configuração funciona em conjunto com min_insert_block_size_bytes para evitar excesso de partes pequenas.

    min_insert_block_size_bytes

    O tamanho mínimo em bytes por parte de dados em uma única escrita. Defina como 1073741824 (1 GB) para evitar excesso de partes pequenas e evitar o erro "Too many partitions for a single INSERT block".

    _partition_id

    O ID da partição de dados.

Exportação e importação de arquivos

Exporte dados do banco de dados do cluster autogerenciado para um arquivo e, em seguida, importe o arquivo para a instância de destino do ApsaraDB for ClickHouse.

  • Exportação e importação CSV

    1. Exporte dados do banco de dados do cluster autogerenciado para um arquivo CSV.

      clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>"  --query="select * from <database_name>.<table_name> FORMAT CSV"  > table.csv
    2. Importe o arquivo CSV para a instância de destino do ApsaraDB for ClickHouse.

      clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>"  --query="insert into <database_name>.<table_name> FORMAT CSV"  < table.csv
  • Stream com pipe do Linux

    clickhouse-client --host="<old host>" --port="<old port>" --user="<user name>" --password="<password>"  --query="select * from <database_name>.<table_name> FORMAT CSV" | 
    clickhouse-client --host="<new host>" --port="<new port>" --user="<user name>" --password="<password>"   --query="INSERT INTO <database_name>.<table_name> FORMAT CSV"

Erros de verificação de migração e soluções

Mensagem de erro

Descrição

Solução

Missing unique distributed table or sharding_key not set.

Uma local table no self-managed cluster não possui uma distributed table única.

Crie uma distributed table correspondente para a local table no self-managed cluster.

The corresponding distributed table is not unique.

Uma local table no self-managed cluster corresponde a múltiplas distributed tables.

Exclua as distributed tables redundantes no self-managed cluster e mantenha apenas uma.

MergeTree table on a multi-replica cluster.

O self-managed cluster é um multi-replica cluster, mas contém uma non-replicated table. A migração não é suportada porque os dados são inconsistentes entre as replicas.

Why are non-replicated tables not allowed when you scale or migrate multi-replica instances?

Data reserved table on destination cluster.

A tabela a ser migrada já existe e contém dados no destination cluster.

Exclua a tabela correspondente do destination cluster.

Columns of distributed table and local table conflict

As colunas da distributed table e da local table no self-managed cluster são inconsistentes.

Recrie a distributed table no self-managed cluster para garantir que seu esquema seja consistente com a local table.

Insufficient storage space.

O destination cluster tem storage space insuficiente.

Aumente o storage space em disco do destination cluster. Garanta que o storage space total do destination cluster seja pelo menos 1,2 vezes o espaço utilizado do self-managed cluster. Para mais informações, consulte Vertical and horizontal scaling of community-compatible clusters.

Missing system table.

Uma system table está ausente no self-managed cluster.

Modifique o arquivo de configuração config.xml do self-managed cluster para criar as system tables necessárias. Para mais informações, consulte Step 1: Check the self-managed cluster and enable system tables.

The table is incomplete across different nodes.

A tabela está ausente em alguns nodes.

Crie tabelas com o mesmo nome em diferentes shards. Para uma tabela interna de uma materialized view, renomeie a tabela interna e, em seguida, recrie a materialized view para apontar para a tabela renomeada. Para mais informações, consulte The inner table of a materialized view is inconsistent across shards.

Calculando o tempo de merge pós-migração

Após a migração, o cluster de destino realiza temporariamente operações frequentes de merge. Isso aumenta o uso de I/O e pode causar maior latência nas requisições de service. Se seus services forem sensíveis à latência de leitura e escrita, considere fazer upgrade do tipo de instância e do nível de desempenho do ESSD para encurtar esse período de alto uso de I/O. Para mais informações, consulte Vertical scaling, scale-out, and scale-in of community-compatible clusters.

Use as seguintes fórmulas para calcular o tempo de merge após a migração:

Nota

Estas fórmulas aplicam-se tanto a clusters de réplica única quanto a clusters master-replica.

  • Tempo total estimado para operações frequentes de merge = MAX(hot data merge time, cold data merge time)

    • Tempo de merge de dados quentes = amount of hot data on a single node * 2 / MIN(instance type bandwidth, disk bandwidth * n)

    • Tempo de merge de dados frios = (amount of cold data / number of nodes) / MIN(instance type bandwidth, OSS read bandwidth) + (amount of cold data / number of nodes) / MIN(instance type bandwidth, OSS write bandwidth)

A lista a seguir descreve os parâmetros usados nas fórmulas:

  • Quantidade de dados quentes em um único nó: Visualize este valor na linha Disk Usage - Single-Node Statistics. Para mais informações, consulte View cluster monitoring information.

  • Largura de banda do tipo de instância

    Nota

    Esses valores de largura de banda não são absolutos e variam dependendo dos tipos de máquina usados pelo backend do ApsaraDB for ClickHouse. Os valores fornecidos são mínimos e servem apenas como referência.

    Especificação

    Largura de banda (MB/s)

    Standard 8 núcleos 32 GB

    250

    Standard 16 núcleos 64 GB

    375

    Standard 24 núcleos 96 GB

    500

    Standard 32 núcleos 128 GB

    625

    Standard 64 núcleos 256 GB

    1250

    Standard 80 núcleos 384 GB

    2000

    Standard 104 núcleos 384 GB

    2000

  • Largura de banda do disco: Encontre este valor na linha Maximum throughput per disk (MB/s) da tabela ESSD performance level.

  • n: O número de discos em um único nó. Execute o seguinte comando para obter este valor: SELECT count() FROM system.disks WHERE type = 'local';

  • Quantidade de dados frios: Visualize este valor na linha clickhouse_cold_storage_data. Para mais informações, consulte View cluster monitoring information.

  • Número de nós: O número de nós no cluster. Execute o seguinte comando para obter este valor: SELECT count() FROM system.clusters WHERE cluster = 'default' and replica_num=1;

  • Largura de banda de leitura do OSS: Encontre este valor na coluna Total Intranet and Internet Download Bandwidth da tabela OSS bandwidth.

  • Largura de banda de escrita do OSS: Encontre este valor na coluna Total Intranet and Internet Upload Bandwidth da tabela OSS bandwidth.

FAQ

  • P: Como resolvo o erro "Too many partitions for single INSERT block (more than 100)"?

    R: Esse erro ocorre porque uma única operação INSERT excede o limite max_partitions_per_insert_block, que é 100 por padrão. No ClickHouse, cada operação de escrita cria uma parte de dados, e uma partição pode conter uma ou mais partes de dados. Se uma única operação INSERT gravar dados em muitas partições, ela cria um número excessivo de partes de dados. Isso pode degradar significativamente o desempenho de merge e consulta. O ClickHouse impõe esse limite para evitar degradação de desempenho.

    Para resolver esse problema, ajuste o número de partições ou modifique o parâmetro max_partitions_per_insert_block.

    • Ajuste o esquema da tabela e o método de particionamento, ou evite inserir dados em muitas partições diferentes em uma única operação.

    • Se for necessário inserir dados em muitas partições de uma só vez, aumente o limite modificando o parâmetro max_partitions_per_insert_block. A sintaxe é a seguinte:

      SET GLOBAL ON cluster DEFAULT max_partitions_per_insert_block = XXX;
      Nota

      A comunidade ClickHouse recomenda usar o valor padrão de 100. Não defina esse valor muito alto, pois pode degradar o desempenho. Após a importação de dados em lote, recomendamos redefinir o valor para o padrão.

  • P: Por que a conexão da minha instância de destino do ApsaraDB for ClickHouse com meu banco de dados ClickHouse autogerenciado falha?

    R: Esse problema ocorre se o seu banco de dados ClickHouse autogerenciado estiver atrás de um firewall ou usar uma lista de permissões. Para resolver isso, adicione o bloco CIDR IPv4 do vSwitch do cluster ApsaraDB for ClickHouse à lista de permissões do seu banco de dados autogerenciado. Para informações sobre como obter o bloco CIDR IPv4 do vSwitch do cluster ApsaraDB for ClickHouse, consulte View IPv4 CIDR block.

  • P: Ao dimensionar ou migrar uma instância multi-replica, por que tabelas não-Replicated não são permitidas? Se existirem, como resolvo esse problema?

    R: O motivo dessa restrição e a solução são os seguintes:

    • Motivo: Uma instância multi-replica requer tabelas Replicated para sincronizar dados entre réplicas. Sem tabelas Replicated, a configuração multi-replica é ineficaz. A ferramenta de migração seleciona aleatoriamente uma réplica como fonte de dados e migra seus dados para a instância de destino.

      Se existirem tabelas não-Replicated, os dados não são sincronizados entre as réplicas, o que significa que cada réplica mantém dados isolados. Como a ferramenta de migração migra de apenas uma réplica, esse processo causa perda de dados. Por exemplo, conforme mostrado na figura a seguir, a tabela MergeTree na réplica 0 (r0) contém os dados 1, 2 e 3. A tabela MergeTree na réplica 1 (r1) contém os dados 4 e 5. Se a ferramenta de migração selecionar r0 como fonte, apenas os dados 1, 2 e 3 serão migrados para a instância de destino.

      image
    • Solução: Se for possível excluir as tabelas não-Replicated na instância de origem, recomendamos fazê-lo. Caso contrário, substitua as tabelas não-Replicated por tabelas Replicated. Siga estas etapas:

      1. Faça logon na instância de origem.

      2. Crie uma tabela Replicated. O esquema da tabela deve ser idêntico ao da tabela não-Replicated que deseja substituir, exceto pela engine.

      3. Migre manualmente os dados da tabela não-Replicated para a nova tabela Replicated. A instrução de migração é a seguinte:

        Importante

        Realize esta migração para cada réplica. Por exemplo, execute a instrução tanto em r0 quanto em r1.

        Obtenha o endereço IP do nó para a instrução executando SELECT * FROM system.clusters;.

        INSERT INTO <destination_database>.<new_replicated_table> 
        SELECT * 
        FROM remote('<node_IP_address>:3003', '<source_database>', '<non_replicated_table_to_replace>', '<username>', '<password>')
        [WHERE _partition_id = '<partition_id>']
        SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;
      4. Troque os nomes da tabela não-Replicated e da tabela Replicated.

      EXCHANGE TABLES <source_database>.<non_replicated_table_to_replace> AND <destination_database>.<new_replicated_table> ON CLUSTER default;