Diagnosticar problemas para migraciones homogéneas a Cloud SQL para PostgreSQL,Diagnosticar problemas para migraciones homogéneas a Cloud SQL para PostgreSQL

El proceso del trabajo de migración puede generar errores durante el tiempo de ejecución.

  • Algunos errores, como una contraseña incorrecta en la base de datos de origen, son recuperables, lo que significa que se pueden corregir y el trabajo de migración se reanuda automáticamente.
  • Algunos son irrecuperables, como los errores en la replicación de datos, lo que significa que el trabajo de migración debe reiniciarse desde el principio.

Cuando se produce un error, el estado del trabajo de migración cambia a Failed y el subestado refleja el último estado antes del error.

Para solucionar un error, navegue hasta el trabajo de migración fallido para ver el error y siga los pasos descritos en el mensaje de error.

Para ver más detalles sobre el error, navegue hasta Cloud Monitoring usando el enlace en el trabajo de migración. Los registros se filtran según el trabajo de migración específico.

En la siguiente tabla, puede encontrar algunos ejemplos de problemas y cómo se pueden resolver:

Para este problema... El problema podría ser... Prueba esto...
Cuando migra a una instancia de destino existente , recibe el siguiente mensaje de error: The destination instance contains existing data or user defined entities (for example databases, tables, or functions). You can only migrate to empty instances. Clear your destination instance and retry the migration job. Su instancia de Cloud SQL de destino contiene datos adicionales. Solo puede migrar a instancias existentes que estén vacías. Consulte Limitaciones conocidas . Promocione su instancia de destino para convertirla en una instancia de lectura/escritura, elimine los datos adicionales y vuelva a intentar el trabajo de migración. Consulte Borrar datos adicionales de su instancia de destino existente .
Error al conectarse a la instancia de la base de datos de origen. Hubo un problema de conectividad entre la instancia de la base de datos de origen y la instancia de destino. Siga los pasos en Depuración de conectividad .
Error al ejecutar el trabajo de migración debido a versiones incompatibles de la base de datos de origen y destino. Las versiones de la base de datos de origen y de destino no son una combinación admitida. Específicamente, la versión de la base de datos de origen proporcionada es incompatible con la versión de la base de datos de destino. Asegúrese de que la versión de la base de datos de destino sea la misma o una versión principal superior a la versión de la base de datos de origen. Luego, cree un nuevo trabajo de migración.
Los lenguajes de definición de datos (DDL) o los lenguajes de manipulación de datos (DML) están bloqueados en la fuente. Los DDL que requieren el bloqueo de ACCESS EXCLUSIVE y se ejecutan durante la fase de volcado completo están bloqueados.

Durante el proceso de sincronización inicial (volcado completo), se deben evitar en las tablas DDL o programas que requieran bloqueos de ACCESS EXCLUSIVE como ALTER TABLE o DROP TABLE . De lo contrario, los DDL o programas esperarán hasta que finalice la sincronización inicial.

Por ejemplo, si una tabla todavía está en el proceso de sincronización inicial y se ejecuta un comando ALTER TABLE en la misma tabla, entonces el comando no se ejecutará y los comandos DDL y DML posteriores se bloquearán hasta que finalice la sincronización inicial.

Mensaje de error: No pglogical extension installed on databases (X) Una o más bases de datos de origen no tienen pglogical instalado. Siga estas pautas para instalar pglogical en las bases de datos de la instancia de origen.
Al migrar a PostgreSQL versión 15, después de varios reintentos de conexión posteriores, se produce uno de los siguientes síntomas: Este problema a menudo se atribuye al problema del punto muerto en la extensión pglogical . Para obtener más información, consulte el rastreador de problemas pglogical en GitHub . Vuelva a intentar el trabajo de migración o migre primero a una versión intermedia de PostgreSQL. Para obtener más detalles, consulte Mensaje de error: Cannot connect to invalid database .
Mensaje de error: Replication user 'x' doesn't have sufficient privileges. El usuario que utiliza el Servicio de migración de bases de datos no tiene los privilegios necesarios para realizar la operación designada. Siga estas pautas para asegurarse de que este usuario tenga los privilegios necesarios.
Mensaje de error: Unable to connect to source database server. El servicio de migración de bases de datos no puede establecer una conexión con el servidor de la base de datos de origen. Asegúrese de que las instancias de la base de datos de origen y de destino puedan comunicarse entre sí y de haber completado todos los requisitos previos requeridos que aparecieron cuando definió la configuración para el trabajo de migración .
Mensaje de error: The source database 'wal_level' configuration must be equal to 'logical'. El wal_level de la base de datos de origen se establece en un valor distinto del logical . Establezca wal_level en logical .
Mensaje de error: The source database 'max_replication_slots' configuration is not sufficient. El parámetro max_replication_slots no se configuró correctamente. Siga estas pautas para configurar este parámetro correctamente.
Mensaje de error: The source database 'max_wal_senders' configuration is not sufficient. El parámetro max_wal_senders no se configuró correctamente. Siga estas pautas para configurar este parámetro correctamente.
Mensaje de error: The source database 'max_worker_processes' configuration is not sufficient. El parámetro max_worker_processes no se configuró correctamente. Siga estas pautas para configurar este parámetro correctamente.

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

