Diagnostique problemas nas migrações do PostgreSQL para o AlloyDB

Resolva problemas de erros de migração

O processo da tarefa de migração pode incorrer em erros durante o tempo de execução.

  • Alguns erros, como uma palavra-passe incorreta na base de dados de origem, são recuperáveis, o que significa que podem ser corrigidos e a tarefa de migração é retomada automaticamente.
  • Alguns são irrecuperáveis, como erros na replicação de dados, o que significa que a tarefa de migração tem de ser reiniciada desde o início.

Quando ocorre um erro, o estado da tarefa de migração muda para Failed e o subestado reflete o último estado antes da falha.

Para resolver um erro, navegue para a tarefa de migração com falha para ver o erro e siga os passos descritos na mensagem de erro.

Para ver mais detalhes sobre o erro, navegue para o Cloud Monitoring através do link na tarefa de migração. Os registos são filtrados para a tarefa de migração específica.

Na tabela seguinte, pode encontrar alguns exemplos de problemas e como podem ser resolvidos:

Sintoma Causas possíveis Coisas a experimentar
Falha ao estabelecer ligação à instância da base de dados de origem. Ocorreu um problema de conetividade entre a instância da base de dados de origem e a instância de destino. Siga os passos em Depurar a conetividade.
Falha na execução da tarefa de migração devido a versões de base de dados de origem e de destino incompatíveis. As versões da base de dados de origem e de destino não são uma combinação suportada. Especificamente, a versão da base de dados de origem fornecida é incompatível com a versão da base de dados de destino. Certifique-se de que a versão da base de dados de destino é igual ou uma versão principal superior à versão da base de dados de origem. Em seguida, crie uma nova tarefa de migração.
As linguagens de definição de dados (LDDs) ou as linguagens de manipulação de dados (LMDs) estão bloqueadas na origem. As DDLs que requerem o ACCESS EXCLUSIVE bloqueio e estão em execução durante a fase de descarga completa são bloqueadas.

Durante o processo de sincronização inicial (transferência completa), deve evitar DDLs ou programas que exijam ACCESS EXCLUSIVE bloqueios, como ALTER TABLE ou DROP TABLE, nas tabelas. Caso contrário, os DDLs ou os programas aguardam até a sincronização inicial terminar.

Por exemplo, se uma tabela ainda estiver no processo de sincronização inicial e for executado um comando ALTER TABLE na mesma tabela, o comando não é executado e os comandos DDL e DML subsequentes são bloqueados até a sincronização inicial terminar.

Mensagem de erro: No pglogical extension installed on databases (X) Uma ou mais bases de dados de origem não têm o pglogical instalado. Siga estas diretrizes para instalar o pglogical nas bases de dados na instância de origem.
Mensagem de erro: Replication user 'x' doesn't have sufficient privileges. O utilizador que está a usar o serviço de migração de bases de dados não tem os privilégios necessários para realizar a operação designada. Siga estas diretrizes para garantir que este utilizador tem os privilégios necessários.
Mensagem de erro: Unable to connect to source database server. O serviço de migração de bases de dados não consegue estabelecer uma ligação ao servidor da base de dados de origem. Certifique-se de que as instâncias da base de dados de origem e de destino conseguem comunicar entre si e que concluiu todos os pré-requisitos necessários que apareceram quando definiu as suas definições para a tarefa de migração.
Mensagem de erro: The source database 'wal_level' configuration must be equal to 'logical'. O wal_level da base de dados de origem está definido para um valor diferente de logical. Definir o wal_level para logical.
Mensagem de erro: The source database 'max_replication_slots' configuration is not sufficient. O parâmetro max_replication_slots não foi configurado corretamente. Siga estas diretrizes para definir este parâmetro corretamente.
Mensagem de erro: The source database 'max_wal_senders' configuration is not sufficient. O parâmetro max_wal_senders não foi configurado corretamente. Siga estas diretrizes para definir este parâmetro corretamente.
Mensagem de erro: The source database 'max_worker_processes' configuration is not sufficient. O parâmetro max_worker_processes não foi configurado corretamente. Siga estas diretrizes para definir este parâmetro corretamente.

Mensagem de erro: Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.

OU

