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 creaste desde tu servidor externo.

Debes completar todos los pasos de esta página. Cuando termines, puedes administrar y supervisar la instancia de representación de origen de la misma manera que lo harías con cualquier otra instancia de Cloud SQL.

Antes de comenzar

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

Actualiza los permisos del usuario de replicación

El usuario de replicación del servidor externo está configurado a fin de 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 una terminal en el servidor externo e ingresa los siguientes 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 saliente de la réplica de Cloud SQL.
OLD_HOST Es el valor actual asignado a Host que deseas cambiar.
USERNAME La cuenta de usuario de replicación en el servidor externo.
GCP_USERNAME Nombre de usuario de la cuenta de usuario de Google Cloud Platform (GCP).
HOST El nombre de host de la cuenta de usuario de Google Cloud Platform (GCP).

Verifica la configuración de la replicación

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

En primer lugar, asegúrate de que la configuración de la sincronización externa sea correcta. A fin de verificar estos aspectos, usa los siguientes comandos:

  • Conectividad entre la réplica de Cloud SQL y el servidor externo
  • Privilegios del usuario de replicación
  • Compatibilidad de versiones
  • La réplica de Cloud SQL aún no se replica
  • Los binlogs están habilitados en el servidor externo
  • Un identificador de transacciones global (GTID) está habilitado

Abre una terminal e ingresa estos comandos para verificar que la configuración de la sincronización externa sea correcta:

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 verifica que puedas mantener sincronizadas la réplica y el servidor externo de Cloud SQL después de configurar la réplica. 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 tus datos. Solo se recomienda si ya verificaste tu ajuste de replicación.
PROJECT_ID Es el ID de tu proyecto en Google Cloud.
REPLICA_INSTANCE Es el ID de tu réplica de Cloud SQL.

Exporta tu base de datos a un bucket de Cloud Storage

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

  • Debes usar la utilidad mysqldump incluida con MySQL.
  • Mientras mysqldump esté en ejecución, no realices ninguna operación de DDL en el servidor externo. De lo contrario, se podrían causar inconsistencias en el archivo de exportación.

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

  1. En Google Cloud, crea un bucket de Cloud Storage.
  2. Abre una terminal con un cliente que se conecta 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 \
        | gsutil 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 \
        | gsutil cp - gs://replica-bucket/external-database.sql.gz
Propiedad Descripción
EXTERNAL_HOST La dirección IPv4 o de DNS del servidor externo.
EXTERNAL_PORT El puerto para el servidor externo. Si el servidor externo se aloja en Cloud SQL, es 3306.
USERNAME Es el nombre de la cuenta de usuario de replicación o la cuenta de usuario en el servidor externo que tiene permisos de lectura para la base de datos.
PASSWORD Contraseña del usuario de replicación.
DATABASE_LIST Lista separada por espacios de todas las bases de datos en el servidor externo, excepto las bases de datos del sistema (sys, mysql, performance_schema y information_schema). Usa el comando SHOW DATABASES de MySQL para enumerar tus bases de datos.
SOURCE_DATA Si usas una versión anterior de MySQL 8.0.26, usa --master-data como valor para este parámetro. En las versiones de MySQL 8.0.26 o superiores, establece el valor de este parámetro en --source-data.
ADD_DROP_TABLE Si deseas agregar una declaración DROP TABLE antes de cada declaración CREATE TABLE, incluye --add-drop-table.
ROUTINES Si quieres mostrar las rutinas almacenadas, como procedimientos y funciones, en el resultado de las bases de datos de volcado, incluye --routines.
COMPRESS Si deseas comprimir toda la información enviada entre la réplica de Cloud SQL y el servidor externo, usa --compress.
GZIP Si deseas comprimir aún más el archivo de volcado, usa | gzip. Si tu base de datos contiene datos que no se comprimen de forma correcta, como datos binarios no comprimibles o imágenes JPG, no lo uses.
BUCKET Es el nombre del bucket que creaste en el Paso 1 para contener el archivo de volcado.
DUMP_FILENAME Se creará un archivo con este nombre en tu bucket. Este archivo incluye el contenido de la base de datos en tu servidor externo.

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

