Usar un archivo de volcado para configurar la replicación desde bases de datos externas

En esta página se describe el proceso para configurar la replicación cuando tienes un archivo de volcado que has creado desde tu servidor externo.

Debes completar todos los pasos de esta página. Cuando termine, podrá administrar y monitorizar la instancia de representación de origen de la misma forma que cualquier otra instancia de Cloud SQL.

Antes de empezar

Antes de empezar, debes configurar el servidor externo, crear la instancia de representación de origen y configurar la réplica de Cloud SQL.

Actualizar los permisos del usuario de replicación

El usuario de replicación del servidor externo está configurado para aceptar conexiones de cualquier host (%). Debes actualizar esta cuenta de usuario para que solo se pueda usar con la réplica de Cloud SQL. Abre un terminal en el servidor externo e introduce estos comandos:

Cliente mysql

    UPDATE mysql.user
      SET Host='NEW_HOST'
      WHERE Host='OLD_HOST'
      AND User='USERNAME';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'GCP_USERNAME'@'HOST';
    FLUSH PRIVILEGES;

Ejemplo

    UPDATE mysql.user
      SET Host='192.0.2.0'
      WHERE Host='%'
      AND User='replicationUser';
      GRANT REPLICATION SLAVE, EXECUTE
      ON *.* TO 'gcp_user'@'gmail.com';
    FLUSH PRIVILEGES;
Propiedad Descripción
NEW_HOST Especifica la IP de salida de la réplica de Cloud SQL.
OLD_HOST El valor actual asignado a Host que quieras cambiar.
USERNAME La cuenta de usuario de replicación del servidor externo.
GCP_USERNAME El nombre de usuario de la cuenta de usuario de la plataforma Google Cloud (GCP).
HOST El nombre de host de la cuenta de usuario de la Google Cloud plataforma (GCP).

Verificar la configuración de la replicación

Una vez que hayas completado la configuración, asegúrate de que la réplica de Cloud SQL pueda replicar desde el servidor externo.

Primero, comprueba que la configuración de sincronización externa sea correcta. Para ello, usa los comandos que se indican a continuación para verificarlo:

  • Conectividad entre la réplica de Cloud SQL y el servidor externo
  • Privilegios de usuario de replicación
  • Compatibilidad de versiones
  • La réplica de Cloud SQL aún no está replicando
  • Los registros binarios están habilitados en el servidor externo
  • Se ha habilitado un identificador de transacción global (GTID)

Abre un terminal e introduce estos comandos para verificar que los ajustes de sincronización externa son correctos:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings

Ejemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
Propiedad Descripción
SYNC_MODE verifyExternalSyncSettings comprueba que puedes mantener sincronizada la réplica de Cloud SQL y el servidor externo después de configurar la replicación. Los modos de sincronización incluyen EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE y OFFLINE.
SKIP_VERIFICATION Indica si se debe omitir o no el paso de verificación integrado antes de sincronizar los datos. Solo se recomienda si ya has verificado tu configuración de replicación.
PROJECT_ID El ID de tu proyecto en Google Cloud.
REPLICA_INSTANCE ID de tu réplica de Cloud SQL.

Exportar una base de datos a un segmento de Cloud Storage

Puedes rellenar una réplica de Cloud SQL con un archivo mysqldump ubicado en un segmento de Cloud Storage. Se aplican las siguientes condiciones:

  • Debes usar la utilidad mysqldump incluida en MySQL.
  • Mientras se ejecuta mysqldump, no realices ninguna operación DDL en el servidor externo. Si lo hace, podría haber incoherencias en el archivo de exportación.

Para exportar tu base de datos a un segmento de Cloud Storage, sigue estos pasos:

  1. En Google Cloud, crea un segmento de Cloud Storage.
  2. Abre un terminal con un cliente que se conecte al servidor de la base de datos externa y ejecuta el siguiente comando.

mysqldump

    mysqldump \
        --host=EXTERNAL_HOST \
        --port=EXTERNAL_PORT \
        --user=USERNAME\
        --password=PASSWORD \
        --databases=DATABASE_LIST  \
        --hex-blob \
        SOURCE_DATA  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --set-gtid-purged=on \
        ADD_DROP_TABLE \
        ROUTINES \
        COMPRESS \
        GZIP \
        | gcloud storage cp - gs://BUCKET/DUMP_FILENAME