O

Mensaje de error: Error promoting EM replica: finished drop replication with errors.

La configuración necesaria para la replicación no se puede limpiar durante la promoción de un trabajo de migración.

Para cada base de datos, ejecute comandos como usuario con privilegios superuser .

Para obtener más información sobre qué comandos ejecutar, consulte Limpiar ranuras de replicación .

Mensaje de error: x509 certificate signed by unknown authority.

El certificado de CA de origen proporcionado al Servicio de migración de bases de datos puede contener solo el certificado raíz. Sin embargo, el certificado de origen requiere tanto el certificado raíz como cualquier certificado intermedio.

Por ejemplo, para Amazon Relational Database Service, el uso del certificado rds-ca-2019-root.pem puede provocar este problema.

Cree un certificado de CA de origen combinado que contenga tanto el certificado raíz como todos los certificados intermedios necesarios.

Para el caso de uso de Amazon Relational Database Service, en lugar del certificado rds-ca-2019-root.pem , utilice el certificado rds-combined-ca-bundle.pem .

Mensaje de error: ERROR: Out of shared memory HINT: You might need to increase max_locks_per_transaction.

El valor establecido para el parámetro max_locks_per_transaction no es suficiente. Establezca el valor de este parámetro en al menos { max_number_of_tables_per_database }/( max_connections + max_prepared_transactions ).

Mensaje de error: ERROR: no data left in message.

El paquete pglogic no está instalado correctamente en la instancia de origen. Para obtener más información sobre cómo instalar este paquete correctamente, consulte Instalar el paquete pglogic en la instancia de origen .

Mensaje de error: Cannot assign TransactionIds during recovery.

La fuente que está configurada está en modo de recuperación. Configure una fuente que no esté en modo de recuperación.
El volcado completo es lento. El destino de Cloud SQL puede tardar en importar datos grandes desde la base de datos de origen.
  • Al crear el destino, configure el tamaño del disco de datos para que se acerque al tamaño final. La fase de volcado completo utiliza una carga de trabajo de escritura intensiva de E/S y un tamaño de disco mayor tiene un mejor rendimiento de E/S. Para obtener más información, consulte Rendimiento del almacenamiento en bloque .
  • Elija un nivel superior para el destino de Cloud SQL para obtener el máximo ancho de banda de disco y de red disponible.
  • Ajusta el indicador max_wal_size del destino de Cloud SQL. Normalmente, 32 GB o 64 GB es un buen valor para configurar para esta bandera. Actualizar esta bandera no requiere que reinicies el servidor.
Mensaje de error: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again

El trabajo de migración falló durante la fase de volcado completo y el trabajo no se puede recuperar. La instancia de la base de datos de origen se reinició o estaba en modo de recuperación, o las conexiones de replicación finalizaron debido a un valor insuficiente establecido para el parámetro wal_sender_timeout .

Para encontrar la causa raíz del problema:

  1. Vaya a la página Explorador de registros en el Google Cloud Consola.
  2. En la lista de recursos, seleccione su réplica de Cloud SQL. Aparece una lista de los registros más recientes de la réplica.
  3. De los nombres de los archivos de registro, seleccione postgres.log .
  4. Establezca el nivel de gravedad del registro en todos los niveles superiores Warning . Los primeros registros de errores pueden ser la causa principal del error.
  • Asegúrese de que el Servicio de migración de bases de datos siempre pueda conectarse a la instancia de la base de datos de origen durante la fase de volcado completo.
  • Compruebe si el valor del parámetro wal_sender_timeout está establecido en un número mayor (por ejemplo, 0 ) en la instancia de la base de datos de origen.
  • Reinicie el trabajo de migración y vuelva a intentarlo.
Mensaje de error: ERROR: unknown column name {column_name}