Mensagem de erro: Error promoting EM replica: finished drop replication with errors.

Não é possível limpar as definições necessárias para a replicação durante a promoção de uma tarefa de migração.

Para cada base de dados, execute comandos como um utilizador com o privilégio superuser.

Para mais informações sobre os comandos a executar, consulte o artigo Limpe as posições de replicação.

Mensagem de erro: x509 certificate signed by unknown authority.

O certificado da AC de origem fornecido ao serviço de migração de base de dados pode conter apenas o certificado de raiz. No entanto, o certificado de origem requer o certificado de raiz e todos os certificados intermédios.

Por exemplo, para o Amazon Relational Database Service, a utilização do certificado rds-ca-2019-root.pem pode resultar neste problema.

Crie um certificado de CA de origem combinado que contenha o certificado de raiz e todos os certificados intermédios necessários.

Para o exemplo de utilização do Amazon Relational Database Service, em vez do certificado rds-ca-2019-root.pem, use o certificado rds-combined-ca-bundle.pem.

Mensagem de erro: ERROR: Out of shared memory HINT: You might need to increase max_locks_per_transaction.

O valor definido para o parâmetro max_locks_per_transaction não é suficiente. Defina o valor deste parâmetro para, pelo menos, {max_number_of_tables_per_database}/(max_connections + max_prepared_transactions).

Mensagem de erro: ERROR: no data left in message.

O pacote pglogical não está instalado corretamente na instância de origem. Para mais informações sobre como instalar corretamente este pacote, consulte o artigo Instale o pacote pglogical na instância de origem.

Mensagem de erro: Cannot assign TransactionIds during recovery.

A origem configurada está no modo de recuperação. Configure uma origem que não esteja no modo de recuperação.
O despejo completo é lento. O destino do AlloyDB pode ser lento na importação de grandes quantidades de dados da base de dados de origem.
  • Escolha um nível superior para o destino do AlloyDB para obter a largura de banda de rede e de disco máxima disponível.
  • Ajuste a flag max_wal_size do destino do AlloyDB. Normalmente, 32 GB ou 64 GB é um bom valor para definir para esta flag. A atualização desta flag não requer o reinício do servidor.
Mensagem de erro: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again

A tarefa de migração falhou durante a fase de descarga completa e não é possível recuperar a tarefa. A instância da base de dados de origem foi reiniciada ou está no modo de recuperação, ou as ligações de replicação terminaram devido a um valor insuficiente definido para o parâmetro wal_sender_timeout.

Para encontrar a causa principal do problema:

  1. Aceda à página Explorador de registos na Google Cloud consola.
  2. Na lista de recursos, selecione a sua instância do AlloyDB. É apresentada uma lista dos registos mais recentes da instância.
  3. Nos nomes dos ficheiros de registo, selecione postgres.log.
  4. Defina o nível de gravidade do registo para todos os níveis acima de Warning. Os registos de erros iniciais podem ser a causa principal da falha.
  • Certifique-se de que o Database Migration Service consegue sempre estabelecer ligação à instância da base de dados de origem durante a fase de descarga completa.
  • Verifique se o valor do parâmetro wal_sender_timeout está definido para um número superior (por exemplo, 0) na instância da base de dados de origem.
  • Reinicie a tarefa de migração e, em seguida, tente novamente.
Mensagem de erro: ERROR: unknown column name {column_name}

Foi adicionada uma coluna a uma tabela replicada no nó principal, mas não no nó de réplica.

Apenas as alterações da linguagem de manipulação de dados (DML) são atualizadas automaticamente durante as migrações contínuas. A gestão das alterações da linguagem de definição de dados (DDL) para que as bases de dados de origem e de destino permaneçam compatíveis é da responsabilidade do utilizador e pode ser alcançada de duas formas:

  • Pare as gravações na base de dados de origem e execute os comandos DDL na origem e no destino. Antes de executar os comandos DDL no destino, conceda a função cloudsqlexternalsync ao utilizador do Cloud SQL que aplica as alterações DDL.
  • Use o pglogical.replicate_ddl_command para permitir que os comandos LDD sejam executados na origem e no destino num ponto consistente. O utilizador que executa os comandos tem de ter o mesmo nome de utilizador na origem e no destino, e deve ser o superutilizador ou o proprietário do artefacto que está a ser migrado (por exemplo, a tabela, a sequência, a vista ou a base de dados).
  • Consulte Migração contínua para encontrar exemplos de utilização do pglogical.replicate_ddl_command.