La instancia de representación de origen es una instancia de Cloud SQL que representa al servidor de base de datos de origen para la réplica de Cloud SQL. Es visible en la consola de Google Cloud y se ve igual a una instancia normal de Cloud SQL, pero no contiene datos, no requiere configuración ni mantenimiento y no afecta 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 El nombre de la instancia de Cloud SQL asociada con la instancia de representación de origen.
REGION_NAME Es el nombre de la región que se asigna a la instancia de representación de origen.
DB_NAME_AND_VERSION Es el nombre y el número de la versión de la base de datos asociada con 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 El nombre de usuario de la instancia de representación de origen.
PASSWORD Es la contraseña de la instancia de representación de origen.
DUMP_FILE_PATH Es la ruta de acceso del archivo de volcado que incluye el contenido de la base de datos en 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 acceso del archivo del bucket 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 La ruta del archivo JSON que está almacenado en el bucket de Cloud Storage. Este archivo contiene datos sobre la instancia de representación de origen.
PROJECT_ID Es el ID de tu proyecto en Google Cloud.
SOURCE_REPRESENTATION_INSTANCE Es el nombre de la instancia de representación de origen.

Inicia la replicación en el servidor externo

Una vez que hayas verificado que puedes replicar desde el servidor externo, estás listo para realizar la replicación.

Durante el proceso de importación inicial, no realices ninguna operación DDL en el servidor externo. De lo contrario, podrían producirse inconsistencias en el archivo de exportación. Una vez que se complete 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 una terminal, accede con gcloud y, luego, ingresa 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 puedas mantener sincronizadas la réplica y el servidor externo de Cloud SQL 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 tus datos. Solo se recomienda si ya verificaste tu ajuste de replicación.
PROJECT_ID Es el ID de tu proyecto en Google Cloud.
REPLICA_INSTANCE Es el ID de tu réplica de Cloud SQL.

Limpia tu almacenamiento

Si replicaste desde un archivo en un bucket, puedes quitar el archivo y el bucket. Consulta la documentación de Cloud Storage para borrar objetos y buckets.

Continúa con la replicación

Una vez que inicies la réplica desde el servidor externo, deberás supervisar la réplica y, luego, completar la migración. Para obtener más información, consulta Supervisa la réplica.

Solucionar problemas

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

Asegúrate de que la instancia principal externa 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 para estas marcas, consulta Configura marcas de base de datos.

Si deseas obtener más información sobre el uso de marcas de mysqldump para la migración de importaciones administradas, consulta Marcas de sincronización iniciales permitidas y predeterminadas.

La migración inicial de los datos se realizó de forma correcta, pero no se están replicando los datos. Una causa raíz podría ser que la base de datos de origen haya definido marcas de replicación que den como resultado 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 manera conflictiva.

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

La migración inicial de los datos se realizó de forma correcta, pero la réplica de datos dejó de funcionar después de un tiempo. Solución:

  • Verifica las métricas de réplica para la instancia de réplica en la sección Cloud Monitoring de la consola de Google Cloud.
  • Los errores del subproceso de IO de MySQL o el de SQL se pueden encontrar en Cloud Logging en los archivos mysql.err log.
  • El error también se puede encontrar cuando te conectas a la instancia de réplica. Ejecuta el comando SHOW SLAVE STATUS y verifica 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 de réplica está lleno.

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

Revisa los registros de replicación

Cuando verificas la configuración de la replicación, se generan registros.

Puedes ver estos registros mediante los siguientes pasos:

  1. Ve al Visor de registros en la consola de Google Cloud.

    Ir al visor de registros

  2. Selecciona la réplica de Cloud SQL del 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, confirma lo siguiente:

  • Cualquier firewall en el servidor externo se configura para permitir conexiones desde la dirección IP saliente de la réplica de Cloud SQL.
  • Tu configuración de SSL/TLS es correcta.
  • Tu usuario de repetición, host y contraseña son correctos.

¿Qué sigue?