Se agregó una columna a una tabla replicada en el nodo principal pero no en el nodo de réplica.

Sólo los cambios del lenguaje de manipulación de datos (DML) se actualizan automáticamente durante las migraciones continuas. Administrar los cambios en el lenguaje de definición de datos (DDL) para que las bases de datos de origen y destino sigan siendo compatibles es responsabilidad del usuario y se puede lograr de dos maneras:

  • Detenga las escrituras en la base de datos de origen y ejecute los comandos DDL tanto en el origen como en el destino. Antes de ejecutar los comandos DDL en el destino, otorgue la función cloudsqlexternalsync al usuario de Cloud SQL que aplica los cambios de DDL.
  • Utilice pglogical.replicate_ddl_command para permitir que los comandos DDL se ejecuten en el origen y el destino en un punto coherente. El usuario que ejecuta los comandos debe tener el mismo nombre de usuario tanto en el origen como en el destino, y debe ser el superusuario o el propietario del artefacto que se está migrando (por ejemplo, la tabla, secuencia, vista o base de datos).
  • Consulte Migración continua para encontrar ejemplos de uso de pglogical.replicate_ddl_command.

Mensaje de error: ERROR: cannot truncate a table referenced in a foreign key constraint

El usuario intentó truncar una tabla que tiene una restricción de clave externa.

Primero elimine la restricción de clave externa y luego trunque la tabla.

Mensaje de error: ERROR: connection to other side has died

La conexión de replicación finalizó debido a un valor insuficiente establecido para el wal_sender_timeout parameter . El error suele ocurrir durante la fase de replicación después del éxito del volcado inicial.

Considere aumentar el valor del parámetro wal_sender_timeout o deshabilitar el mecanismo de tiempo de espera estableciendo su valor en 0 en la instancia de la base de datos de origen.

Mensaje de advertencia: migration job test configuration has returned the following warnings: Some table(s) have limited support.

La fuente tiene tablas con soporte limitado, por ejemplo tablas sin claves principales.

Este es un mensaje de advertencia. Puede continuar con la migración, pero tenga en cuenta que las entidades no admitidas (por ejemplo, tablas sin claves principales) no se migran. Para obtener más información, consulte Configurar sus bases de datos de origen .

Cuando migra bases de datos seleccionadas y el trabajo de migración no puede replicar datos en una o más bases de datos, se muestra un estado de error en la lista de bases de datos. Varios errores en el trabajo de migración.

En la columna Errores , haga clic en Ver errores y corregirlos. También puede eliminar las bases de datos fallidas del trabajo de migración.

Para obtener más información sobre cómo eliminar una base de datos fallida de un trabajo de migración, consulte Administrar trabajos de migración .

Borre datos adicionales de su instancia de destino existente

Cuando migra a una instancia de destino existente , recibe el siguiente mensaje de error: The destination instance contains existing data or user defined entities (for example databases, tables, or functions). You can only migrate to empty instances. Clear your destination instance and retry the migration job.

Este problema puede ocurrir si su instancia de destino contiene datos adicionales. Solo puede migrar a instancias existentes que estén vacías. Consulte Limitaciones conocidas .

Cosas para probar

Borre los datos adicionales de su instancia de destino y comience el trabajo de migración nuevamente realizando los siguientes pasos:

  1. Detén el trabajo de migración .
  2. En este punto, su instancia de Cloud SQL de destino está en modo "solo lectura". Promocione la instancia de destino para obtener acceso de escritura.
  3. Conéctese a su instancia de Cloud SQL de destino .
  4. Elimine datos adicionales de las bases de datos de su instancia de destino. Su destino solo puede contener datos de configuración del sistema. Las bases de datos de destino no pueden contener datos de usuario (como tablas). Hay diferentes sentencias SQL que puede ejecutar en sus bases de datos para buscar datos que no sean del sistema, por ejemplo:

    Ejemplo de declaración SQL para recuperar bases de datos que no pertenecen al sistema (haga clic para expandir)

    SELECT datname FROM pg_catalog.pg_database
    WHERE datname NOT IN ('cloudsqladmin', 'template1', 'template0', 'postgres');

    Ejemplo de declaración SQL para recuperar datos que no son del sistema en la base de datos postgres (haga clic para expandir)

    La base de datos postgres es una base de datos del sistema, pero puede contener datos que no pertenecen al sistema. Asegúrese de ejecutar estas declaraciones en la base de datos postgres . Si usa el cliente psql para conectarse a la instancia de destino, puede cambiar a otra base de datos sin restablecer su conexión usando el comando \connect {database_name_here} .

    SELECT table_schema, table_name FROM information_schema.tables
    WHERE table_schema != 'information_schema' AND table_schema not like 'pg\_%';
    
    SELECT routine_schema, routine_name FROM information_schema.routines
    WHERE routine_schema != 'information_schema' AND routine_schema not like 'pg\_%';
    
    SELECT extname FROM pg_extension WHERE extname != 'plpgsql';
        
  5. Inicie el trabajo de migración .

