Use o Data Transmission Service (DTS) para migrar dados de forma incremental de um banco de dados PostgreSQL auto-gerenciado para uma instância do ApsaraDB for PostgreSQL. O DTS oferece suporte à migração de esquema, migração completa de dados e migração incremental de dados, permitindo uma transição suave com tempo de inatividade mínimo.
Este tópico usa como exemplo um banco de dados auto-gerenciado com endereço IP público. Para migração completa de dados, consulte Migrar dados completos de um banco de dados PostgreSQL auto-gerenciado para uma instância do ApsaraDB for PostgreSQL.
Pré-requisitos
O banco de dados PostgreSQL auto-gerenciado de origem deve ser da versão 9.4.8 ou posterior, 9.5, 9,6 ou 10.0.
A instância de destino do ApsaraDB for PostgreSQL deve ter armazenamento suficiente para os dados de origem.
A porta do banco de dados PostgreSQL de origem deve estar acessível pela internet.
Observações de uso
Durante a migração completa de dados, o DTS consome recursos de leitura e gravação nos bancos de dados de origem e de destino, aumentando a carga sobre eles. Se seus bancos de dados apresentarem baixo desempenho, especificações reduzidas ou cargas de trabalho elevadas (por exemplo, se o banco de origem tiver muitas consultas SQL lentas ou tabelas sem chaves primárias, ou se ocorrerem deadlocks no banco de destino), esse aumento de carga pode sobrecarregar os sistemas ou até causar interrupções no serviço. Execute a migração de dados em horários de baixa demanda, como quando a utilização da CPU de ambos os bancos estiver abaixo de 30%.
-
Na migração incremental de dados, caso selecione um esquema como objeto de migração e depois crie uma nova tabela ou reconstrua uma tabela usando RENAME, execute
ALTER TABLE schema.table REPLICA IDENTITY FULL;antes de gravar dados na tabela.NotaSubstitua
schema
e
table
pelos nomes reais do esquema e da tabela.
Se uma tabela de origem não possuir chave primária nem restrição de unicidade e contiver dados não únicos, poderão ser criados dados duplicados no banco de destino.
O DTS tenta repetir automaticamente as tarefas com falha. Pare ou libere a tarefa antes de alternar as aplicações para a instância de destino para evitar que os dados de origem sobrescrevam os dados de destino.
Transações de longa duração no banco de dados de origem durante a migração incremental impedem a limpeza dos registros WAL, o que pode esgotar o espaço em disco.
Limitações
Cada tarefa de migração transfere apenas um banco de dados. Para migrar vários bancos, crie uma tarefa separada para cada um.
Os nomes dos bancos de dados não podem conter hifens (-). Exemplo: dts-testdata.
Caso ocorra um failover entre nó primário e secundário no banco de dados de origem durante a migração, não será possível retomar a migração incremental de dados.
-
A latência de replicação pode causar inconsistência de dados entre os nós primário e secundário. Use sempre o nó primário como source de dados.
NotaExecute a migração em horários de baixa demanda. É possível ajustar a taxa de migração conforme a carga do banco de dados de origem.
Modifique a taxa de transferência da migração completa de dados
.
O DTS valida o conteúdo dos dados, mas não valida metadados como sequences. Verifique manualmente os metadados das sequences.
-
Após o failover, as sequences no banco de dados de destino não continuam a partir do valor máximo da origem. Antes de alternar, consulte o valor máximo de cada sequence na origem e defina-o como valor inicial no destino. Consulte os valores das sequences:
do language plpgsql $$ declare nsp name; rel name; val int8; begin for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S' loop execute format($_$select last_value from %I.%I$_$, nsp, rel) into val; raise notice '%', format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1); end loop; end; $$; -
O failover entre primário e secundário durante a migração é suportado apenas no ApsaraDB RDS for PostgreSQL 11. Defina
rds_failover_slot_modecomosync.Failover de slot de replicação lógica.AvisoUm failover entre primário e secundário em um banco de dados PostgreSQL auto-gerenciado ou em outras versões do RDS interrompe a migração.
-
Durante a migração incremental de dados, apenas operações DML (INSERT, DELETE, UPDATE) são sincronizadas.
NotaSomente tarefas criadas após 1º de outubro de 2020 oferecem suporte à sincronização de DDL. Antes de configure a tarefa, crie triggers e funções no banco de dados de origem para capturar informações de DDL.
Usar triggers e funções para implementar migração incremental de DDL para PostgreSQL
.
Faturamento
|
Tipo de migração |
Taxa de configuração da tarefa |
Taxa de tráfego de internet |
|
Migração de esquema e migração completa de dados |
Gratuito. |
O DTS cobra uma taxa de tráfego de internet quando o Access Method do banco de dados de destino está definido como Public IP Address. Visualize o faturamento. |
|
Migração incremental de dados |
Pago. Visualize o faturamento. |
Permissões da conta do banco de dados
|
Banco de dados |
Migração de esquema |
Migração completa de dados |
Migração incremental de dados |
|
Banco de dados PostgreSQL auto-gerenciado |
Permissão USAGE em pg_catalog |
Permissão SELECT nos objetos de migração |
superuser |
|
Instância do ApsaraDB for PostgreSQL |
Permissões CREATE e USAGE nos objetos de migração |
Permissão de proprietário do esquema |
Permissão de proprietário do esquema |
Para criar contas e conceder permissões:
Banco de dados PostgreSQL auto-gerenciado:CREATE USER e GRANT.
-
Instância do ApsaraDB for PostgreSQL:Crie uma conta
.
Processo de migração de dados
Para resolver dependências de objetos e aumentar a taxa de sucesso da migração, o DTS migra esquemas e dados do PostgreSQL na seguinte ordem.
Para definições de migração de esquema, migração completa de dados e migração incremental de dados, consulte
.
| Processo de migração do DTS | Descrição |
| 1. Migração de esquema | O DTS migra as informações de esquema de TABLE, VIEW, SEQUENCE, FUNCTION, USER DEFINED TYPE, RULE, DOMAIN, OPERATION e AGGREGATE para o banco de dados de destino. Nota Plug-ins e funções escritos em C não são suportados. |
| 2. Migração completa de dados | O DTS migra todos os dados existentes dos objetos selecionados para o banco de dados de destino. |
| 3. Migração de esquema | O DTS migra as informações de esquema de TRIGGER e FOREIGN KEY para o banco de dados de destino. |
| 4. Migração incremental de dados | Após a migração completa de dados, o DTS migra as atualizações incrementais dos objetos selecionados para o banco de dados de destino.
A migração incremental de dados permite uma transição suave com tempo de inatividade mínimo.
Nota
|
Preparações
Estas etapas aplicam-se ao Linux.
-
Opcional: Baixe, compile e instale o código-fonte do PostgreSQL.
NotaIgnore esta etapa se o banco de dados já foi implantado a partir do código-fonte.
Baixe o código-fonte correspondente à versão do seu banco de dados no site oficial do PostgreSQL.
-
Execute os comandos a seguir para configure, compilar e instalar o código-fonte.
sudo ./configure --prefix=/usr/local/postgresql sudo make sudo make installImportanteO valor do prefixo deve ser diferente do caminho de instalação existente do PostgreSQL.
A versão do sistema operacional deve ser compatível com a versão do GCC.
Caso
sudo ./configurefalhe, faça ajustes com base no erro apresentado. Por exemplo, parareadline library not found. Use --without-readline to disable readline support., usesudo ./configure --without-readline.Se usar um método de instalação diferente, compile o plug-in ali_decoding em um ambiente de teste com as mesmas versões de sistema operacional e GCC.
-
Compile um novo arquivo ali_decoding a partir do código-fonte do PostgreSQL e substitua o arquivo existente.
-
Baixe o plug-in ali_decoding fornecido pelo DTS.
NotaExecute estes comandos para baixar e extrair o plug-in.
sudo wget https://github.com/aliyun/rds_dbsync/archive/refs/heads/master.zip unzip master.zip -
Copie o diretório ali_decoding para o diretório contrib da instalação compilada do PostgreSQL.
sudo cp rds_dbsync-master/ali_decoding /tmp/postgresql-9.4.26/contrib/ -rNotaSubstitua
/tmp/postgresql-9.4.26/contrib/
pelo diretório do código-fonte do seu PostgreSQL.
total 1068 -rw-r--r-- 1 1107 1107 384 Sep 27 2016 aclocal.m4 drwxrwxrwx 2 1107 1107 4096 Sep 27 2016 config -rw-r--r-- 1 root root 374806 Sep 7 10:10 config.log -rwxr-xr-x 1 root root 39032 Sep 7 10:10 config.status -rwxr-xr-x 1 1107 1107 471157 Sep 27 2016 configure -rw-r--r-- 1 1107 1107 75195 Sep 27 2016 configure.in drwxrwxrwx 56 1107 1107 4096 Sep 7 10:28 contrib -rw-r--r-- 1 1107 1107 1192 Sep 27 2016 COPYRIGHT drwxrwxrwx 3 1107 1107 4096 Sep 27 2016 doc -rw-r--r-- 1 root root 3638 Sep 7 10:10 GNUmakefile -rw-r--r-- 1 1107 1107 3638 Sep 27 2016 GNUmakefile.in -rw-r--r-- 1 1107 1107 283 Sep 27 2016 HISTORY -rw-r--r-- 1 1107 1107 75065 Sep 27 2016 INSTALL -rw-r--r-- 1 1107 1107 1489 Sep 27 2016 Makefile -rw-r--r-- 1 1107 1107 1209 Sep 27 2016 README drwxrwxrwx 16 1107 1107 4096 Sep 7 10:10 src -
No diretório ali_decoding, substitua o conteúdo do Makefile por:
# contrib/ali_decoding/Makefile MODULE_big = ali_decoding MODULES = ali_decoding OBJS = ali_decoding.o DATA = ali_decoding--0.0.1.sql ali_decoding--unpackaged--0.0.1.sql EXTENSION = ali_decoding NAME = ali_decoding #subdir = contrib/ali_decoding #top_builddir = ../.. #include $(top_builddir)/src/Makefile.global #include $(top_srcdir)/contrib/contrib-global.mk #PG_CONFIG = /usr/pgsql-9.6/bin/pg_config #pgsql_lib_dir := $(shell $(PG_CONFIG) --libdir) #PGXS := $(shell $(PG_CONFIG) --pgxs) #include $(PGXS) # For source code installation, use the following: ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else subdir = contrib/ali_decoding top_builddir = ../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif -
Opcional: Para o PostgreSQL 9.4 (9.4.8 a 9.4.26), remova o parâmetro false da função set_config_option no arquivo ali_decoding.c. A função modificada fica assim:
if (extra_float_digits < 3) (void) set_config_option("extra_float_digits", "3", PGC_USERSET, PGC_S_SESSION, GUC_ACTION_SAVE, true, 0); -
No diretório ali_decoding, execute
sudo makeesudo make install. Saída esperada apóssudo make install:/usr/bin/install -c -m 755 ali_decoding.so '/usr/local/pgsql/lib/ali_decoding.so' /usr/bin/install -c -m 644 ./ali_decoding.control '/usr/local/pgsql/share/extension/' /usr/bin/install -c -m 644 ./ali_decoding--0.0.1.sql ./ali_decoding--unpackaged--0.0.1.sql '/usr/local/pgsql/share/extension/' /usr/bin/install -c -m 755 ali_decoding.so '/usr/local/pgsql/lib/' -
Copie os arquivos ali_decoding gerados para a instalação do PostgreSQL de origem, substituindo os arquivos nestes caminhos.
NotaSubstitua
/usr/local/postgresql
pelo caminho de instalação do seu PostgreSQL de origem.
/usr/local/postgresql/lib/ali_decoding.so /usr/local/postgresql/share/extension/ali_decoding.control /usr/local/postgresql/share/extension/ali_decoding--0.0.1.sql /usr/local/postgresql/share/extension/ali_decoding--unpackaged--0.0.1.sql
-
Crie o banco de dados e o esquema correspondentes na instância de destino do ApsaraDB for PostgreSQL. Os nomes dos esquemas devem corresponder aos da origem.Crie um banco de dados e Gerencie esquemas.
Procedimento
-
Acesse o console do Data Transmission Service (DTS).
NotaCaso seja redirecionado automaticamente para o console do Data Management (DMS), clique em no ícone
no canto inferior direito e depois clique em
para retornar ao console clássico do DTS. No painel de navegação à esquerda, clique em Data Migration.
Na parte superior da página Migration Tasks, selecione a região onde a instância de destino está localizada.
No canto superior direito da página, clique em Create Data Migration Task.
-
Configure os bancos de dados de origem e de destino.
Categoria Configuração Descrição N/A Task Name O DTS gera um nome de tarefa automaticamente. Especifique um nome descritivo para facilitar a identificação. Não é necessário que seja único. Source Database Instance Type Selecione conforme sua implantação. Este exemplo usa self-managed database with a public IP address. Nota Outros tipos de instância exigem preparações adicionais. Visualize as preparações.Instance Region Ao selecione self-managed database with a public IP address como tipo de instância, não é necessário defina a Instance Region. Nota Caso tenha configurado uma lista de permissões para seu banco de dados PostgreSQL auto-gerenciado, clique em Get IP Address Segment of DTS ao lado da configuração Instance Region para obter os endereços IP dos servidores DTS e adicioná-los à sua lista de permissões.Database Type Selecione PostgreSQL. Hostname or IP Address Insira o endpoint do banco de dados PostgreSQL auto-gerenciado. Neste exemplo, insira o endereço IP público. Port Insira a porta de serviço. Padrão: 5432. Database Name Insira o nome do banco de dados a ser migrado. Database Account Insira a conta do banco de dados. Para permissões, consulte Permissões da conta do banco de dados. Database Password Insira a senha da conta do banco de dados. NotaApós inserir as informações do banco de dados de origem, clique em Test Connectivity ao lado de Database Password para verifique se as informações estão corretas. Se estiverem corretas, a mensagem Passed será exibida. Caso a mensagem Failed apareça, clique em Diagnose ao lado da mensagem Failed e ajuste as informações do banco de dados de origem conforme as orientações.
Destination Database Instance Type Selecione RDS Instance. Instance Region Selecione a região da instância RDS de destino. RDS Instance ID Selecione o ID da instância RDS de destino. Database Name Insira o nome do banco de dados de destino. Este pode ser diferente do nome do banco de dados de origem. Nota Crie previamente o banco de dados e o esquema na instância RDS. Preparações.Database Account Insira a conta do banco de dados. Para permissões, consulte Permissões da conta do banco de dados. Database Password Insira a senha da conta do banco de dados. NotaApós inserir as informações do banco de dados de destino, clique em Test Connectivity após Database Password para verifique se as informações inseridas estão corretas. Se estiverem corretas, a mensagem Passed será exibida. Caso a mensagem Failed apareça, clique em Diagnose após Failed e ajuste as informações do banco de dados de destino conforme as orientações.
-
Após concluir a configuração, clique em Authorize Whitelist and Go to Next Step.
Se a origem ou o destino for uma instância de banco de dados da Alibaba Cloud (como ApsaraDB RDS for MySQL ou ApsaraDB for MongoDB), o DTS adiciona automaticamente os endereços IP dos servidores DTS na região correspondente à lista de permissões da instância. Se a origem ou o destino for um banco de dados auto-gerenciado em uma instância ECS, o DTS adiciona automaticamente os endereços IP dos servidores DTS às regras de segurança da instância ECS. Garanta também que o banco de dados auto-gerenciado não restrinja o acesso proveniente da instância ECS. Se o banco de dados for um cluster implantado em várias instâncias ECS, adicione manualmente os endereços IP dos servidores DTS da região às regras de segurança de cada instância ECS. Caso a origem ou o destino seja um banco de dados em um data center local ou em outra nuvem, adicione manualmente os endereços IP dos servidores DTS da região para permitir o acesso. Para obter a lista de endereços IP dos servidores DTS, consulte Blocos de endereços IP dos servidores DTS.
AvisoAdicionar os blocos CIDR públicos dos servidores DTS, seja automática ou manualmente, pode introduzir riscos de segurança. Ao usar este produto, você reconhece e aceita esses riscos potenciais. É sua responsabilidade implementar medidas básicas de segurança, incluindo, mas não se limitando a: usar senhas fortes, restringir portas abertas, usar autenticação para chamadas internas de api, revisar e restringir regularmente segmentos de rede desnecessários, ou conectar-se por meio de redes privadas como Express Connect, VPN Gateway ou Smart Access Gateway.
-
Selecione os tipos de migração e os objetos.
Configuração Descrição Migration Type - Para migração completa de dados apenas, selecione tanto Schema Migration quanto Full Data Migration.
- Para minimizar o tempo de inatividade, selecione Schema Migration, Full Data Migration e Incremental Data Migration. Neste exemplo, todos os três tipos de migração estão selecionados.
Nota Se Incremental Data Migration não for selecionado, não grave dados no banco de origem durante a migração completa para garantir a consistência dos dados.Migration Object Selecione os objetos na caixa Available e clique em
para movê-los para a caixa Selected Objects.Nota- É possível selecione objetos no nível de esquema, tabela ou coluna.
- Por padrão, os nomes dos objetos permanecem inalterados após a migração. Para renomear objetos, use o recurso de mapeamento de nomes de objetos do DTS. Mapear tabelas e colunas.
- O mapeamento de nomes de objetos pode causar falha na migração de objetos dependentes.
Object name mapping Para renomear objetos migrados na instância de destino, use o mapeamento de nomes de objetos. Mapear tabelas e colunas. Connection retry duration O DTS tenta reconectar por 12 horas por padrão. Esse período pode ser personalizado. Se o DTS conseguir reconectar dentro do tempo especificado, a tarefa será retomada; caso contrário, ela falhará. Nota O DTS cobra por tarefas em execução durante o período de nova tentativa. Personalize a duração da nova tentativa conforme suas necessidades ou libere a instância DTS quando a origem e o destino forem liberados. -
Após concluir essas configurações, clique em Pre-check and Start no canto inferior direito da página.
NotaO DTS realiza uma verificação prévia antes de iniciar a tarefa. A tarefa só poderá começar após passar nessa verificação.
-
Se a verificação prévia falhar, clique em no ícone
ao lado do item com falha para visualize os detalhes.Corrija os problemas com base nos detalhes fornecidos e execute a verificação prévia novamente.
Para avisos que não exigem correção, selecione Ignore ou Ignore and Rerun Precheck para execute a verificação prévia novamente.
Depois que a tarefa passar na verificação prévia, clique em Next.
Na página Confirm Order, selecione uma Instance Class e marque a caixa de seleção Data Transmission Service (Pay-As-You-Go) Terms of Service.
-
Clique em Buy and Start. A tarefa de migração será iniciada.
-
Migração completa de dados
Não pare a tarefa manualmente. Aguarde a conclusão automática para evitar perda de dados.
-
Migração incremental de dados
A tarefa não para automaticamente. Pare-a manualmente.
NotaPare a tarefa em horários de baixa demanda ou quando estiver pronto para alternar para a instância de destino.
Aguarde até que o status da tarefa mude para Incremental Data Migration e exiba Undelayed. Em seguida, pare de gravar dados no banco de dados de origem por alguns minutos. O status de Incremental Data Migration pode apresentar latência temporariamente.
Aguarde até que o status de Incremental Data Migration retorne para Undelayed. Depois, pare a tarefa de migração manualmente. O progresso da migração de esquema e da migração completa de dados deve mostrar 100%. Para pausar a tarefa de migração, selecione a tarefa e clique em Pause na barra de operações em lote na parte inferior.
-
Alterne suas aplicações para a instância RDS.
Próximas etapas
Após a migração, exclua as contas de migração tanto do banco de dados de origem quanto do de destino por motivos de segurança.