Mensagem de erro: ERROR: cannot truncate a table referenced in a foreign key constraint

O utilizador tentou truncar uma tabela que tem uma restrição de chave externa.

Remova primeiro a restrição de chave externa e, em seguida, corte a tabela.

Mensagem de erro: ERROR: connection to other side has died

A ligação de replicação terminou devido a um valor insuficiente definido para o elemento wal_sender_timeout parameter. Normalmente, o erro ocorre durante a fase de replicação após o êxito da descarga inicial.

Considere aumentar o valor do parâmetro wal_sender_timeout ou desativar o mecanismo de limite de tempo definindo o respetivo valor como 0 na instância da base de dados de origem.

Quando migra bases de dados selecionadas e a tarefa de migração não consegue replicar dados para uma ou mais bases de dados, é apresentado o estado Falhou na lista de bases de dados. Vários erros de tarefas de migração.

Na coluna Erros, clique em Ver erros e corrija-os. Também pode remover as bases de dados com falhas da tarefa de migração.

Para mais informações sobre como remover uma base de dados com falhas de uma tarefa de migração, consulte o artigo Gerir tarefas de migração.

Limpe as posições de replicação

É apresentada uma das seguintes mensagens:

  • Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.
  • Error promoting EM replica: finished drop replication with errors.

Causas possíveis

Quando promove uma instância do AlloyDB, se a instância de origem não estiver acessível a partir da instância do AlloyDB (por exemplo, a instância de origem não estiver em execução ou tiver removido a instância do AlloyDB da lista de autorizações de instâncias de origem), não é possível limpar as definições necessárias para a replicação durante a promoção de uma tarefa de migração. Tem de limpar manualmente os espaços de replicação.

Coisas a experimentar

Para cada base de dados, execute os seguintes comandos como um utilizador com o privilégio superuser:

  1. Obtenha os nomes dos slots de replicação a partir da mensagem de erro e, em seguida, execute o seguinte comando para eliminar os slots, um a um:

    select pg_drop_replication_slot({slot_name});
  2. Se os nomes dos slots de replicação não estiverem disponíveis na mensagem de erro, execute o seguinte comando para consultar os slots de replicação existentes:

    select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%alloydb%' and active = 'f';
  3. Se não existirem réplicas do AlloyDB a usar a instância de origem, execute o seguinte comando para limpar as definições de pglogical:

    select pglogical.drop_node(node_name) from pglogical.node where node_name like 'alloydb';
  4. Se já não precisar da extensão pglogical, execute o seguinte comando para a desinstalar:

    DROP EXTENSION IF EXISTS pglogical;

Elimine clusters do AlloyDB órfãos no modo de arranque

Em casos extremos raros, pode verificar que a tarefa de migração foi eliminada, mas o cluster do AlloyDB associado não foi e ainda está no modo de arranque. É possível eliminar o cluster através do comando gcloud do AlloyDB para eliminar um cluster, combinado com a opção --force.

Tenha em atenção que a eliminação de um cluster de arranque enquanto está a ser usado por uma tarefa de migração resulta num comportamento indefinido.

Faça a gestão de utilizadores e funções

Migre utilizadores existentes

Atualmente, o serviço de migração de bases de dados não suporta a migração de utilizadores existentes de uma instância de origem para uma instância de destino do AlloyDB. Pode gerir esta migração criando os utilizadores no AlloyDB manualmente.

Acerca do utilizador do alloydbexternalsync

Durante a migração, todos os objetos no AlloyDB principal são propriedade do utilizador alloydbexternalsync. Após a migração dos dados, pode modificar a propriedade dos objetos para outros utilizadores seguindo estes passos:

  • Execute o comando GRANT alloydbexternalsync to {USER}.
  • Em cada base de dados, execute o comando reassign owned by alloydbexternalsync to {USER};.
  • Para remover o utilizador alloydbexternalsync, execute o comando drop role alloydbexternalsync.