Limpiar ranuras de replicación

Verá uno de los siguientes mensajes:

  • 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.

El problema podría ser

Al promocionar una instancia de Cloud SQL, si no se puede acceder a la instancia de origen desde la instancia de Cloud SQL (por ejemplo, la instancia de origen no se está ejecutando o eliminaste la instancia de Cloud SQL de la lista permitida de instancias de origen), entonces la configuración necesaria para la replicación no se puede limpiar durante la promoción de un trabajo de migración. Debe limpiar las ranuras de replicación manualmente.

Cosas para probar

Para cada base de datos, ejecute los siguientes comandos como usuario con privilegios superuser :

  1. Obtenga los nombres de las ranuras de replicación del mensaje de error y luego ejecute el siguiente comando para eliminar las ranuras, una por una:

    select pg_drop_replication_slot({slot_name});
  2. Si los nombres de las ranuras de replicación no están disponibles en el mensaje de error, ejecute el siguiente comando para consultar las ranuras de replicación existentes:

    select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%cloudsql%' and active = 'f';
  3. Si no hay réplicas de Cloud SQL que utilicen la instancia de origen, ejecute el siguiente comando para limpiar la configuración pglogical :

    select pglogical.drop_node(node_name) from pglogical.node where node_name like 'cloudsql';
  4. Si la extensión pglogical ya no es necesaria, ejecute el siguiente comando para desinstalar la extensión:

    DROP EXTENSION IF EXISTS pglogical;


Mensaje de error: Cannot connect to invalid database

Al migrar a PostgreSQL versión 15, después de varios reintentos de conexión posteriores, se produce uno de los siguientes síntomas:

El problema podría ser

Este problema a menudo se atribuye al problema del punto muerto en la extensión pglogical . Para obtener más información, consulte el rastreador de problemas pglogical en GitHub .

Cosas para probar

Realice el trabajo de migración nuevamente con una nueva instancia de destino

Intente eliminar la base de datos de destino donde experimentó el problema y vuelva a crear su trabajo de migración. Siga estos pasos:

  1. Elimine la instancia de destino donde experimentó los problemas. Consulta Eliminar instancias en la documentación de Cloud SQL para PostgreSQL.
  2. Elimine el trabajo de migración fallido. Consulte Revisar un trabajo de migración .
  3. Vuelva a crear su trabajo de migración. Consulte Crear un trabajo de migración .

Migrar a una versión intermedia

Considere migrar a una versión anterior de PostgreSQL, como PostgreSQL 14. Después de una migración exitosa, puede intentar actualizar a la instancia de PostgreSQL 15 deseada. Consulte Actualizar la versión principal de la base de datos migrando datos en la documentación de Cloud SQL para PostgreSQL.

Administrar usuarios y roles

Migrar usuarios existentes

Actualmente, el Servicio de migración de bases de datos no admite la migración de usuarios existentes desde una instancia de origen a una instancia de Cloud SQL de destino. Puedes gestionar esta migración creando los usuarios en Cloud SQL manualmente.

Acerca del usuario cloudsqlexternalsync

Durante la migración, todos los objetos en la réplica de Cloud SQL son propiedad del usuario cloudsqlexternalsync . Una vez migrados los datos, puede modificar la propiedad de los objetos a otros usuarios completando los siguientes pasos:

  • Ejecute el comando GRANT cloudsqlexternalsync to {USER} .
  • En cada base de datos, ejecute la reassign owned by cloudsqlexternalsync to {USER} ; dominio.
  • Para eliminar el usuario cloudsqlexternalsync , ejecute el comando drop role cloudsqlexternalsync .

Importar datos a una nueva instancia de Cloud SQL

Si primero exportas datos de una instancia de Cloud SQL que el Servicio de migración de bases de datos migró a Cloud Storage y luego importas los datos de Cloud Storage a una instancia de Cloud SQL independiente, la importación puede fallar porque el usuario cloudsqlexternalsync no existe en la instancia de destino.

