O Data Transmission Service (DTS) permite migrar dados de bancos de dados PostgreSQL, como instâncias auto-gerenciadas ou ApsaraDB RDS for PostgreSQL, para o ApsaraDB for SelectDB, destinado a análises de dados em larga escala. Este tópico detalha todo o fluxo de trabalho de migração, incluindo migração de schema, migração completa de dados e migração incremental opcional.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância de destino ApsaraDB for SelectDB com espaço de armazenamento superior ao da instância RDS PostgreSQL de origem. Consulte Criar uma instância.
Uma conta de banco de dados privilegiada na instância RDS PostgreSQL de origem, proprietária do banco de dados a ser migrado. Consulte Criar uma conta e Criar um banco de dados.
Uma conta de banco de dados na instância SelectDB de destino com as seguintes permissões: Usage_priv, Select_priv, Load_priv, Alter_priv, Create_priv e Drop_priv. Consulte Gerenciamento de Permissões do Cluster e Gerenciamento Básico de Permissões.
Escolher um tipo de migração
O DTS oferece duas estratégias de migração. Use as orientações abaixo para escolher a mais adequada antes de configurar a tarefa.
|
Tipo de migração |
Quando usar |
Faturamento |
|
Migração de schema + migração completa de dados |
Migração única com tempo de inatividade aceitável. Interrompa as gravações na origem antes de iniciar. |
Gratuito |
|
Migração de schema + migração completa + migração incremental |
Migração sem tempo de inatividade. O DTS mantém o destino sincronizado enquanto a origem continua recebendo gravações. |
A migração incremental é cobrada. Consulte Visão geral do faturamento. |
Se você selecionar a migração incremental de dados, não grave novos dados na instância de origem durante o período de migração, pois isso pode causar inconsistência nos dados.
Limitações
Revise todas as limitações aplicáveis ao seu cenário antes de iniciar.
Requisitos do banco de dados de origem
Largura de banda: O servidor que hospeda o banco de dados de origem deve ter largura de banda de saída suficiente. Caso contrário, a velocidade de migração de dados será afetada.
-
Tabelas com chaves primárias ou restrições UNIQUE: Garanta que os campos da tabela sejam únicos. Do contrário, podem existir dados duplicados no banco de dados de destino.
Se o DTS não criar a tabela de destino que recebe os dados (ou seja, Schema Migration não estiver selecionado), garanta que a tabela de destino tenha a mesma chave primária ou restrição UNIQUE não nula da tabela de origem. Caso contrário, dados duplicados podem surgir no banco de dados de destino.
Tabelas sem chave primária ou restrição UNIQUE: Selecione Schema Migration ao configurar a tarefa e defina o mecanismo da tabela como duplicate.
Nome do banco de dados: O nome do banco de dados não pode conter hífen (-). Por exemplo,
dts-testdatanão é suportado.Quantidade de tabelas: Ao migrar no nível de tabela com mapeamento de nomes de colunas, uma única tarefa suporta no máximo 1.000 tabelas. Para migrações maiores, divida as tabelas em várias tarefas ou migre o banco de dados inteiro.
Operações DDL: Não execute operações DDL no banco de dados de origem durante a migração completa de dados.
Tamanho dos dados: Se uma única linha de dados de alteração incremental exceder 256 MB, a instância de migração falhará e não poderá ser recuperada. Será necessário reconfigurar a instância de migração.
-
Write-Ahead Logging (WAL):
Defina
wal_levelcomological.Para migração apenas incremental: retenha logs WAL por mais de 24 horas.
Para migração completa + incremental: retenha logs WAL por pelo menos 7 dias. É possível alterar o período de retenção de logs para mais de 24 horas após a conclusão da migração completa.
ImportanteSe a retenção de logs WAL for inferior à exigida pelo DTS e a tarefa falhar devido à falta de logs, essa situação não será coberta pelo Acordo de Nível de Serviço (SLA) do DTS.
Failover de Slot de Replicação Lógica: A instância RDS PostgreSQL deve suportar e ter o Failover de Slot de Replicação Lógica ativado. Consulte Failover de Slot de Replicação Lógica.
Transações de longa duração: Se o banco de dados de origem tiver transações de longa duração e a tarefa incluir migração incremental, os dados WAL acumularão até que a transação seja confirmada. Monitore o espaço em disco da origem para evitar que ele se esgote.
Atualizações de versão principal: Não atualize a versão principal do banco de dados de origem enquanto a instância de migração estiver em execução. Essa ação causa falha permanente na instância.
Requisitos do SelectDB de destino
As tabelas devem usar o mecanismo Unique ou Duplicate. Consulte Modelo de Dados para obter orientações.
Se a tabela de destino utilizar o mecanismo Unique, todas as chaves únicas da tabela de destino também devem existir na tabela de origem e estar incluídas nos objetos de migração.
Os nomes de bancos de dados e tabelas devem começar com uma letra. Use o recurso de mapeamento de nomes de objetos para renomear aqueles que não atendem a esse requisito.
Renomeie nomes de objetos contendo caracteres chineses para equivalentes ASCII usando o mapeamento de nomes de objetos. Caso contrário, a tarefa pode falhar.
Uma instância de migração pode migrar apenas um banco de dados. Para migrar vários bancos de dados, configure uma instância de migração separada para cada um.
Não adicione nós de backend (BE) ao banco de dados SelectDB durante a migração. Se a tarefa falhar por esse motivo, reinicie a instância de migração para retomar.
Não crie clusters na instância SelectDB de destino durante a migração. Se a tarefa falhar por esse motivo, reinicie a instância de migração para retomar.
O DTS valida o conteúdo dos dados, mas não valida metadados como Sequences. Valide esses metadados manualmente.
Requisitos de migração incremental
-
Execute o seguinte comando em cada tabela a ser migrada antes de gravar dados na origem:
ALTER TABLE schema.table REPLICA IDENTITY FULL;Substitua
schemaetablepelos nomes reais do schema e da tabela. Execute este comando fora dos horários de pico e não bloqueie as tabelas durante a execução para evitar deadlocks.Se você ignorar o item de pré-verificação relacionado, o DTS executará automaticamente este comando durante a inicialização da instância. Isso se aplica quando a instância é executada pela primeira vez, ou quando a granularidade do objeto de migração está definida como Schema e uma nova tabela é criada ou uma tabela existente é reconstruída usando o comando RENAME.
-
As operações SQL suportadas para migração incremental são:
Tipo de operação
Instruções SQL
DML
INSERT, UPDATE, DELETE
DDL
ADD COLUMN, DROP COLUMN
O DTS converte instruções UPDATE e DELETE em instruções INSERT para tabelas que usam o mecanismo Duplicate.
O DTS não consegue migrar tabelas de extensão TimescaleDB ou tabelas com herança entre schemas.
Ao migrar tabelas particionadas, inclua tanto a tabela pai quanto todas as tabelas filhas nos objetos de migração. A tabela pai em si não armazena dados, mas excluí-la causa inconsistência de dados.
Para cenários de mesclagem de múltiplas tabelas (várias tabelas de origem para uma tabela de destino), todas as tabelas de origem devem ter schemas idênticos.
Casos especiais
|
Cenário |
Requisito |
|
Origem é ApsaraDB RDS for PostgreSQL |
Não altere o endpoint ou a zona da instância durante a migração. |
|
Origem é uma instância PostgreSQL auto-gerenciada |
Um failover primário/secundário causa falha na tarefa de migração de dados. Além disso, certifique-se de que |
|
Origem é Google Cloud Platform Cloud SQL for PostgreSQL |
Use uma conta com permissões |
Comportamento interno do DTS
Durante a migração, o DTS cria os seguintes objetos no banco de dados de origem. Não os exclua — eles são removidos automaticamente quando a instância DTS é liberada:
Tabelas temporárias:
public.dts_pg_class,public.dts_pg_attribute,public.dts_pg_type,public.dts_pg_enum,public.dts_postgres_heartbeat,public.dts_ddl_command,public.dts_args_session,public.aliyun_dts_instance-
Slot de replicação (prefixo:
dts_sync_): Usado para buscar logs incrementais dos últimos 15 minutos. O DTS limpa este slot quando a migração falha ou a instância é liberada.Se você alterar a senha da conta do banco de dados de origem ou remover endereços IP do DTS da lista de permissões durante a migração, o slot de replicação não poderá ser limpo automaticamente. Limpe-o manualmente para evitar acúmulo em disco. Se ocorrer um failover primário/secundário, faça login no banco de dados secundário para realizar a limpeza.
Criar uma tarefa de migração
Etapa 1: Acessar a página Data Migration
Use um dos consoles a seguir para acessar a página Data Migration.
Console do DTS
Faça login no console do DTS
No painel de navegação à esquerda, clique em Data Migration.
No canto superior esquerdo, selecione a região onde a instância de migração residirá.
Console do DMS
Nota
As etapas reais podem variar dependendo do modo e layout do console do DMS. Consulte Modo simples e Personalizar o layout e estilo do console do DMS.
Faça login no console do DMS
Na barra de navegação superior, passe o ponteiro sobre Data + AI > DTS (DTS) > Data Migration.
Na lista suspensa à direita de Data Migration Tasks, selecione a região onde a instância de migração residirá.
Etapa 2: Configurar bancos de dados de origem e destino
Clique em Create Task para abrir a página de configuração da tarefa e configure os parâmetros a seguir.
Nome da tarefa
|
Parâmetro |
Descrição |
|
Task Name |
O DTS gera um nome automaticamente. Especifique um nome descritivo para identificar a tarefa. O nome não precisa ser único. |
Banco de dados de origem
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Se a instância de origem já estiver registrada no DTS, selecione-a na lista. O DTS preenche os parâmetros restantes automaticamente. Caso contrário, configure os parâmetros abaixo. |
|
Database Type |
Selecione PostgreSQL. |
|
Access Method |
Selecione Alibaba Cloud Instance. |
|
Instance Region |
Selecione a região onde a instância RDS PostgreSQL de origem reside. |
|
Replicate Data Across Alibaba Cloud Accounts |
Selecione No se as instâncias de origem e destino pertencerem à mesma conta Alibaba Cloud. |
|
Instance ID |
Selecione o ID da instância RDS PostgreSQL de origem. |
|
Database Name |
Insira o nome do banco de dados que contém os objetos a serem migrados. |
|
Database Account |
Insira a conta do banco de dados da instância de origem. Consulte Pré-requisitos para ver as permissões necessárias. |
|
Database Password |
Insira a senha da conta do banco de dados. |
Banco de dados de destino
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Se a instância de destino já estiver registrada no DTS, selecione-a na lista. O DTS preenche os parâmetros restantes automaticamente. Caso contrário, configure os parâmetros abaixo. |
|
Database Type |
Selecione SelectDB. |
|
Access Method |
Selecione Alibaba Cloud Instance. |
|
Instance Region |
Selecione a região onde a instância SelectDB de destino reside. |
|
Replicate Data Across Alibaba Cloud Accounts |
Selecione No se ambas as instâncias pertencerem à mesma conta Alibaba Cloud. |
|
Instance ID |
Selecione o ID da instância SelectDB de destino. |
|
Database Account |
Insira a conta do banco de dados da instância de destino. Consulte Pré-requisitos para ver as permissões necessárias. |
|
Database Password |
Insira a senha da conta do banco de dados. |
Etapa 3: Testar conectividade e configurar objetos
-
Clique em Test Connectivity and Proceed.
Certifique-se de que os blocos CIDR dos servidores DTS foram adicionados às configurações de segurança dos bancos de dados de origem e destino. Consulte Adicionar endereços IP do servidor DTS a uma lista de permissões .
-
Na página Configure Objects, defina os seguintes parâmetros:
Parâmetro
Descrição
Migration Types
Selecione com base na sua estratégia de migração. Consulte Escolher um tipo de migração. Para migração sem tempo de inatividade, selecione Schema Migration, Full Data Migration e Incremental Data Migration. Para migração única, selecione Schema Migration e Full Data Migration.
Processing Mode of Conflicting Tables
Precheck and Report Errors (padrão): A tarefa falha durante a pré-verificação se existirem tabelas com o mesmo nome no destino. Ignore Errors and Proceed: O DTS ignora a verificação. Use com cautela — pode ocorrer inconsistência de dados se os schemas forem diferentes.
Capitalization of Object Names in Destination Instance
Determina como os nomes de bancos de dados, tabelas e colunas são capitalizados no destino. DTS default policy é selecionado por padrão. Consulte Especificar a capitalização de nomes de objetos na instância de destino.
Source Objects
Selecione objetos para migrar no nível de schema ou tabela e clique no ícone para adicioná-los aos Selected Objects.
Selected Objects
Clique com o botão direito em um objeto para renomeá-lo, definir condições de filtro ou selecionar operações SQL para migração incremental. Para definir o parâmetro
bucket_count, clique com o botão direito em uma tabela, vá para Parameter Settings, ative a configuração e especifique um valor. Para remover um objeto, clique nele e depois clique no ícone de remoção.- O parâmetro
bucket_countdeve ser um número inteiro positivo. O valor padrão é auto . - Se você renomear um objeto usando o mapeamento de nomes de objetos, outros objetos dependentes dele podem falhar na migração. - Para filtrar linhas, clique com o botão direito em uma tabela em Selected Objects e especifique condições WHERE. Consulte Especificar condições de filtro . -
Clique em Next: Advanced Settings e configure os seguintes parâmetros opcionais:
Parâmetro
Descrição
Dedicated Cluster for Task Scheduling
Por padrão, as tarefas são executadas no cluster compartilhado. Para maior estabilidade, adquira um cluster dedicado. Consulte O que é um cluster dedicado do DTS.
Retry Time for Failed Connections
Tempo durante o qual o DTS tenta novamente antes de marcar a tarefa como falha devido a problemas de conexão. Intervalo: 10–1.440 minutos. Padrão: 720 minutos. Defina para pelo menos 30 minutos.
Retry Time for Other Issues
Tempo durante o qual o DTS tenta novamente antes de falhar devido a erros DDL ou DML. Intervalo: 1–1.440 minutos. Padrão: 10 minutos. Deve ser menor que Retry Time for Failed Connections.
Enable Throttling for Full Data Migration
Limita o throughput de leitura/gravação durante a migração completa para reduzir a carga no banco de dados. Configure Queries per second (QPS) to the source database, RPS of Full Data Migration e Data migration speed for full migration (MB/s).
Enable Throttling for Incremental Data Migration
Limita o throughput durante a migração incremental. Configure RPS of Incremental Data Migration e Data migration speed for incremental migration (MB/s).
Environment Tag
Opcional. Adicione uma tag à instância para identificação do ambiente.
Configure ETL
Selecione Yesconfigurações de notificação de alerta para ativar o recurso de extração, transformação e carga (ETL). Consulte Configurar ETL em uma tarefa de migração ou sincronização de dados.
Monitoring and Alerting
Selecione Yes para receber alertas quando a tarefa falhar ou a latência de migração exceder um limiar. Consulte Configurar monitoramento e alertas.
-
(Opcional) Clique em Next: Configure Database and Table Fields para definir a Primary Key Column, Distribution Key e Engine para as tabelas de destino.
- Esta etapa está disponível apenas se você selecionou Schema Migration para Migration Types . Defina Definition Status como All para editar todas as tabelas. - A Primary Key Column pode ser uma chave primária composta. Selecione uma ou mais colunas da Primary Key Column como a Distribution Key . - Para tabelas sem chave primária ou restrição UNIQUE, defina Engine como duplicate . Caso contrário, a instância de migração pode falhar ou dados podem ser perdidos.
Etapa 4: Executar a pré-verificação
-
Clique em Next: Save Task Settings and Precheck.
Para visualizar os parâmetros da API para esta configuração de tarefa, passe o ponteiro sobre Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters .
-
Aguarde a conclusão da pré-verificação. Se algum item falhar:
Clique em View Details ao lado de cada item com falha, resolva o problema e clique em Precheck Again.
Para itens de alerta que podem ser ignorados, clique em Confirm Alert Details, depois clique em Ignore > OK > Precheck Again.
ImportanteIgnorar itens de alerta pode causar inconsistência de dados. Prossiga com cautela.
Etapa 5: Adquirir a instância e iniciar a migração
Aguarde até que a Success Rate atinja 100% e clique em Next: Purchase Instance.
-
Na página Purchase Instance, configure a classe da instância:
Parâmetro
Descrição
Resource Group
O grupo de recursos para a instância de migração. Padrão: default resource group. Consulte O que é Resource Management?
Instance Class
Controla a velocidade de migração. Consulte Classes de instância de migração de dados.
Leia e aceite os Data Transmission Service (Pay-as-you-go) Service Terms, depois clique em Buy and Start > OK.
Verificar status da migração
Após o início da tarefa, acesse a página Data Migration para monitorar o progresso:
Apenas migração completa: A tarefa para automaticamente quando concluída. O Status muda para Completed.
Migração completa + incremental: A fase incremental é executada continuamente. O Status mostra Running. Pare a tarefa manualmente quando estiver pronto para alternar para o destino.
Considerações de desempenho
Durante a migração completa, execute a tarefa quando a carga de CPU na origem e no destino estiver abaixo de 30%.
-
O DTS usa sincronização em lote para migração incremental. Por padrão, o DTS grava em cada objeto no máximo uma vez a cada 5 segundos, resultando em uma latência de sincronização típica dentro de 10 segundos. Para reduzir a latência, ajuste o parâmetro
selectdb.reservoir.timeout.millisecondsno console do DTS. Intervalo válido: 1.000–10.000 milissegundos.Reduzir o intervalo de lote aumenta a frequência de gravação no destino, o que pode elevar a carga do destino e o tempo de resposta de gravação. Ajuste conforme a capacidade do seu destino.
Se a instância de migração falhar, o suporte do DTS tentará recuperá-la dentro de 8 horas. A recuperação pode envolver reiniciar a instância ou ajustar seus parâmetros. Apenas os parâmetros da instância DTS são modificados — os parâmetros do banco de dados não são alterados.
Mapeamentos de tipos de dados
A tabela a seguir mostra como os tipos de dados do PostgreSQL são mapeados para os tipos de dados do SelectDB após a migração.
| Categoria | Tipo de dados PostgreSQL | Tipo de dados SelectDB | Observações |
|---|---|---|---|
| Numérico | SMALLINT | SMALLINT | |
| INTEGER | INT | ||
| BIGINT | BIGINT | ||
| DECIMAL | DECIMAL | ||
| NUMERIC | DECIMAL | ||
| REAL | DOUBLE | ||
| DOUBLE | DOUBLE | ||
| SMALLSERIAL | SMALLINT | ||
| SERIAL | INT | ||
| BIGSERIAL | BIGINT | ||
| Monetário | MONEY | STRING | |
| Caractere | CHAR(n), VARCHAR(n) | VARCHAR | Convertido para VARCHAR(4*n) para evitar perda de dados. Se nenhum comprimento for especificado, o padrão é VARCHAR(65533). Se o comprimento exceder 65533, convertido para STRING. |
| TEXT | STRING | ||
| Binário | BYTEA | STRING | |
| Data e hora | TIMESTAMP [(P)] WITHOUT TIME ZONE | DATETIMEV2 | |
| TIMESTAMP [(P)] WITH TIME ZONE | DATETIMEV2 | ||
| DATE | DATEV2 | ||
| TIME [(P)] WITHOUT TIME ZONE | VARCHAR(50) | ||
| TIME [(P)] WITH TIME ZONE | VARCHAR(50) | ||
| INTERVAL [FIELDS] [(P)] | STRING | ||
| Booleano | BOOLEAN | BOOLEAN | |
| Geométrico | POINT, LINE, LSEG, BOX, PATH, POLYGON, CIRCLE | STRING | |
| Endereço de rede | CIDR, INET, MACADDR, MACADDR8 | STRING | |
| Busca de texto | TSVECTOR | STRING | |
| XML | XML | STRING | |
| JSON | JSON | JSON |
Colunas adicionais para o modelo Duplicate
Para tabelas de destino que usam o modelo Duplicate, o DTS adiciona automaticamente as seguintes colunas. Use essas colunas para identificar e remover dados duplicados após novas tentativas ou reinicializações.
|
Coluna |
Tipo de dados |
Valor padrão |
Descrição |
|
|
Int |
0 |
|
|
|
Bigint |
0 |
|
|
|
Bigint |
0 |
|
Dados duplicados podem aparecer nos seguintes casos:
Ocorreu uma operação de nova tentativa na instância de migração.
A instância de migração foi reiniciada.
Duas ou mais operações DML foram realizadas na mesma linha após o início da migração.
Para tabelas que usam o mecanismo Duplicate, o DTS converte instruções UPDATE e DELETE em instruções INSERT.
Próximos passos
Para mapear nomes de objetos entre origem e destino, consulte Mapear nomes de objetos.
Para gerenciar conexões de banco de dados registradas no DTS, consulte Gerenciar conexões de banco de dados.
Para modificar parâmetros da instância após o início da tarefa, consulte Modificar parâmetros da instância.