Se o relatório de avaliação de migração para a nuvem exibir o status failure, clique em View report na coluna operation para identificar as verificações com falha. Cada verificação abrange um requisito específico de compatibilidade ou configuração.
Níveis de severidade do relatório:
|
Nível |
Significado |
Ação necessária |
|
Error |
Problema bloqueante que causa falha na migração |
Corrija todos os erros antes de tentar a migração novamente |
|
Warning |
Risco potencial que pode causar comportamento inesperado após a migração |
Revise e resolva antes de migrar |
A avaliação executa as seguintes verificações:
Para obter instruções sobre como executar uma migração para a nuvem, consulte Usar o recurso de migração para a nuvem em uma instância do ApsaraDB RDS for PostgreSQL .
Verifique se o RDS está vazio
Check item: Check rds databases
Mensagem de erro:
error:postgres not empty, check if any table exists
Impacto: A migração grava dados na instância RDS de destino do zero. Se o destino já contiver bancos de dados ou tabelas, a migração falhará ou produzirá dados duplicados.
Solution:
Exclua todos os bancos de dados da instância do ApsaraDB RDS for PostgreSQL, exceto template0, template1 e postgres. Em seguida, no banco de dados postgres, exclua todas as tabelas, exceto ha_health_check.
Verifique conectividade da origem
Esta verificação valida o acesso de rede e a autenticação entre a instância PostgreSQL autogerenciada de origem e a instância ApsaraDB RDS for PostgreSQL de destino. Ela executa seis subverificações.
Verifique conectividade de IP
Mensagem de erro:
error:XX.XX.XX.XX is unapproachable
Impacto: O serviço de migração não consegue alcançar o host de origem. O backup completo e a replicação falharão imediatamente.
Solution:
Se a instância PostgreSQL autogerenciada estiver em execução em uma instância do Elastic Compute Service (ECS), insira o private IP address da instância ECS como host de origem. Para localizar o endereço IP privado, consulte Visualizar endereços IP.
Caso a instância PostgreSQL autogerenciada esteja em um data center, insira os endereços IP dos servidores DNS no host de origem.
Verifique conectividade da porta
Mensagem de erro:
error:5432 is unapproachable
Impacto: O serviço de migração não consegue estabelecer uma conexão TCP com o PostgreSQL. Não é possível iniciar a migração.
Solution:
Resolva uma ou ambas as causas a seguir:
Conexões remotas desabilitadas: Adicione
listen_addresses = '*'ao arquivopostgresql.confna instância de origem. Para mais detalhes, consulte Configure o arquivo postgresql.conf de uma instância PostgreSQL autogerenciada.Firewall bloqueando a porta 5432: Configure o firewall para permitir tráfego de entrada na porta 5432 ou desative-o antes de iniciar a migração. Para mais detalhes, consulte Configure o firewall de um servidor.
Verifique conectividade do banco de dados
Mensagem de erro:
error:cannot connect to source database by migratetest:123456
Impacto: O serviço de migração não consegue autenticar no banco de dados de origem. Não é possível iniciar a migração.
Solution:
Resolva uma ou ambas as causas a seguir:
-
Senha incorreta: Valide as credenciais conectando-se manualmente. Para redefinir a senha, execute:
ALTER USER migratetest WITH PASSWORD '123456'; -
pg_hba.conf não configurado para permitir conexões da VPC do RDS: Adicione a seguinte linha ao
pg_hba.conf:host all migratetest <CIDR block of the VPC to which the ApsaraDB RDS for PostgreSQL instance belongs> md5Para obter detalhes sobre como atualize o
pg_hba.conf, consulte Atualize o arquivo pg_hba.conf.
Verifique privilégio de replicação da conta
Mensagem de erro:
error:migratetest has no replication privilege
Impacto: O serviço de migração usa replicação streaming para sincronizar alterações contínuas. Sem o privilégio REPLICATION, a replicação incremental falhará após a conclusão do backup completo.
Solution:
Resolva uma ou ambas as causas a seguir:
-
Conta sem o privilégio REPLICATION: Conceda o privilégio:
ALTER ROLE migratetest REPLICATION; -
pg_hba.conf não permite conexões de replicação da VPC do RDS: Adicione a seguinte linha ao
pg_hba.conf:host replication migratetest <CIDR block of the VPC to which the ApsaraDB RDS for PostgreSQL instance belongs> md5Para obter detalhes sobre como atualize o
pg_hba.conf, consulte Atualize o arquivo pg_hba.conf.
Verifique privilégio createrole da conta
Mensagem de erro:
error:migratetest has no createrole privilege
Impacto: O serviço de migração precisa recriar funções na instância de destino. Sem o privilégio CREATEROLE, a migração de funções falhará.
Solution:
Conceda o privilégio CREATEROLE:
ALTER ROLE migratetest CREATEROLE;
Verifique privilégio de monitoramento da conta
Mensagem de erro:
error:migratetest should be a member of pg_monitor to monitor replication status
Impacto: O serviço de migração consulta pg_stat_replication e pg_stat_wal_receiver para acompanhar o progresso da replicação. Sem a função pg_monitor, o serviço não confirme se a replicação mantém o ritmo adequado, o que pode interromper a migração ou causar falhas silenciosas.
Solution:
Conceda a função pg_monitor:
GRANT pg_monitor TO migratetest;
Verifique versão da origem
Check item: Check major version consistent
Mensagem de erro:
error:version mismatch, source version:10, current version:13.0
Impacto: Não há suporte para migração entre versões principais diferentes. A migração falhará se a origem e o destino executarem versões principais distintas do mecanismo.
Solution:
Adquira uma instância do ApsaraDB RDS for PostgreSQL que execute a mesma versão principal do mecanismo da instância PostgreSQL autogerenciada.
Verifique versão do glibc da origem
Check item: Check source glibc version compatible
Mensagem de aviso:
warning:source glibc version is not compatible with rds pg
Impacto: A versão da GNU C Library (glibc) afeta a classificação de caracteres na codificação UTF-8 pelo PostgreSQL. A versão 2.28 introduziu ordens de agrupamento diferentes. Se a origem e o destino usarem versões diferentes do glibc, índices de texto com agrupamentos não-C poderão retornar resultados em ordem inesperada após a migração, comprometendo a precisão das consultas.
Solution:
Execute as consultas de diagnóstico a seguir para avaliar o risco real aos seus dados.
-
Verifique se a ordem de agrupamento atual afeta seus dados:
Se o resultado for
true, a ordem de agrupamento não é afetada. Nenhuma ação adicional é necessária.Se o resultado for
false, continue para a etapa 2.
BEGIN; CREATE TEMP TABLE testcollation(id varchar(20) COLLATE "en_US.utf8") ON COMMIT DROP; INSERT INTO testcollation VALUES('-1'),('1'); SELECT id='1' FROM testcollation ORDER BY id LIMIT 1; ROLLBACK; -
Verifique se algum banco de dados usa agrupamentos não-C:
Se nenhuma linha for retornada, a migração não apresenta riscos de agrupamento. Nenhuma ação adicional é necessária.
Se linhas forem retornadas, continue para a etapa 3.
SELECT datname, datcollate FROM pg_database WHERE datcollate NOT IN ('C', 'POSIX'); -
Identifique todos os índices com agrupamentos não-C em todos os bancos de dados:
Se nenhuma linha for retornada, a migração não apresenta riscos de agrupamento.
Se linhas forem retornadas, os índices afetados podem produzir resultados de classificação incorretos após a migração. Avalie se esses índices impactam as consultas da aplicação antes de prosseguir.
WITH result AS ( WITH defcoll AS ( SELECT datcollate AS coll FROM pg_database WHERE datname = current_database() ) SELECT indrelid::regclass::text relname, indexrelid::regclass::text indexname, CASE WHEN c.collname = 'default' THEN defcoll.coll ELSE c.collname END AS collation FROM (SELECT indexrelid, indrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s JOIN pg_collation c ON coll=c.oid CROSS JOIN defcoll WHERE collprovider IN ('d', 'c') AND collname NOT IN ('C', 'POSIX') ) SELECT result.relname, result.indexname, result.collation FROM result WHERE result.collation NOT IN ('C', 'POSIX');
Verifique tamanho do disco
Check item: Check disk size enough
Mensagem de erro:
error:source_db_size > disk_size * 0.95
Impacto: Os dados de origem devem caber em até 95% do armazenamento disponível no destino. Se o armazenamento de destino for insuficiente, a transferência do backup completo falhará durante o processo, deixando o destino em estado incompleto.
Solution:
-
Verifique o tamanho total dos dados na instância de origem (resultado em MB):
SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database; Calcule o armazenamento necessário. O armazenamento de destino deve ser de, no mínimo, 110% do tamanho dos dados de origem. Por exemplo, se a origem usar 100 GB, o destino deverá ter pelo menos 110 GB de armazenamento disponível.
Expanda o armazenamento da instância do ApsaraDB RDS for PostgreSQL. Para obter instruções, consulte Alterar especificações da instância.
Verifique wal keep size
Check item: Check wal keep size large enough
Mensagem de aviso:
warning:wal_keep_size X MB is too small. Try to set wal_keep_segments or wal_keep_size large enough ensure pg_basebackup success
Impacto: Durante a migração, o pg_basebackup transfere um snapshot completo do banco de dados de origem. Se a origem gerar WAL mais rápido do que o pg_basebackup consegue copiar os dados e a origem não retiver segmentos WAL suficientes, o pg_basebackup falhará com o erro "WAL segment has been removed".
Solution:
Aumente a configuração de retenção de WAL na instância do ApsaraDB RDS for PostgreSQL para reduzir o risco de falha do pg_basebackup:
PostgreSQL 13 e posterior: Aumente o valor de
wal_keep_size.Anterior ao PostgreSQL 13: Aumente o valor de
wal_keep_segments.
Para versões do PostgreSQL anteriores à 13, a relação entre os dois parâmetros é: wal_keep_size = wal_keep_segments × wal_segment_size .
Verifique parâmetros de especificação
Check item: Check if spec params too large
Mensagens de erro:
error:max_connections too large, value=XXX
error:max_prepared_transactions too large, value=XXX
Impacto: Se max_connections ou max_prepared_transactions na instância de origem for superior a 100 vezes os valores correspondentes na instância RDS de destino, a instância de destino poderá falhar ao iniciar quando o serviço de migração estabelecer o link de replicação.
Solution:
Reduza max_connections e max_prepared_transactions na instância de origem para que fiquem dentro do limite de 100 vezes os valores de destino.
Alterações emmax_connectionsemax_prepared_transactionsexigem a reinicialização da instância PostgreSQL de origem para entrar em vigor.
Verifique usuário do RDS
Check item: Check if rds system user is occupied
Mensagem de aviso:
warning:Check if rds system user is occupied ...XXX will be reused in rds
Impacto: O ApsaraDB RDS for PostgreSQL reserva as contas aurora, replicator e pgxxx para uso interno do sistema. Se essas contas existirem na instância de origem, a migração poderá sobrescrever suas configurações no destino, interrompendo as funções de gerenciamento.
Solution:
Certifique-se de não utilizar as contas aurora, replicator e pgxxx na instância PostgreSQL autogerenciada.
Verifique extensões
Esta verificação valida a compatibilidade de extensões entre a instância PostgreSQL autogerenciada de origem e a instância ApsaraDB RDS for PostgreSQL de destino. Ela executa três subverificações.
Verifique extensões suportadas na origem
Mensagem de erro:
error:Check source supported extensions XXX not supported
Impacto: Extensões presentes na origem, mas não suportadas pelo ApsaraDB RDS for PostgreSQL, não podem ser criadas no destino. Se a migração prosseguir, objetos dependentes dessas extensões deixarão de funcionar.
Solution:
Remova as extensões não suportadas da instância de origem:
DROP EXTENSION <extension_name>;
Verifique extensões de origem com versão superior
Mensagem de erro:
error:Check source extensions with higher version XXX
Impacto: O ApsaraDB RDS for PostgreSQL não carrega extensões cuja versão seja superior à versão nativa. A extensão falhará ao inicializar no destino, interrompendo quaisquer objetos dependentes.
Solution:
Reinstale as extensões afetadas na instância de origem na mesma versão do destino:
DROP EXTENSION <extension_name>;
CREATE EXTENSION <extension_name> VERSION '<destination_version>';
Verifique extensões de origem com versão inferior
Mensagem de aviso:
warning:Check source extensions with lower version XXX
Impacto: As extensões na instância de origem estão em uma versão mais antiga do que as do destino. Esse comportamento é esperado e seguro: as extensões são atualizadas automaticamente para a versão de destino após a migração.
Solution:
Nenhuma ação é necessária.
Verifique catálogos de sistema do Postgres
Esta verificação inspeciona os catálogos de sistema da instância de origem em busca de configurações incompatíveis com o ApsaraDB RDS for PostgreSQL. Ela executa quatro subverificações.
Linguagens procedurais não suportadas
Mensagem de erro:
error: disallowed language exist in databases [xxx, xxx], the languages allowed are [c, internal, sql, plpgsql, pltcl, plperl].
Impacto: O ApsaraDB RDS for PostgreSQL suporta apenas C, internal, SQL, PL/pgSQL, PL/Tcl e PL/Perl. Funções escritas em outras linguagens não podem ser migradas e falharão no destino.
Solution:
Remova as linguagens não suportadas dos bancos de dados afetados na instância de origem:
DROP LANGUAGE <language_name>;
Objetos grandes
Mensagem de erro:
error: large object exist in databases [xxx, xxx].
Impacto: O ApsaraDB RDS for PostgreSQL não oferece suporte a objetos grandes do PostgreSQL. Objetos grandes na instância de origem não podem ser migrados e estarão ausentes no destino.
Solution:
Exclua todos os objetos grandes dos bancos de dados afetados na instância de origem antes de migrar.
Configurações padrão de ACL
Mensagem de erro:
error: default acl settings exist in databases [xxx, xxx].
Impacto: A instrução ALTER DEFAULT PRIVILEGES preenche pg_catalog.pg_default_acl, que armazena concessões de permissão padrão para objetos futuros. Essas configurações não podem ser migradas diretamente e causam falha na verificação de migração.
Solution:
-
Na instância de origem, revogue todos os privilégios padrão para limpar
pg_default_acl:ALTER DEFAULT PRIVILEGES ... REVOKE ...; -
Após a conclusão da migração, reaplique os privilégios padrão na instância de destino:
ALTER DEFAULT PRIVILEGES ... GRANT ...;
Tabelas de sistema não vazias (pg_parameter_acl e pg_db_role_setting)
Mensagem de aviso:
warning: Invalid system tables: [pg_parameter_acl, pg_db_role_setting], these system tables should be empty.
Impacto:
pg_parameter_aclregistra permissões de acesso por usuário para parâmetros do kernel. O ApsaraDB RDS for PostgreSQL gerencia essas permissões internamente; portanto, as entradas de origem não podem ser aplicadas ao destino.pg_db_role_settingregistra valores padrão de parâmetros por banco de dados e por função. Essas configurações não serão transferidas corretamente se as tabelas não forem limpas antes da migração.
Solution:
-
Limpe ambas as tabelas de sistema na instância de origem:
DELETE FROM pg_parameter_acl; DELETE FROM pg_db_role_setting; Após a conclusão da implantação de DR, configure as permissões padrão dos usuários em diferentes bancos de dados na instância de destino.
Verifique permissão de função reservada
Conteúdo da verificação: Verifica se permissões de funções reservadas não permitidas foram concedidas a contas na instância de origem.
Mensagem de erro:
error: some disallowed reserved roles [pg_write_server_files] are granted to user. you should revoke these roles from their members
Impacto: O ApsaraDB RDS for PostgreSQL restringe certas funções integradas — como pg_write_server_files — porque elas fornecem acesso a operações do sistema de arquivos do servidor não permitidas em ambiente gerenciado. Se essas funções forem concedidas a contas na instância de origem, a migração falhará.
Solution:
Revogue as funções reservadas não permitidas de todas as contas na instância de origem. Exemplo:
REVOKE pg_write_server_files FROM "user";