Para mitigar el problema, cree el usuario cloudsqlexternalsync en la instancia de destino o elimine el usuario de la instancia migrada.

,

El proceso del trabajo de migración puede generar errores durante el tiempo de ejecución.

  • Algunos errores, como una contraseña incorrecta en la base de datos de origen, son recuperables, lo que significa que se pueden corregir y el trabajo de migración se reanuda automáticamente.
  • Algunos son irrecuperables, como los errores en la replicación de datos, lo que significa que el trabajo de migración debe reiniciarse desde el principio.

Cuando se produce un error, el estado del trabajo de migración cambia a Failed y el subestado refleja el último estado antes del error.

Para solucionar un error, navegue hasta el trabajo de migración fallido para ver el error y siga los pasos descritos en el mensaje de error.

Para ver más detalles sobre el error, navegue hasta Cloud Monitoring usando el enlace en el trabajo de migración. Los registros se filtran según el trabajo de migración específico.

En la siguiente tabla, puede encontrar algunos ejemplos de problemas y cómo se pueden resolver:

Para este problema... El problema podría ser... Prueba esto...
Cuando migra a una instancia de destino existente , recibe el siguiente mensaje de error: The destination instance contains existing data or user defined entities (for example databases, tables, or functions). You can only migrate to empty instances. Clear your destination instance and retry the migration job. Su instancia de Cloud SQL de destino contiene datos adicionales. Solo puede migrar a instancias existentes que estén vacías. Consulte Limitaciones conocidas . Promocione su instancia de destino para convertirla en una instancia de lectura/escritura, elimine los datos adicionales y vuelva a intentar el trabajo de migración. Consulte Borrar datos adicionales de su instancia de destino existente .
Error al conectarse a la instancia de la base de datos de origen. Hubo un problema de conectividad entre la instancia de la base de datos de origen y la instancia de destino. Siga los pasos en Depuración de conectividad .
Error al ejecutar el trabajo de migración debido a versiones incompatibles de la base de datos de origen y destino. Las versiones de la base de datos de origen y de destino no son una combinación admitida. Específicamente, la versión de la base de datos de origen proporcionada es incompatible con la versión de la base de datos de destino. Asegúrese de que la versión de la base de datos de destino sea la misma o una versión principal superior a la versión de la base de datos de origen. Luego, cree un nuevo trabajo de migración.
Los lenguajes de definición de datos (DDL) o los lenguajes de manipulación de datos (DML) están bloqueados en el origen. Los DDL que requieren el bloqueo de ACCESS EXCLUSIVE y se ejecutan durante la fase de volcado completo están bloqueados.

Durante el proceso de sincronización inicial (volcado completo), se deben evitar en las tablas DDL o programas que requieran bloqueos de ACCESS EXCLUSIVE como ALTER TABLE o DROP TABLE . De lo contrario, los DDL o programas esperarán hasta que finalice la sincronización inicial.

Por ejemplo, si una tabla todavía está en el proceso de sincronización inicial y se ejecuta un comando ALTER TABLE en la misma tabla, entonces el comando no se ejecutará y los comandos DDL y DML posteriores se bloquearán hasta que finalice la sincronización inicial.

Mensaje de error: No pglogical extension installed on databases (X) Una o más bases de datos de origen no tienen pglogical instalado. Siga estas pautas para instalar pglogical en las bases de datos de la instancia de origen.
Al migrar a PostgreSQL versión 15, después de varios reintentos de conexión posteriores, se produce uno de los siguientes síntomas: Este problema a menudo se atribuye al problema del punto muerto en la extensión pglogical . Para obtener más información, consulte el rastreador de problemas pglogical en GitHub . Vuelva a intentar el trabajo de migración o migre primero a una versión intermedia de PostgreSQL. Para obtener más detalles, consulte Mensaje de error: Cannot connect to invalid database .
Mensaje de error: Replication user 'x' doesn't have sufficient privileges. El usuario que utiliza el Servicio de migración de bases de datos no tiene los privilegios necesarios para realizar la operación designada. Siga estas pautas para asegurarse de que este usuario tenga los privilegios necesarios.
Mensaje de error: Unable to connect to source database server. El servicio de migración de bases de datos no puede establecer una conexión con el servidor de la base de datos de origen. Asegúrese de que las instancias de la base de datos de origen y de destino puedan comunicarse entre sí y de haber completado todos los requisitos previos requeridos que aparecieron cuando definió la configuración para el trabajo de migración .
Mensaje de error: The source database 'wal_level' configuration must be equal to 'logical'. El wal_level de la base de datos de origen se establece en un valor distinto del logical . Establezca wal_level en logical .
Mensaje de error: The source database 'max_replication_slots' configuration is not sufficient. El parámetro max_replication_slots no se configuró correctamente. Siga estas pautas para configurar este parámetro correctamente.
Mensaje de error: The source database 'max_wal_senders' configuration is not sufficient. El parámetro max_wal_senders no se configuró correctamente. Siga estas pautas para configurar este parámetro correctamente.
Mensaje de error: The source database 'max_worker_processes' configuration is not sufficient. El parámetro max_worker_processes no se configuró correctamente. Siga estas pautas para configurar este parámetro correctamente.

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

