Use o Data Transmission Service (DTS) para migrar dados de um cluster PolarDB for PostgreSQL para uma instância SelectDB destinada à análise de grandes volumes de dados.
Escolha uma estratégia de migração
O DTS oferece três tipos de migração que você pode combinar conforme suas necessidades:
|
Estratégia |
Tipos de migração |
Quando usar |
Tempo de inatividade |
|
Migração completa |
Schema Migration + Full Data Migration |
Migração única; sem novas gravações de dados durante o processo |
Necessário |
|
Migração online |
Schema Migration + Full Data Migration + Incremental Data Migration |
Migração sem tempo de inatividade; o source continua recebendo gravações |
Nenhum |
Para a maioria das cargas de trabalho em produção, use a estratégia de migração online. Se optar apenas pela migração completa, interrompa todas as gravações no banco de dados source antes de iniciar. Caso contrário, ocorrerá inconsistência de dados entre o source e o destino.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância SelectDB de destino com espaço de armazenamento superior ao espaço utilizado pelo cluster PolarDB for PostgreSQL source. Para instruções de configuração, consulte Crie uma instância
Uma conta de banco de dados privilegiada no cluster PolarDB for PostgreSQL source (a conta deve ser proprietária do banco de dados). Para instruções de configuração, consulte Crie uma conta de banco de dados e Gerenciamento de 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. Para instruções de configuração, consulte Gerenciamento de permissões do cluster e Gerenciamento básico de permissões
Para incremental data migration: defina o parâmetro
wal_leveldo cluster PolarDB for PostgreSQL source comological. Verifique e atualize esse parâmetro nas configurações de parâmetros do clusterPara failover primário/secundário durante a migração: ative o recurso de failover de slot de replicação lógica no cluster source. Consulte Failover de slot de replicação lógica
Se o cluster PolarDB for PostgreSQL source não oferecer suporte ao recurso de failover de slot de replicação lógica (por exemplo, quando Database Engine estiver definido como PostgreSQL 14 ) e você acionar um failover primário/secundário, a tarefa de migração falhará e não poderá ser recuperada.
Limitações
Banco de dados source
-
As tabelas a serem migradas devem ter uma chave primária ou um índice UNIQUE NOT NULL. Dependendo das suas tabelas:
Se todas as tabelas tiverem chave primária ou índice único não nulo: garanta que os campos da tabela sejam únicos. Caso contrário, poderão existir dados duplicados no banco de dados de destino.
Se algumas tabelas não tiverem nem chave primária nem índice único não nulo: ao configurar a instância, selecione Schema Migration em Migration Types. Em seguida, na etapa Configurations for Databases, Tables, and Columns, defina Engine como duplicate para essas tabelas. Caso contrário, a instância de migração poderá falhar ou haver perda de dados.
Durante a migração de schema e a migração completa de dados, não execute operações DDL que alterem o schema do banco de dados ou da tabela. A tarefa de migração falhará.
Na migração incremental de dados, uma única alteração de dados superior a 256 MB causa falha irrecuperável na instância de migração. Reconfigure a instância de migração.
Transações de longa duração durante a migração incremental podem causar acúmulo de logs WAL (write-ahead logging) e exaurir o espaço de armazenamento no banco de dados source.
Banco de dados de destino
As tabelas na instância SelectDB de destino devem usar o mecanismo Unique ou Duplicate.
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 objetos que não começam com letra ou cujos nomes contenham caracteres chineses.
Não adicione nós de backend (BE) à instância SelectDB durante a migração. A tarefa falhará. Reinicie a instância de migração para retomar.
Não crie clusters na instância SelectDB de destino durante a migração. A tarefa falhará. Reinicie a instância de migração para retomar.
Comportamento da migração
Uma instância de migração pode migrar apenas um banco de dados. Para migrar vários bancos de dados, crie uma instância de migração separada para cada um.
O DTS não oferece suporte a tabelas de extensão TimescaleDB ou tabelas com herança entre schemas.
O DTS não valida metadados como sequences. Verifique manualmente a validade dos metadados após a migração.
Ao migrar tabelas particionadas, inclua tanto a tabela pai quanto todas as partições filhas como objetos de migração. A tabela pai de uma tabela particionada do PostgreSQL não armazena dados diretamente; todos os dados residem nas partições filhas. A ausência de partições filhas causa inconsistência de dados.
Em um cenário de mesclagem de várias tabelas (várias tabelas source migradas para uma única tabela de destino), os schemas de todas as tabelas source devem ser idênticos.
Não execute operações DDL que modifiquem várias colunas simultaneamente ou modifiquem a mesma tabela em sucessão.
O DTS cria as seguintes tabelas temporárias no banco de dados source durante a migração incremental. Não as exclua, pois a exclusão causa falha na tarefa. O DTS as remove automaticamente após a liberação da instância de migração:
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_sessionepublic.aliyun_dts_instance
Comportamento do mecanismo Unique
Se a tabela de destino usar o mecanismo Unique, todas as chaves únicas na tabela de destino devem existir na tabela source e ser incluídas como objetos de migração. Caso contrário, poderá ocorrer inconsistência de dados.
Comportamento do mecanismo Duplicate
Se a tabela de destino usar o mecanismo Duplicate:
O DTS converte instruções UPDATE e DELETE em instruções INSERT.
Linhas duplicadas podem aparecer no destino nestes casos: ocorrência de nova tentativa, reinício da instância de migração ou execução de duas ou mais operações DML na mesma linha após o início da migração. Use as colunas adicionais (
_is_deleted,_versione_record_id) para identificar e remover duplicatas.
Requisitos para migração incremental de dados
Antes de gravar dados nas tabelas incluídas em uma migração incremental, execute o seguinte comando em cada tabela no banco de dados source:
ALTER TABLE schema.table REPLICA IDENTITY FULL;
Substitua schema e table pelo nome real do schema e da tabela. Execute este comando fora do horário de pico e não bloqueie as tabelas. O bloqueio pode causar deadlock.
Se você ignorar o item de pré-verificação relacionado, o DTS executará este comando automaticamente durante a inicialização da instância. Isso ocorre 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 reconstruída usando o comando RENAME.
Gerenciamento de slots de replicação
O DTS cria um slot de replicação com o prefixo dts_sync_ no banco de dados source para replicar dados incrementais. O slot retém até 15 minutos de logs incrementais.
Quando uma tarefa de migração falha ou a instância de migração é liberada, o DTS tenta limpar o slot de replicação automaticamente. A limpeza manual é necessária nos seguintes casos:
A senha da conta do banco de dados source foi alterada durante a migração.
O endereço ip do DTS foi removido da lista de permissões durante a migração.
Ocorreu um failover primário/secundário. Faça logon no banco de dados secundário para realizar a limpeza.
Slots de replicação não limpos se acumulam e consomem espaço em disco, o que pode tornar o banco de dados source indisponível.
Faturamento
|
Tipo de migração |
Custo de configuração do link |
Custo de transferência de dados |
|
Schema migration + full data migration |
Gratuito |
Gratuito |
|
Incremental data migration |
Cobrado. Consulte Visualize o faturamento. |
— |
Operações SQL suportadas para migração incremental
|
Tipo |
Operações |
|
DML |
INSERT, UPDATE, DELETE |
|
DDL |
ADD COLUMN, DROP COLUMN |
Migrar dados do PolarDB for PostgreSQL para o SelectDB
Etapa 1: Acesse a página Data Migration
Use um dos seguintes métodos:
Console do DTS
Faça logon 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 reside.
Console do DMS
Nota
A operação real pode variar dependendo do modo e do layout do console do DMS. Para mais informações, consulte Modo simples e Personalizar o layout e o estilo do console do DMS.
Faça logon no console do DMS
Na barra de navegação superior, passe o ponteiro sobre .
Na lista suspensa à direita de Data Migration Tasks, selecione a região onde a instância de migração reside.
Etapa 2: Crie uma tarefa
Clique em Create Task para acessar a página de configuração da tarefa.
Etapa 3: Configure bancos de dados source e de destino
Configure os parâmetros descritos na tabela a seguir.
| Seção | Parâmetro | Descrição |
|---|---|---|
| — | Task Name | Nome da tarefa do DTS. O DTS gera um nome automaticamente. Especifique um nome descritivo para facilitar a identificação. O nome não precisa ser único. |
| Source Database | Select Existing Connection | Se você tiver uma instância de banco de dados registrada no DTS, selecione-a na lista suspensa. O DTS preencherá os parâmetros restantes automaticamente. Consulte Gerenciar conexões de banco de dados. Caso contrário, configure os parâmetros abaixo. |
| Database Type | Selecione PolarDB for PostgreSQL. | |
| Access Method | Selecione Alibaba Cloud Instance. | |
| Instance Region | Selecione a região onde o cluster PolarDB for PostgreSQL source reside. | |
| Replicate Data Across Alibaba Cloud Accounts | Selecione No (este exemplo usa uma instância na conta atual). | |
| Instance ID | Selecione o id do cluster PolarDB for PostgreSQL source. | |
| 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. Consulte Pré-requisitos para ver as permissões necessárias. | |
| Database Password | Insira a senha da conta do banco de dados. | |
| Destination Database | Select Existing Connection | Se você tiver uma instância de banco de dados registrada no DTS, selecione-a na lista suspensa. 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 (este exemplo usa uma instância na conta atual). | |
| Instance ID | Selecione o id da instância SelectDB de destino. | |
| Database Account | Insira a conta do banco de dados. Consulte Pré-requisitos para ver as permissões necessárias. | |
| Database Password | Insira a senha da conta do banco de dados. |
Após concluir a configuração, clique em Test Connectivity and Proceed na parte inferior da página.
Adicione os endereços ip dos servidores do DTS às configurações de segurança dos bancos de dados source e de destino. O DTS pode adicionar esses endereços ip automaticamente ou você pode adicioná-los manualmente. Consulte Adicionar endereços ip de servidores do DTS a uma lista de permissões .
Etapa 4: Configure objetos de migração
Na página Configure Objects, defina os seguintes parâmetros.
| Parâmetro | Descrição |
|---|---|
| Migration Types | Selecione os tipos de migração com base na sua estratégia: <br>- Full migration (sem tolerância a tempo de inatividade): Selecione Schema Migration e Full Data Migration. Interrompa todas as gravações no source antes de iniciar. <br>- Online migration (tempo de inatividade zero): Selecione Schema Migration, Full Data Migration e Incremental Data Migration. |
| Processing Mode of Conflicting Tables | - Precheck and Report Errors: O DTS verifica se existem tabelas com o mesmo nome no destino. Se houver duplicatas, a pré-verificação falhará. Para resolver, renomeie a tabela de destino usando o recurso de mapeamento de nomes de objetos. <br>- Ignore Errors and Proceed: O DTS ignora a verificação de nomes duplicados. Aviso
Isso pode causar inconsistência de dados. Se os schemas coincidirem, os registros do source substituirão os registros de destino com a mesma chave primária. Se os schemas diferirem, a migração poderá falhar ou produzir dados incompletos. Use com cautela. |
| Capitalization of Object Names in Destination Instance | Controla a capitalização dos nomes de bancos de dados, tabelas e colunas no destino. O padrão é DTS default policy. Consulte Especificar a capitalização de nomes de objetos na instância de destino. |
| Source Objects | Selecione os objetos a serem migrados. Clique no ícone |
| Selected Objects | - Para mapear um objeto para um nome ou destino diferente, clique com o botão direito no objeto e selecione a opção de mapeamento. Consulte Mapear nomes de objetos. <br>- Para remover um objeto, clique nele e depois clique no ícone bucket_count de uma tabela (disponível quando Schema Migration está selecionado e a granularidade do objeto de migração é tabela): clique com o botão direito na tabela, defina Enable Parameter Settings como Yesconfigurações de notificação de alerta, insira o valor e clique em OK. <br>- Para filtrar linhas por condições SQL, clique com o botão direito em uma tabela e especifique as condições. Consulte Especificar condições de filtro. <br>- Para selecionar quais operações SQL migrar incrementalmente, clique com o botão direito em um objeto e selecione as operações. |
Se você não selecionar Schema Migration, crie manualmente as tabelas de destino com o modelo de dados Unique ou Duplicate antes de iniciar a migração. Consulte Mapeamentos de tipos de dados, Colunas adicionais e Modelos de dados.
O valor do parâmetro
bucket_countdeve ser um número inteiro positivo. O valor padrão é auto.Se você usar o mapeamento de nomes de objetos para renomear um objeto, outros objetos dependentes dele poderão falhar na migração.
O mapeamento de nomes de objetos aplica-se a bancos de dados, tabelas e colunas. Se um nome contiver caracteres chineses, renomeie-o para um nome apenas ASCII. Caso contrário, a tarefa poderá falhar.
Etapa 5: Configure definições avançadas
Clique em Next: Advanced Settings e configure os seguintes parâmetros.
|
Parâmetro |
Descrição |
|
Dedicated Cluster for Task Scheduling |
Por padrão, o DTS usa um cluster compartilhado. Adquira um cluster dedicado para melhorar a estabilidade da tarefa de migração. Consulte O que é um cluster dedicado do DTS. |
|
Retry Time for Failed Connections |
Tempo durante o qual o DTS tenta reconectar após uma falha de conexão. Intervalo válido: 10–1.440 minutos. Padrão: 720 minutos. Defina um valor maior que 30. Se o DTS reconectar dentro da janela de tentativas, a tarefa será retomada; caso contrário, ela falhará. Nota: Se várias tarefas compartilharem o mesmo banco de dados source ou de destino, o último tempo de tentativa configurado terá precedência. O DTS cobra pela instância durante as tentativas. |
|
Retry Time for Other Issues |
Tempo durante o qual o DTS tenta novamente após falhas que não sejam de conexão (como erros DDL ou DML). Intervalo válido: 1–1.440 minutos. Padrão: 10 minutos. Defina um valor maior que 10. Deve ser menor que Retry Time for Failed Connections. |
|
Enable Throttling for Full Data Migration |
Limita a carga de leitura/gravação nos bancos de dados source e de destino durante a migração completa. Configure Queries per second (QPS) to the source database, RPS of Full Data Migration e Data migration speed for full migration (MB/s). Disponível apenas quando Full Data Migration estiver selecionado. |
|
Enable Throttling for Incremental Data Migration |
Limita a carga durante a migração incremental. Configure RPS of Incremental Data Migration e Data migration speed for incremental migration (MB/s). Disponível apenas quando Incremental Data Migration estiver selecionado. |
|
Environment Tag |
(Opcional) Aplique uma tag de ambiente à instância. |
|
Configure ETL |
Ativa o recurso de extração, transformação e carga (ETL). Selecione Yes para inserir instruções de processamento de dados. Consulte Configure ETL em uma tarefa de migração ou sincronização de dados. |
|
Monitoring and Alerting |
Configura alertas para falhas de tarefa ou latência acima de um limiar. Selecione Yes para configurar limiares de alerta e definições de notificação. Consulte Configure monitoramento e alertas. |
Etapa 6: Configure campos de banco de dados e tabelas (opcional)
Clique em Next: Configure Database and Table Fields para definir a Primary Key Column, Distribution Key e Engine das tabelas de destino.
Esta etapa está disponível apenas quando Schema Migration estiver selecionado. Para visualizar todas as tabelas, defina Definition Status como All .
Primary Key Column pode ser uma chave primária composta. Selecione uma ou mais colunas em Primary Key Column para usar como Distribution Key .
Para tabelas sem chave primária ou restrição UNIQUE, defina Engine como duplicate . Caso contrário, a migração poderá falhar ou haver perda de dados.
Etapa 7: Execute a pré-verificação
Clique em Next: Save Task Settings and Precheck.
Para visualizar os parâmetros da api para configurar esta tarefa, passe o mouse sobre Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters antes de prosseguir.
O DTS executa uma pré-verificação antes de iniciar a migração. Se a pré-verificação falhar:
Para itens com falha: clique em View Details, analise os resultados, resolva os problemas e clique em Precheck Again.
Para itens de alerta: se o alerta puder ser ignorado, clique em Confirm Alert Details > Ignore > OK > Precheck Again. Observe que ignorar alertas pode causar inconsistência de dados.
Etapa 8: Adquirir a instância
Aguarde até que Success Rate atinja 100% e clique em Next: Purchase Instance.
-
Na página Purchase Instance, configure a classe da instância:
Seção Parâmetro Descrição New Instance Class Resource Group O grupo de recursos para a instância de migração. Padrão: default resource group. Consulte O que é o Resource Management?. Instance Class A classe da instância determina a velocidade da migração. Consulte Classes de instâncias de migração de dados. Leia e marque a caixa de seleção Data Transmission Service (Pay-as-you-go) Service Terms.
Clique em Buy and Start e, em seguida, clique em OK na caixa de diálogo de confirmação.
Monitore o progresso na página Data Migration:
Apenas migração completa: a tarefa para automaticamente quando concluída. O status mostra Completed.
Migração incremental incluída: a tarefa é executada continuamente e nunca para automaticamente. O status mostra Running.
Durante a migração completa de dados, o DTS consome recursos de leitura e gravação nos bancos de dados source e de destino, o que aumenta a carga do banco de dados. Execute a migração fora do horário de pico, quando a carga de cpu em ambos os bancos de dados estiver abaixo de 30%.
Mapeamentos de tipos de dados
Os tipos de dados são convertidos ao migrar do PolarDB for PostgreSQL para o SelectDB. Revise os mapeamentos antes da migração, especialmente para tipos com possíveis diferenças de precisão ou semântica.
| Categoria | Tipo PolarDB for PostgreSQL | Tipo SelectDB |
|---|---|---|
| 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 |
| 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 |
Notas importantes sobre conversão:
CHAR(n) e VARCHAR(n): Convertidos para
VARCHAR(4*n)para evitar perda de dados devido a caracteres multibyte. Se nenhum comprimento for especificado, o SelectDB usa o padrãoVARCHAR(65533). Se o comprimento resultante exceder 65.533, os dados serão convertidos paraSTRING.
Colunas adicionais
O DTS adiciona automaticamente as seguintes colunas às tabelas de destino que usam o mecanismo Duplicate. Essas colunas permitem identificar e remover registros duplicados.
|
Coluna |
Tipo de dado |
Padrão |
Valor |
|
|
Int |
0 |
INSERT ou UPDATE: |
|
|
Bigint |
0 |
Migração completa: |
|
|
Bigint |
0 |
Migração completa: |
Notas de uso
Latência da migração incremental
O DTS usa uma política de sincronização em lote para reduzir a carga no destino. Por padrão, cada objeto de sincronização é gravado no máximo uma vez a cada 5 segundos, resultando em uma latência de sincronização normal geralmente dentro de 10 segundos.
Para reduzir a latência, ajuste o parâmetro selectdb.reservoir.timeout.milliseconds da instância de migração no console do DTS. O intervalo válido é de 1.000 a 10.000 milissegundos.
Um tempo de agrupamento menor aumenta a frequência de gravação, o que eleva a carga e o tempo de resposta no destino. Isso, por sua vez, pode aumentar a latência de sincronização. Ajuste com base na carga real do destino.
Recuperação de falha da instância
Se uma instância de migração falhar, o suporte do DTS tentará a recuperação dentro de 8 horas. Durante a recuperação, a instância pode ser reiniciada ou seus parâmetros ajustados (apenas os parâmetros da instância do DTS são modificados; os parâmetros do banco de dados não são alterados). Para obter a lista de parâmetros que podem ser modificados, consulte Modifique parâmetros da instância.
Migração fora de pico
Execute a migração fora do horário de pico, quando a carga de cpu nos bancos de dados source e de destino estiver abaixo de 30%. Isso reduz o risco de degradação de desempenho nas cargas de trabalho de produção.