Este tópico descreve o relatório de avaliação do recurso de migração para a cloud com um clique do ApsaraDB RDS for PostgreSQL, incluindo seu conteúdo, erros comuns e as respectivas soluções.
Se o Status do relatório de avaliação for Failed, clique em Report Details na coluna Action da tarefa de migração.
Para mais informações sobre a migração para a cloud com um clique do ApsaraDB RDS for PostgreSQL, consulte One-click migration to the cloud.
Verifique se o RDS está vazio
Item de verificação
Verifique bancos de dados do RDS
Erro comum
error:postgres not empty, check if any table exists
Description
A instância de destino do ApsaraDB RDS for PostgreSQL não está vazia.
Solução
Limpe todos os bancos de dados na instância do ApsaraDB RDS for PostgreSQL, mantendo apenas os bancos de dados template0, template1 e postgres. No banco de dados postgres, remova todas as tabelas, exceto ha_health_check.
Verifique a conectividade da origem
-
Item de verificação 1
Verifique a conectividade do IP
Erro comum
error:XX.XX.XX.XX is unapproachableDescription
O endereço IP ou nome DNS do servidor que hospeda o banco de dados PostgreSQL autogerenciado está inacessível.
Solução
Para a migração para a cloud com um clique de um banco de dados PostgreSQL autogerenciado em uma instância ECS, configure o Private IP Address da instância ECS. Para saber como obter o endereço IP, consulte Visualize IP addresses.
Para migrações de um banco de dados PostgreSQL autogerenciado local, forneça o endereço IP resolvido a partir do seu registro DNS.
-
Item de verificação 2
Verifique a conectividade da porta
Erro comum
error:5432 is unapproachableDescription
O banco de dados PostgreSQL autogerenciado não está configurado para aceitar conexões remotas.
Há um firewall configurado para o banco de dados PostgreSQL autogerenciado, mas nenhuma regra permite o acesso à porta do banco de dados.
Solução
No arquivo postgresql.conf do seu banco de dados PostgreSQL autogerenciado, defina
listen_addresses = '*'. Para mais informações, consulte Configure the postgresql.conf file.Configure o firewall para permitir o tráfego na porta 5432 ou desative o firewall antes da migração. Para mais informações, consulte Configure the server firewall.
-
Item de verificação 3
Verifique a conectividade do banco de dados
Erro comum
error:cannot connect to source database by migratetest:123456Description
O nome de usuário ou a senha está incorreto.
A configuração do pg_hba.conf para o banco de dados PostgreSQL autogerenciado está incorreta.
Solução
-
Verifique a conexão com o banco de dados PostgreSQL autogerenciado usando o nome de usuário e a senha especificados. Se a conexão falhar, atualize a senha. O exemplo a seguir mostra o comando para atualizar a senha da conta
migratetest:ALTER USER migratetest WITH PASSWORD '123456'; -
Modifique o arquivo pg_hba.conf do seu banco de dados PostgreSQL autogerenciado. Para a conta
migratetest, por exemplo, adicione a seguinte configuração:host all migratetest <ApsaraDB RDS for PostgreSQL VPC CIDR block> md5NotaPara mais informações, consulte Atualize the pg_hba.conf file.
-
Item de verificação 4
Verifique o privilégio de replicação da conta
Erro comum
error:migratetest has no replication privilegeDescription
A conta de usuário não possui o privilégio REPLICATION.
A configuração do pg_hba.conf para o banco de dados PostgreSQL autogerenciado está incorreta.
Solução
-
Conceda o privilégio REPLICATION à conta de usuário. O exemplo a seguir mostra o comando para a conta
migratetest:ALTER ROLE migratetest REPLICATION; -
Modifique o arquivo pg_hba.conf do seu banco de dados PostgreSQL autogerenciado. Por exemplo, adicione a seguinte configuração para a conta migratetest:
host replication migratetest <ApsaraDB RDS for PostgreSQL VPC CIDR block> md5NotaPara mais informações, consulte Atualize the pg_hba.conf file.
-
Item de verificação 5
Verifique o privilégio createrole da conta
Erro comum
error:migratetest has no createrole privilegeDescription
A conta de usuário não possui o privilégio CREATEROLE.
Solução
Conceda o privilégio CREATEROLE à conta de usuário. O exemplo a seguir mostra o comando para a conta
migratetest:ALTER ROLE migratetest CREATEROLE; -
Item de verificação 6
Verifique o privilégio de monitoramento da conta
Erro comum
error:migratetest should be a member of pg_monitor to monitor replication statusDescription
A conta de usuário não possui o privilégio
pg_monitor.NotaEsse privilégio é necessário para consultar visões do sistema como
pg_stat_replicationepg_stat_wal_receiverpara obter informações do link de replicação.Solução
Conceda o privilégio
pg_monitorà conta de usuário. O exemplo a seguir mostra o comando para a contamigratetest:GRANT pg_monitor TO migratetest;
Verifique a versão da origem
Item de verificação
Verifique se a versão principal é consistente
Erro comum
error:version mismatch, source version:10, current version:13.0
Description
A versão principal do banco de dados PostgreSQL autogerenciado não corresponde à da instância de destino do ApsaraDB RDS for PostgreSQL.
Solução
Adquira uma instância do ApsaraDB RDS for PostgreSQL com uma versão principal que corresponda à do seu banco de dados PostgreSQL autogerenciado.
Verifique a versão do glibc da origem
Item de verificação
Verifique se a versão do glibc da origem é compatível
Erro comum
warning:source glibc version is not compatible with rds pg
Description
A versão do GLIBC do banco de dados PostgreSQL autogerenciado é incompatível com a da instância do ApsaraDB RDS for PostgreSQL.
No GLIBC 2.28, as regras de ordenação (collation) para alguns caracteres UTF-8 foram alteradas. A incompatibilidade de versões pode resultar em regras de ordenação de dados diferentes e resultados de consulta inesperados.
Solução
Execute as seguintes verificações.
-
Verifique a collation da tabela.
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;Resultados:
Se
truefor retornado, a migração não apresenta riscos. Nenhuma ação adicional é necessária.Se
falsefor retornado, prossiga para a próxima etapa.
-
Verifique a collation do banco de dados.
SELECT datname,datcollate FROM pg_database where datcollate NOT IN ('C', 'POSIX');Resultados:
Se o resultado estiver vazio, a migração não apresenta riscos. Nenhuma ação adicional é necessária.
Se o resultado não estiver vazio, prossiga para a próxima etapa.
-
Em todos os bancos de dados, verifique se há índices cuja collation não seja
CouPOSIX.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');Resultados:
Se o resultado estiver vazio, a migração não apresenta riscos. Nenhuma ação adicional é necessária.
Se o resultado não estiver vazio, a migração apresenta riscos.
Verifique o tamanho do disco
Item de verificação
Verifique se o tamanho do disco é suficiente
Erro comum
error:source_db_size > disk_size * 0.95
Description
O tamanho total dos bancos de dados PostgreSQL autogerenciados excede 95% do espaço de armazenamento na instância de destino do ApsaraDB RDS for PostgreSQL.
Solução
-
Execute o seguinte comando para verificar o espaço total de armazenamento usado pelo seu banco de dados PostgreSQL autogerenciado:
SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database;NotaA unidade do resultado é megabytes (MB).
-
Calcule o espaço de armazenamento necessário para a instância de destino do ApsaraDB RDS for PostgreSQL.
Por exemplo, se o seu banco de dados PostgreSQL autogerenciado usar 100 GB de espaço de armazenamento, defina o espaço de armazenamento da instância do ApsaraDB RDS for PostgreSQL como pelo menos 110 GB.
Expanda o espaço de armazenamento da instância do ApsaraDB RDS for PostgreSQL. Para mais informações, consulte Change instance specifications.
Verifique o tamanho de retenção do WAL
Item de verificação
Verifique se o tamanho de retenção do WAL é grande o suficiente
Erro comum
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
Description
O valor do parâmetro wal_keep_size ou wal_keep_segments é muito pequeno. Aumente esse valor.
Solução
Se o seu banco de dados PostgreSQL autogerenciado for da versão 13 ou posterior, aumente o valor do parâmetro wal_keep_size no seu banco de dados PostgreSQL autogerenciado. Isso melhora a taxa de sucesso de backups completos e incrementais durante a migração.
-
Se o seu banco de dados PostgreSQL autogerenciado for anterior à versão 13, aumente o valor do parâmetro wal_keep_segments no seu banco de dados PostgreSQL autogerenciado. Isso melhora a taxa de sucesso de backups completos e incrementais durante a migração.
NotaPara versões do PostgreSQL anteriores à 13,
wal_keep_sizeé calculado comowal_keep_segments * wal_segment_size.
Verifique parâmetros de especificação
Item de verificação
Verifique se os parâmetros de especificação são muito grandes
Erro comum
error:max_connections too large, value=XXX
error:max_prepared_transactions too large, value=XXX
Description
Os parâmetros max_connections e max_prepared_transactions do banco de dados PostgreSQL autogerenciado são mais de 100 vezes maiores que os parâmetros correspondentes da instância de destino do ApsaraDB RDS for PostgreSQL. Isso pode causar falha na inicialização da instância de destino durante a configuração do link de replicação.
Solução
Diminua os valores dos parâmetros max_connections e max_prepared_transactions no seu banco de dados PostgreSQL autogerenciado.
Após alterar os parâmetros max_connections e max_prepared_transactions, reinicie a instância do PostgreSQL autogerenciado para que as alterações entrem em vigor.
Verifique usuário do RDS
Item de verificação
Verifique se o usuário do sistema do RDS está em uso
Erro comum
warning:Check if rds system user is occupied ...XXX will be reused in rds
Description
O ApsaraDB RDS for PostgreSQL reserva as contas aurora, replicator e pgxxx no banco de dados PostgreSQL autogerenciado. Não use essas três contas como contas de service.
Solução
Não use as contas listadas na mensagem de aviso como contas de service.
Verifique extensões
-
Item de verificação 1
Verifique as extensões suportadas pela origem
Erro comum
error:Check source supported extensions XXX not supportedDescription
O banco de dados PostgreSQL autogerenciado possui uma extensão que não é compatível com a instância de destino do ApsaraDB RDS for PostgreSQL.
Solução
Remova a extensão incompatível do seu banco de dados PostgreSQL autogerenciado.
-
Item de verificação 2
Verifique as extensões da origem com versão superior
Erro comum
error:Check source extensions with higher version XXXDescription
A versão de uma extensão no banco de dados PostgreSQL autogerenciado é superior à versão disponível no ApsaraDB RDS for PostgreSQL.
Solução
Instale uma versão inferior da extensão no seu banco de dados PostgreSQL autogerenciado para corresponder à versão na instância do ApsaraDB RDS for PostgreSQL.
-
Item de verificação 3
Verifique as extensões da origem com versão inferior
Erro comum
warning:Check source extensions with lower version XXXDescription
A versão de uma extensão no banco de dados PostgreSQL autogerenciado é inferior à versão no ApsaraDB RDS for PostgreSQL.
Solução
Nenhuma ação é necessária. A extensão será atualizada automaticamente após a migração.
Verifique catálogos do sistema Postgres
-
Item de verificação 1
Verifique se a instância de origem contém linguagens não suportadas na instância de destino (pg_language).
Erro comum
error: disallowed language exist in databases [xxx, xxx], the languages allowed are [c, internal, sql, plpgsql, pltcl, plperl].Descrição
O ApsaraDB RDS for PostgreSQL suporta apenas as linguagens C, internal, SQL, PL/pgSQL, PL/Tcl e PL/Perl.
Solução
Remova as linguagens não suportadas da instância de origem.
-
Item de verificação 2
Verifique se a instância de origem contém Large Objects.
Erro comum
error: large object exist in databases [xxx, xxx].Descrição
O ApsaraDB RDS for PostgreSQL não suporta Large Objects.
Solução
Remova todos os Large Objects da instância de origem.
-
Item de verificação 3
Verifique se a instância de origem tem privilégios padrão definidos pela instrução
ALTER DEFAULT PRIVILEGES ... GRANT .... Esta verificação confirma se algum banco de dados na instância de origem possui uma tabela de sistemapg_catalog.pg_default_aclnão vazia.Erro comum
error: default acl settings exist in databases [xxx, xxx].Descrição
Se você executou a instrução
ALTER DEFAULT PRIVILEGES ... GRANT ...em um banco de dados na instância de origem, a tabela de sistemapg_catalog.pg_default_aclpara esse banco de dados não estará vazia.Solução
Primeiro, execute a instrução
ALTER DEFAULT PRIVILEGES ... REVOKE ...no banco de dados correspondente da instância de origem para garantir que a tabela de sistemapg_default_aclesteja vazia para todos os bancos de dados. Após a conclusão da migração, execute a instruçãoALTER DEFAULT PRIVILEGES ... GRANT ...novamente para restaurar as configurações de privilégio padrão originais. -
Item de verificação 4
Verifique se as tabelas de sistema
pg_parameter_aclepg_db_role_settingna instância de origem não estão vazias.Erro comum
warning: Invalid system tables: [pg_parameter_acl, pg_db_role_setting], these system tables should be empty.Descrição
A tabela de sistema
pg_parameter_aclregistra os privilégios de acesso do usuário para parâmetros de kernel. O ApsaraDB RDS for PostgreSQL não permite que usuários modifiquem esses privilégios. A tabela de sistemapg_db_role_settingregistra as configurações de privilégio padrão para diferentes usuários em cada banco de dados.Solução
-
Na instância de origem, execute as seguintes instruções para limpar as tabelas de sistema
pg_parameter_aclepg_db_role_setting:DELETE FROM pg_parameter_acl; DELETE FROM pg_db_role_setting; Após a conclusão da migração, reconfigure os privilégios padrão para diferentes usuários em cada banco de dados na instância de destino.
-
Verifique privilégios de funções reservadas
Item de verificação
Verifique se a instância de origem concedeu privilégios de funções reservadas a contas não permitidas na instância de destino.
Erro comum
error: some disallowed reserved roles [pg_write_server_files] are granted to user. you should revoke these roles from their members
Descrição
O ApsaraDB RDS for PostgreSQL não permite que contas tenham privilégios para funções reservadas, como pg_write_server_files. Se você usou uma instrução como GRANT pg_write_server_files TO "user"; na instância de origem, revogue esses privilégios.
Solução
Na instância de origem, execute a instrução REVOKE apropriada para revogar os privilégios, como REVOKE pg_write_server_files FROM "user";.