O

Mensaje de error: Error promoting EM replica: finished drop replication with errors.

La configuración necesaria para la replicación no se puede limpiar durante la promoción de un trabajo de migración.

Para cada base de datos, ejecute comandos como usuario con privilegios superuser .

Para obtener más información sobre qué comandos ejecutar, consulte Limpiar ranuras de replicación .

Mensaje de error: x509 certificate signed by unknown authority.

El certificado de CA de origen proporcionado al Servicio de migración de bases de datos puede contener solo el certificado raíz. Sin embargo, el certificado de origen requiere tanto el certificado raíz como cualquier certificado intermedio.

Por ejemplo, para Amazon Relational Database Service, el uso del certificado rds-ca-2019-root.pem puede provocar este problema.

Cree un certificado de CA de origen combinado que contenga tanto el certificado raíz como todos los certificados intermedios necesarios.

Para el caso de uso de Amazon Relational Database Service, en lugar del certificado rds-ca-2019-root.pem , utilice el certificado rds-combined-ca-bundle.pem .

Mensaje de error: ERROR: Out of shared memory HINT: You might need to increase max_locks_per_transaction.

El valor establecido para el parámetro max_locks_per_transaction no es suficiente. Establezca el valor de este parámetro en al menos { max_number_of_tables_per_database }/( max_connections + max_prepared_transactions ).

Mensaje de error: ERROR: no data left in message.

El paquete pglogic no está instalado correctamente en la instancia de origen. Para obtener más información sobre cómo instalar este paquete correctamente, consulte Instalar el paquete pglogic en la instancia de origen .

Mensaje de error: Cannot assign TransactionIds during recovery.

La fuente que está configurada está en modo de recuperación. Configure una fuente que no esté en modo de recuperación.
El volcado completo es lento. El destino de Cloud SQL puede tardar en importar datos grandes desde la base de datos de origen.
  • Al crear el destino, configure el tamaño del disco de datos para que se acerque al tamaño final. La fase de volcado completo utiliza una carga de trabajo de escritura intensiva de E/S y un tamaño de disco mayor tiene un mejor rendimiento de E/S. Para obtener más información, consulte Rendimiento del almacenamiento en bloque .
  • Elija un nivel superior para el destino de Cloud SQL para obtener el máximo ancho de banda de disco y de red disponible.
  • Ajusta el indicador max_wal_size del destino de Cloud SQL. Normalmente, 32 GB o 64 GB es un buen valor para configurar para esta bandera. Actualizar esta bandera no requiere que reinicies el servidor.
Mensaje de error: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again

El trabajo de migración falló durante la fase de volcado completo y el trabajo no se puede recuperar. La instancia de la base de datos de origen se reinició o estaba en modo de recuperación, o las conexiones de replicación finalizaron debido a un valor insuficiente establecido para el parámetro wal_sender_timeout .

Para encontrar la causa raíz del problema:

  1. Vaya a la página Explorador de registros en el Google Cloud Consola.
  2. En la lista de recursos, seleccione su réplica de Cloud SQL. Aparece una lista de los registros más recientes de la réplica.
  3. De los nombres de los archivos de registro, seleccione postgres.log .
  4. Establezca el nivel de gravedad del registro en todos los niveles superiores Warning . Los primeros registros de errores pueden ser la causa principal del error.
  • Asegúrese de que el Servicio de migración de bases de datos siempre pueda conectarse a la instancia de la base de datos de origen durante la fase de volcado completo.
  • Compruebe si el valor del parámetro wal_sender_timeout está establecido en un número mayor (por ejemplo, 0 ) en la instancia de la base de datos de origen.
  • Reinicie el trabajo de migración y vuelva a intentarlo.
Mensaje de error: ERROR: unknown column name {column_name}

Se agregó una columna a una tabla replicada en el nodo principal pero no en el nodo de réplica.