Ejemplo

    mysqldump \
        --host=192.0.2.1 \
        --port=3306 \
        --user=replicationUser \
        --password \
        --databases guestbook journal \
        --hex-blob \
        --master-data=1 \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --single-transaction \
        --compress \
        | gzip \
        | gcloud storage cp - gs://replica-bucket/external-database.sql.gz
Propiedad Descripción
EXTERNAL_HOST Dirección IPv4 o DNS del servidor externo.
EXTERNAL_PORT El puerto del servidor externo. Si el servidor externo está alojado en Cloud SQL, esta opción es 3306.
USERNAME Nombre de la cuenta de usuario de replicación o de la cuenta de usuario del servidor externo que tiene permisos de lectura de la base de datos.
PASSWORD Contraseña del usuario de replicación.
DATABASE_LIST Lista separada por espacios de todas las bases de datos del servidor externo, excepto las bases de datos del sistema (sys, mysql, performance_schema y information_schema). Usa el comando SHOW DATABASES MySQL para enumerar tus bases de datos.
SOURCE_DATA Si utilizas una versión de MySQL anterior a la 8.0.26, usa --master-data como valor de este parámetro. En las versiones de MySQL 8.0.26 o posteriores, asigna el valor --source-data a este parámetro.
ADD_DROP_TABLE Si quieres añadir una instrucción DROP TABLE antes de cada instrucción CREATE TABLE, incluye --add-drop-table.
ROUTINES Si quieres mostrar las rutinas almacenadas, como los procedimientos y las funciones, en la salida de las bases de datos volcadas, incluye --routines.
COMPRESS Si quieres comprimir toda la información que se envía entre la réplica de Cloud SQL y el servidor externo, usa --compress.
GZIP Si quieres comprimir aún más el archivo de volcado, usa | gzip. Si tu base de datos contiene datos que no se comprimen bien, como datos binarios no comprimibles o imágenes JPG, no uses esta opción.
BUCKET El nombre del segmento que ha creado en el paso 1 para contener el archivo de volcado.
DUMP_FILENAME Se crea un archivo con este nombre en tu segmento. Este archivo contiene el contenido de la base de datos de tu servidor externo.

Actualiza la instancia de representación de origen con la ruta de archivo del segmento de Cloud Storage

La instancia de representación de origen es una instancia de Cloud SQL que representa el servidor de base de datos de origen en la réplica de Cloud SQL. Se puede ver en la Google Cloud consola y tiene el mismo aspecto que una instancia de Cloud SQL normal, pero no contiene datos, no requiere configuración ni mantenimiento y no afecta a la facturación.

El archivo source.json contiene información sobre la instancia de representación de origen.

REST

{
  "name": "PRIMARY_INSTANCE_NAME",
  "region": "REGION_NAME",
  "databaseVersion": "DB_NAME_AND_VERSION",
  "onPremisesConfiguration": {
    "hostPort": "IP_ADDRESS_AND_PORT",
    "username": "USERNAME",
    "password": "PASSWORD"
  },
  "dumpFilePath" :"DUMP_FILE_PATH"
}

Ejemplo

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  },
  "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz"
}
Propiedad Descripción
PRIMARY_INSTANCE_NAME Nombre de la instancia de Cloud SQL asociada a la instancia de representación de origen.
REGION_NAME Nombre de la región asignada a la instancia de representación de la fuente.
DB_NAME_AND_VERSION El nombre y el número de versión de la base de datos asociada a la instancia de representación de origen.
IP_ADDRESS_AND_PORT La dirección IP y el número de puerto reservados para la instancia de representación de origen.
USERNAME Nombre de usuario de la instancia de representación de origen.
PASSWORD Contraseña de la instancia de representación de origen.
DUMP_FILE_PATH La ruta del archivo de volcado que contiene el contenido de la base de datos de tu servidor externo.

Después de configurar la réplica de Cloud SQL, debes actualizar la instancia de representación de origen con la ruta de archivo del segmento de Cloud Storage.

REST

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE

Ejemplo

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./source.json \
         -X PATCH \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
Propiedad Descripción
JSON_PATH Ruta del archivo JSON almacenado en el segmento de Cloud Storage. Este archivo contiene datos sobre la instancia de representación de origen.
PROJECT_ID El ID de tu proyecto en Google Cloud.
SOURCE_REPRESENTATION_INSTANCE Nombre de la instancia de representación de origen.

Iniciar la replicación en el servidor externo

Una vez que haya verificado que puede replicar desde el servidor externo, podrá realizar la replicación.