Sólo los cambios del lenguaje de manipulación de datos (DML) se actualizan automáticamente durante las migraciones continuas. Administrar los cambios en el lenguaje de definición de datos (DDL) para que las bases de datos de origen y destino sigan siendo compatibles es responsabilidad del usuario y se puede lograr de dos maneras:

  • Detenga las escrituras en la base de datos de origen y ejecute los comandos DDL tanto en el origen como en el destino. Antes de ejecutar los comandos DDL en el destino, otorgue la función cloudsqlexternalsync al usuario de Cloud SQL que aplica los cambios de DDL.
  • Utilice pglogical.replicate_ddl_command para permitir que los comandos DDL se ejecuten en el origen y el destino en un punto coherente. El usuario que ejecuta los comandos debe tener el mismo nombre de usuario tanto en el origen como en el destino, y debe ser el superusuario o el propietario del artefacto que se está migrando (por ejemplo, la tabla, secuencia, vista o base de datos).
  • Consulte Migración continua para encontrar ejemplos de uso de pglogical.replicate_ddl_command.

Mensaje de error: ERROR: cannot truncate a table referenced in a foreign key constraint

El usuario intentó truncar una tabla que tiene una restricción de clave externa.

Primero elimine la restricción de clave externa y luego trunque la tabla.

Mensaje de error: ERROR: connection to other side has died

La conexión de replicación finalizó debido a un valor insuficiente establecido para el wal_sender_timeout parameter . El error suele ocurrir durante la fase de replicación después del éxito del volcado inicial.

Considere aumentar el valor del parámetro wal_sender_timeout o deshabilitar el mecanismo de tiempo de espera estableciendo su valor en 0 en la instancia de la base de datos de origen.

Mensaje de advertencia: migration job test configuration has returned the following warnings: Some table(s) have limited support.

La fuente tiene tablas con soporte limitado, por ejemplo tablas sin claves principales.

Este es un mensaje de advertencia. Puede continuar con la migración, pero tenga en cuenta que las entidades no admitidas (por ejemplo, tablas sin claves principales) no se migran. Para obtener más información, consulte Configurar sus bases de datos de origen .

Cuando migra bases de datos seleccionadas y el trabajo de migración no puede replicar datos en una o más bases de datos, se muestra un estado de error en la lista de bases de datos. Varios errores en el trabajo de migración.

En la columna Errores , haga clic en Ver errores y corregirlos. También puede eliminar las bases de datos fallidas del trabajo de migración.

Para obtener más información sobre cómo eliminar una base de datos fallida de un trabajo de migración, consulte Administrar trabajos de migración .

Borre datos adicionales de su instancia de destino existente

Cuando migra a una instancia de destino existente , recibe el siguiente mensaje de error: The destination instance contains existing data or user defined entities (for example databases, tables, or functions). You can only migrate to empty instances. Clear your destination instance and retry the migration job.

Este problema puede ocurrir si su instancia de destino contiene datos adicionales. Solo puede migrar a instancias existentes que estén vacías. Consulte Limitaciones conocidas .

Cosas para probar

Borre los datos adicionales de su instancia de destino y comience el trabajo de migración nuevamente realizando los siguientes pasos:

  1. Detén el trabajo de migración .
  2. En este punto, su instancia de Cloud SQL de destino está en modo "solo lectura". Promocione la instancia de destino para obtener acceso de escritura.
  3. Conéctese a su instancia de Cloud SQL de destino .
  4. Elimine datos adicionales de las bases de datos de su instancia de destino. Su destino solo puede contener datos de configuración del sistema. Las bases de datos de destino no pueden contener datos de usuario (como tablas). Hay diferentes sentencias SQL que puede ejecutar en sus bases de datos para buscar datos que no sean del sistema, por ejemplo:

    Ejemplo de declaración SQL para recuperar bases de datos que no pertenecen al sistema (haga clic para expandir)

    SELECT datname FROM pg_catalog.pg_database
    WHERE datname NOT IN ('cloudsqladmin', 'template1', 'template0', 'postgres');

    Ejemplo de declaración SQL para recuperar datos que no son del sistema en la base de datos postgres (haga clic para expandir)

    La base de datos postgres es una base de datos del sistema, pero puede contener datos que no pertenecen al sistema. Asegúrese de ejecutar estas declaraciones en la base de datos postgres . Si usa el cliente psql para conectarse a la instancia de destino, puede cambiar a otra base de datos sin restablecer su conexión usando el comando \connect {database_name_here} .

    SELECT table_schema, table_name FROM information_schema.tables
    WHERE table_schema != 'information_schema' AND table_schema not like 'pg\_%';
    
    SELECT routine_schema, routine_name FROM information_schema.routines
    WHERE routine_schema != 'information_schema' AND routine_schema not like 'pg\_%';
    
    SELECT extname FROM pg_extension WHERE extname != 'plpgsql';
        
  5. Inicie el trabajo de migración .

Limpiar ranuras de replicación

Verá uno de los siguientes mensajes:

  • 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.

El problema podría ser

Al promocionar una instancia de Cloud SQL, si no se puede acceder a la instancia de origen desde la instancia de Cloud SQL (por ejemplo, la instancia de origen no se está ejecutando o eliminaste la instancia de Cloud SQL de la lista permitida de instancias de origen), entonces la configuración necesaria para la replicación no se puede limpiar durante la promoción de un trabajo de migración. Debe limpiar las ranuras de replicación manualmente.

Cosas para probar

Para cada base de datos, ejecute los siguientes comandos como usuario con privilegios superuser :

  1. Obtenga los nombres de las ranuras de replicación del mensaje de error y luego ejecute el siguiente comando para eliminar las ranuras, una por una:

    select pg_drop_replication_slot({slot_name});
  2. Si los nombres de las ranuras de replicación no están disponibles en el mensaje de error, ejecute el siguiente comando para consultar las ranuras de replicación existentes:

    select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%cloudsql%' and active = 'f';
  3. Si no hay réplicas de Cloud SQL que utilicen la instancia de origen, ejecute el siguiente comando para limpiar la configuración pglogical :

    select pglogical.drop_node(node_name) from pglogical.node where node_name like 'cloudsql';
  4. Si la extensión pglogical ya no es necesaria, ejecute el siguiente comando para desinstalar la extensión:

    DROP EXTENSION IF EXISTS pglogical;


Mensaje de error: Cannot connect to invalid database

Al migrar a PostgreSQL versión 15, después de varios reintentos de conexión posteriores, se produce uno de los siguientes síntomas:

El problema podría ser

Este problema a menudo se atribuye al problema del punto muerto en la extensión pglogical . Para obtener más información, consulte el rastreador de problemas pglogical en GitHub .

Cosas para probar

Realice el trabajo de migración nuevamente con una nueva instancia de destino

Intente eliminar la base de datos de destino donde experimentó el problema y vuelva a crear su trabajo de migración. Siga estos pasos:

  1. Elimine la instancia de destino donde experimentó los problemas. Consulte Eliminar instancias en Cloud SQL para la documentación PostgreSQL.
  2. Elimine el trabajo de migración fallido. Ver revisión de un trabajo de migración .
  3. Vuelva a crear su trabajo de migración. Ver Crear un trabajo de migración .

Migrar a una versión intermedia

Considere la migración a una versión anterior de PostgreSQL, como PostgreSQL 14. Después de una migración exitosa, puede intentar actualizar a la instancia PostgreSQL 15 deseada. Consulte Actualizar la versión principal de la base de datos migrando datos en la nube SQL para la documentación PostgreSQL.

Administrar usuarios y roles

Migrar usuarios existentes

Actualmente, el servicio de migración de bases de datos no admite migrar a los usuarios existentes desde una instancia de origen a una instancia de Destination Cloud SQL. Puede administrar esta migración creando a los usuarios en la nube SQL manualmente.

Acerca del usuario cloudsqlexternalsync

Durante la migración, todos los objetos en la réplica de SQL de la nube son propiedad del usuario de cloudsqlexternalsync . Después de migrar los datos, puede modificar la propiedad de los objetos a otros usuarios completando los siguientes pasos:

  • Ejecute el GRANT cloudsqlexternalsync to {USER} .
  • En cada base de datos, ejecute el reassign owned by cloudsqlexternalsync to {USER} ; dominio.
  • Para eliminar el usuario cloudsqlexternalsync , ejecute el comando drop role cloudsqlexternalsync .

Importar datos a una nueva instancia de Cloud SQL

Si primero exporta los datos de una instancia de Cloud SQL de que el servicio de migración de bases de datos migró al almacenamiento en la nube, y luego importe los datos del almacenamiento en la nube en una instancia de SQL de nube independiente, la importación puede fallar porque el usuario cloudsqlexternalsync no existe en la instancia de destino.

Para mitigar el problema, cree el usuario de cloudsqlexternalsync en la instancia de destino o elimine al usuario de la instancia migrada.