Durante el proceso de importación inicial, no realice ninguna operación de DDL en el servidor externo. Si lo hace, podría haber incoherencias durante la importación. Una vez que se completa el proceso de importación, la réplica usa los registros binarios del servidor externo para ponerse al día con el estado actual del servidor externo.

Abre un terminal, inicia sesión con gcloud y, a continuación, introduce el comando curl para replicar desde el servidor externo.

REST

  gcloud auth login
  ACCESS_TOKEN="$(gcloud auth print-access-token)"
  curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
       --header 'Content-Type: application/json' \
       --data '{
           "syncMode": "SYNC_MODE",
           "skipVerification": "SKIP_VERIFICATION"
         }' \
       -X POST \
       https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync

Ejemplo

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "syncMode": "online",
             "skipVerification": false
           }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Propiedad Descripción
SYNC_MODE Verifica que puedes mantener sincronizados la réplica de Cloud SQL y el servidor externo después de configurar la replicación.
SKIP_VERIFICATION Indica si se debe omitir o no el paso de verificación integrado antes de sincronizar los datos. Solo se recomienda si ya has verificado tu configuración de replicación.
PROJECT_ID El ID de tu proyecto en Google Cloud.
REPLICA_INSTANCE ID de tu réplica de Cloud SQL.

Liberar espacio de almacenamiento

Si has replicado desde un archivo de un contenedor, puedes eliminar este archivo y el contenedor. Consulta la documentación de Cloud Storage sobre cómo eliminar objetos y eliminar segmentos.

Continuar con la replicación

Una vez que inicies la replicación desde el servidor externo, tendrás que monitorizarla y, a continuación, completar la migración. Para obtener más información, consulta Monitorizar la replicación.

Solucionar problemas

Problema Solución de problemas
Lost connection to MySQL server during query when dumping table. Es posible que la fuente haya dejado de estar disponible o que el volcado contenga paquetes demasiado grandes.

Asegúrate de que el primario externo esté disponible para conectarse. También puedes modificar los valores de las marcas net_read_timeout y net_write_timeout en la instancia de origen para detener el error. Para obtener más información sobre los valores permitidos de estas marcas, consulta el artículo Configurar marcas de base de datos.

Para obtener más información sobre el uso de las marcas mysqldump para la migración de importaciones gestionadas, consulta Marcas de sincronización inicial permitidas y predeterminadas.

La migración de datos inicial se ha realizado correctamente, pero no se están replicando datos. Una posible causa principal podría ser que tu base de datos de origen haya definido marcas de replicación que provoquen que no se repliquen algunos o todos los cambios de la base de datos.

Asegúrate de que las marcas de replicación, como binlog-do-db, binlog-ignore-db, replicate-do-db o replicate-ignore-db, no estén configuradas de forma que entren en conflicto.

Ejecuta el comando show master status en la instancia principal para ver la configuración actual.

La migración de datos inicial se ha realizado correctamente, pero la replicación de datos deja de funcionar al cabo de un tiempo. Puedes probar a realizar lo siguiente:

  • Consulta las métricas de replicación de tu instancia réplica en la sección Cloud Monitoring de la consola de Google Cloud .
  • Los errores del subproceso de E/S o del subproceso SQL de MySQL se pueden encontrar en Cloud Logging en los archivos mysql.err log.
  • El error también se puede encontrar al conectarse a la instancia de réplica. Ejecuta el comando SHOW SLAVE STATUS y comprueba los siguientes campos en el resultado:
    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error
mysqld check failed: data disk is full. El disco de datos de la instancia réplica está lleno.

Aumenta el tamaño del disco de la instancia réplica. Puedes aumentar el tamaño del disco manualmente o habilitar el aumento automático del almacenamiento.

Revisar los registros de replicación

Cuando verifiques la configuración de la réplica, se generarán registros.

Para ver estos registros, sigue estos pasos:

  1. Ve al visualizador de registros de la Google Cloud consola.

    Ir al visualizador de registros

  2. Selecciona la réplica de Cloud SQL en el menú desplegable Instancia.
  3. Selecciona el archivo de registro replication-setup.log.

Si la réplica de Cloud SQL no puede conectarse al servidor externo, comprueba lo siguiente:

  • Cualquier cortafuegos del servidor externo está configurado para permitir conexiones desde la dirección IP de salida de la réplica de Cloud SQL.
  • La configuración de SSL/TLS es correcta.
  • El usuario, el host y la contraseña de la réplica son correctos.

Siguientes pasos