Replica desde un servidor externo a Cloud SQL (v1.1)

En esta página, se describe cómo replicar datos desde un servidor externo hasta una réplica de Cloud SQL. Puedes replicar datos mediante un volcado administrado o subirlos desde un archivo de volcado. Te mostraremos cómo realizar ambas operaciones con un servidor externo al que puedes conectarte a través de su dirección IP o de DNS.

Una alternativa a los procedimientos que se describen en esta página es usar Database Migration Service, que ofrece replicación continua o migración de una base de datos única desde un servidor de base de datos de origen a Cloud SQL.

Antes de comenzar

Terminología

  • Servidor de la base de datos de origen. Es el servidor MySQL que administras. También se conoce como el principal externo, el servidor externo, el servidor de la base de datos de origen o el servidor de la base de datos externo. Si usas Amazon Relational Database Service (RDS), este contiene tu servidor de la base de datos de origen.

  • Instancia de representación de origen. Es una instancia de Cloud SQL que representa al servidor de la base de datos de origen para la réplica de Cloud SQL. Es visible en Google Cloud Console 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. Contiene la configuración del servidor de la base de datos de origen.

  • Réplica de Cloud SQL. Es la instancia de Cloud SQL que se replica desde el servidor de la base de datos de origen. También se conoce como la réplica de lectura principal externa.

  • Cuenta de usuario de replicación. Es la cuenta de usuario de MySQL en el servidor de la base de datos de origen con permisos suficientes para permitir la replicación entre el servidor de la base de datos de origen y el servidor de Google Cloud.

  • Volcado administrado. Es el proceso de copiar datos directamente desde el servidor de la base de datos de origen hasta la réplica de Cloud SQL. En esta situación, Cloud SQL se conecta al servidor de la base de datos de origen mediante la cuenta de usuario de replicación y ejecuta mysqldump directamente en el servidor de la base de datos de origen para importar datos a la réplica de Cloud SQL.

Lista de tareas del servidor de la base de datos de origen

Todos

  • Asegúrate de tener MySQL 5.5, 5.6, 5.7 o 8.0 instalado en el servidor de la base de datos de origen. Se admiten MySQL Community Edition, MySQL de Cloud SQL y MySQL en Amazon RDS.

    • Si MySQL 8.0 está instalado en el servidor de la base de datos de origen, puedes usar MySQL de Cloud SQL 8.0 con tu réplica de Cloud SQL.
    • Si MySQL 5.5 está instalado en el servidor de la base de datos de origen, GTID no es compatible.
  • Asegúrate de que los registros binarios estén habilitados y de que suceda lo siguiente:

  • Observa si tu servidor de la base de datos de origen tiene GTID habilitado. Esto afectará los pasos que debes seguir para configurar la replicación.

  • Observa si tu servidor de la base de datos de origen tiene permisos globales de bloqueo de operaciones de lectura. Esto afectará los pasos que debes seguir para configurar la replicación.

  • Si la réplica de Cloud SQL usará una IP privada, el firewall del servidor de base de datos fuente debe configurarse para permitir todo el rango de IP interna asignado para la conexión privada a servicios de la red de VPC que usará la réplica de Cloud SQL como el campo privateNetwork de su configuración ipConfiguration.

    • Para encontrar el rango de IP interna en la consola, sigue estos pasos:
    • Ve a la página Redes de VPC en Google Cloud Console.
    • Selecciona la red de VPC que deseas usar.
    • Selecciona la pestaña Conexión privada a servicios.
  • Si tu base de datos fuente contiene cláusulas DEFINER (vistas, eventos, activadores o procedimientos almacenados), según el orden en que se ejecuten estas declaraciones, la replicación podría fallar. Obtén más información sobre el uso de DEFINER y las posibles soluciones alternativas en Cloud SQL.

Amazon RDS

  • Asegúrate de que MySQL para Amazon RDS esté instalado en el servidor de la base de datos de origen.

  • Ten en cuenta que un servidor de la base de datos de origen que usa Amazon RDS no admite GTID en la mayoría de las situaciones, pero sí admite GTID para MySQL 5.7.

  • Ten en cuenta que un servidor de la base de datos de origen que usa Amazon RDS no admite permisos globales de bloqueo de operaciones de lectura.

Configura la replicación

Puedes iniciar la replicación desde un archivo de Cloud Storage o desde un volcado administrado.

Cuando estableces la configuración de la replicación, también puedes decidir si la réplica de Cloud SQL debe permanecer sincronizada con el servidor de base de datos de origen después de que se complete la importación inicial. Una réplica que debe permanecer sincronizada está en línea. Una réplica que solo se actualiza una vez está sin conexión.

Archivo + En línea

Para configurar este tipo de replicación, tu servidor de la base de datos de origen debe tener al menos uno de los siguientes permisos: GTID habilitado o permisos globales de bloqueo operaciones de lectura.

  1. Configura un proyecto en Google Cloud.
  2. Instala el SDK de Google Cloud para el servidor de la base de datos de origen.
  3. Crea el usuario de replicación en el servidor de la base de datos de origen.
  4. Exporta datos desde un servidor de la base de datos de origen a un bucket de Google Cloud.
  5. Configura la instancia de representación de origen.
  6. Configura la réplica de Cloud SQL.
  7. Confirma que las instancias se agregaron de forma correcta a Cloud SQL.
  8. Agrega usuarios a la réplica de Cloud SQL.
  9. Actualiza los permisos del usuario de replicación en el servidor de la base de datos de origen.
  10. Permite conexiones entrantes en el servidor de la base de datos de origen.
  11. Verifica la configuración de la replicación.
  12. Revisa los registros de replicación (opcional).
  13. Replica tus datos.
  14. Confirma el estado de replicación.
  15. Limpia tu almacenamiento.

Volcado administrado + En línea

  1. Configura un proyecto en Google Cloud.
  2. Instala el SDK de Google Cloud para el servidor de la base de datos de origen.
  3. Crea el usuario de replicación en el servidor de la base de datos de origen.
  4. Configura la instancia de representación de origen.
  5. Configura la réplica de Cloud SQL.
  6. Confirma que las instancias se agregaron de forma correcta a Cloud SQL.
  7. Agrega usuarios a la réplica de Cloud SQL.
  8. Actualiza los permisos del usuario de replicación en el servidor de la base de datos de origen.
  9. Permite conexiones entrantes en el servidor de la base de datos de origen.
  10. Verifica la configuración de la replicación.
  11. Revisa los registros de replicación (opcional).
  12. Replica tus datos.
  13. Confirma el estado de replicación.

Archivo + Sin conexión

  1. Configura un proyecto en Google Cloud.
  2. Instala el SDK de Google Cloud para el servidor de la base de datos de origen.
  3. Crea el usuario de replicación en el servidor de la base de datos de origen.
  4. Exporta datos desde un servidor de la base de datos de origen a un bucket de Google Cloud.
  5. Configura la instancia de representación de origen.
  6. Configura la réplica de Cloud SQL.
  7. Confirma que las instancias se agregaron de forma correcta a Cloud SQL.
  8. Agrega usuarios a la réplica de Cloud SQL.
  9. Actualiza los permisos del usuario de replicación en el servidor de la base de datos de origen.
  10. Permite conexiones entrantes en el servidor de la base de datos de origen.
  11. Replica tus datos.
  12. Confirma el estado de replicación.
  13. Limpia tu almacenamiento.

Volcado administrado + Sin conexión

  1. Configura un proyecto en Google Cloud.
  2. Instala el SDK de Google Cloud para el servidor de la base de datos de origen.
  3. Crea el usuario de replicación en el servidor de la base de datos de origen.
  4. Configura la instancia de representación de origen.
  5. Configura la réplica de Cloud SQL.
  6. Confirma que las instancias se agregaron de forma correcta a Cloud SQL.
  7. Agrega usuarios a la réplica de Cloud SQL.
  8. Actualiza los permisos del usuario de replicación en el servidor de la base de datos de origen.
  9. Permite conexiones entrantes en el servidor de la base de datos de origen.
  10. Verifica la configuración de la replicación.
  11. Revisa los registros de replicación (opcional).
  12. Replica tus datos.

Procedimientos de configuración

En función de tus elecciones de replicación, sigue los pasos relevantes a continuación.

Configura un proyecto de Google Cloud

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita la API Cloud SQL Admin.

    Habilita la API

  5. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  7. Habilita la API Cloud SQL Admin.

    Habilita la API

  8. Asegúrate de tener las funciones de administrador de Cloud SQL, administrador de almacenamiento y visualizador de Compute en tu cuenta de usuario.

    Ir a la página IAM

  9. Habilita la API Cloud SQL Admin.

    Habilita la API

Instala el SDK de Google Cloud

Si quieres configurar la replicación, instala el SDK de Google Cloud para tu servidor de la base de datos de origen. Se recomienda que lo instales en tu servidor de la base de datos de origen si no está instalado en otro lugar.

Crea una cuenta de usuario de replicación

Debe haber una cuenta de usuario MySQL con el privilegio REPLICATION_SLAVE en tu servidor de la base de datos de origen. Esta cuenta de usuario solo debe usarse para administrar la replicación. Para agregar una cuenta de usuario de replicación, abre una terminal en el servidor de la base de datos de origen e ingresa estos comandos de MySQL:

MySQL

// Online migration with Cloud Storage file:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Online migration with managed dump and GTID enabled:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Online migration with managed dump and GTID disabled:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

// Offline migration with managed dump:
CREATE USER '[USERNAME]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT SELECT, SHOW VIEW ON *.* TO '[USERNAME]'@'[HOST]';
FLUSH PRIVILEGES;

Ejemplo

CREATE USER 'bluewing'@'%' IDENTIFIED BY '8*&fwwd';
GRANT REPLICATION SLAVE ON *.* TO 'bluewing'@'%';
FLUSH PRIVILEGES;
Propiedad Valor
[USERNAME] Es la cuenta de usuario de replicación de MySQL en el servidor de la base de datos de origen.
[PASSWORD] Es la contraseña de la cuenta de usuario de replicación.
[HOST] Configúralo como % para aceptar todas las conexiones desde cualquier host. En un paso posterior, se cambiará para que solo acepte conexiones de la réplica de Cloud SQL.

Exporta datos a un bucket de Google Cloud

Puedes propagar una réplica de Cloud SQL con datos desde un bucket de Google Cloud. Se aplican las siguientes condiciones:

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

Para subir los datos a un bucket, sigue estos pasos:

  1. En Google Cloud, crea un bucket.
  2. Abre una terminal en tu servidor de la base de datos de origen y ejecuta el siguiente comando.

mysqldump

mysqldump \
    --host=[SOURCE_HOST] \
    --port=[SOURCE_PORT] \
    --user=[USERNAME]\
    --password \
    [DATABASE_LIST]  \
    --hex-blob \
    [SOURCE_DATA]  \
    --no-autocommit \
    --default-character-set=utf8mb4 \
    --single-transaction \
    [GTID_PURGED] \
    [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/source-database.sql.gz
Propiedad Valor
[SOURCE_HOST] Es la dirección IPv4 o de DNS para el servidor de la base de datos de origen.
[SOURCE_PORT] Es el puerto para el servidor de la base de datos de origen. Si el servidor de la base de datos de origen está alojado 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 de la base de datos de origen que tiene permisos de lectura para la base de datos.
[DATABASE_LIST] Lista separada por espacios de todas las bases de datos en el servidor de bases de datos fuente, 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 el servidor de la base de datos de origen no admite GTID y tienes permiso para acceder al bloqueo global de operaciones de lectura en él, usa --master-data=1. De lo contrario, no uses esta propiedad.
[GTID_PURGED] Si tu servidor de la base de datos de origen admite GTID, usa --set-gtid-purged=on. De lo contrario, no uses esta propiedad.
[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 de la base de datos de origen, 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 que contendrá el archivo de volcado.
[DUMP_FILENAME] Se creará un archivo con este nombre en tu bucket. Este archivo incluirá el contenido de la base de datos en tu servidor de la base de datos de origen.

Configura una instancia de representación de origen

La instancia de representación de origen hace referencia al servidor de la base de datos de origen. Solo contiene los datos de solicitud del servidor de la base de datos de origen. En este paso, crearás los datos de la solicitud y los usarás en un comando cURL que crea la instancia de representación de origen en Cloud SQL.

Crea los datos de la solicitud

Los datos de la solicitud contienen información básica sobre tu servidor de la base de datos de origen en formato JSON. Los datos de la solicitud se pueden configurar para una réplica de Cloud SQL en una red pública o privada y deben contener la siguiente información:

source.json

{
  "name": "[SOURCE_NAME]",
  "region": "[REGION]",
  "databaseVersion": "[MYSQL_VERSION]",
  "onPremisesConfiguration": {
    "hostPort": "[SOURCE_HOST]",
    "username": "[USERNAME]",
    "password": "[PASSWORD]",
    "dumpFilePath": "gs://[BUCKET]/[DUMP_FILE]",
    "caCertificate": "[SOURCE_CERT]",
    "clientCertificate": "[CLIENT_CERT]",
    "clientKey": "[CLIENT_KEY]"
  }
}

Ejemplo de volcado administrado

// example of source.json for source database server that
// - initiates replication from a Cloud SQL managed dump
// - does not use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}

Ejemplo de archivo de volcado

// example of source.json for source database server that
// - initiates replication from a file
// - uses SSL/TSL

{
  "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",
    "caCertificate": "content of your certificate",
    "clientCertificate": "content of your certificate",
    "clientKey": "content of your client key"
  }
}
Campos opcionales Notas
dumpFilePath Solo debes incluirlo, si configuras la replicación con un archivo de volcado que existe en un bucket de Cloud SQL.
caCertificate Solo debes incluirlo, si usas SSL/TLS en el servidor de la base de datos de origen.
clientCertificate Solo debes incluirlo, si usas SSL/TLS en el servidor de la base de datos de origen.
clientKey Solo debes incluirlo, si usas SSL/TLS en el servidor de la base de datos de origen.
Propiedad Valor
[SOURCE_NAME] Es el nombre de la instancia de representación de origen que se creará.
[REGION] Es la región en la que quieres que resida la instancia de representación de origen.
[MYSQL_VERSION] Es la versión de MySQL que se ejecuta en el servidor de la base de datos de origen. Las opciones son MYSQL_5_5, MYSQL_5_6, MYSQL_5_7 o MYSQL_8_0.
[SOURCE HOST] Es la dirección IPv4 y el puerto del servidor de la base de datos de origen, o la dirección de DNS para el servidor de base de datos de origen. Si usas una dirección de DNS, puede contener hasta 60 caracteres. Si el servidor de la base de datos de origen está alojado en Cloud SQL, el puerto es 3306.
[USERNAME] Es la cuenta de usuario de replicación de MySQL en el servidor de la base de datos de origen.
[PASSWORD] Es la contraseña de la cuenta de usuario de replicación.
[BUCKET] Es el nombre del bucket que contiene el archivo de volcado.
[DUMP_FILE] Es un archivo en el bucket que contiene los datos del servidor de la base de datos de origen.
[CLIENT_CA_CERT] Es el certificado de CA en el servidor de origen.
[CLIENT_CERT] Es el certificado de cliente en el servidor de origen. Solo es obligatorio para la autenticación del servidor y del cliente.
[CLIENT_KEY] Es el archivo de claves privadas para el certificado de cliente en el servidor de la base de datos de origen. Solo es obligatorio para la autenticación del servidor y del cliente.

Crea una instancia de representación de origen

Antes de completar este paso, debes crear un archivo JSON que contenga los datos de tu solicitud de origen. Luego, abre una terminal y usa estos comandos para crear la instancia de representación de origen en Cloud SQL:

cURL

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
Propiedad Valor
[PROJECT_ID] Es el ID de tu proyecto en Google Cloud.
[JSON_PATH] Es la ruta al archivo JSON que contiene los datos de solicitud del servidor de la base de datos de origen.

Configura una réplica de Cloud SQL

Con el tiempo, la réplica de Cloud SQL contendrá los datos del servidor de la base de datos de origen. En este paso, crearás los datos de solicitud y los usarás en un comando cURL que crea la réplica de Cloud SQL en Cloud SQL.

Crea los datos de la solicitud

Los datos de la solicitud contienen información básica sobre tu servidor de la base de datos de origen y la réplica de Cloud SQL en formato JSON. Los datos de la solicitud se pueden configurar para una réplica de Cloud SQL en una red pública o privada y deben contener la siguiente información:

replica.json

{
    "settings": {
        "tier": "[TIER]",
        "dataDiskSizeGb": "[DISK_SIZE]",
        "ipConfiguration": {
            "privateNetwork": "projects/[PROJECT_ID]/global/networks/[NETWORK_NAME]"
         }
    },
    "masterInstanceName": "[SOURCE_NAME]",
    "region": "[SOURCE_REGION]",
    "databaseVersion": "[MYSQL_VERSION]",
    "name": "[REPLICA_NAME]"
}

Ejemplo

{
    "settings": {
        "tier": "db-custom-4-15360",
        "dataDiskSizeGb": "100"
    },
    "masterInstanceName": "source-instance",
    "region": "us-central1",
    "databaseVersion": "MYSQL_5_7",
    "name": "replica-instance"
}
Campos opcionales Notas
ipConfiguration Solo incluye esto si la réplica de Cloud SQL se encuentra en una red privada.
Propiedad Valor
[TIER] Es el tipo de máquina para alojar tu instancia de réplica. Si no sabes qué tipo de máquina usar, comienza con db-custom-2-7680. Puedes cambiar su tamaño y otros valores admitidos más adelante si es necesario.
[DISK_SIZE] Es el tamaño de almacenamiento de la réplica de Cloud SQL, en GB.
[SOURCE_NAME] Es el nombre de la instancia de representación de origen.
[SOURCE_REGION] Es la región asignada a la instancia de representación de origen.
[MYSQL_VERSION] Es la versión de MySQL que se usará con la réplica de Cloud SQL. Las opciones son MYSQL_5_6, MYSQL_5_7, MYSQL_8_0. Puede coincidir con la versión de MySQL que se ejecuta en el servidor de la base de datos de origen o puede ser, como máximo, una versión posterior. Por ejemplo, si usas MySQL 5.5 en tu servidor de la base de datos de origen, puedes usar MySQL 5.6 con la réplica de Cloud SQL.
[REPLICA_NAME] Es el nombre de la réplica de Cloud SQL que se creará.
[PROJECT_ID] Es el ID de tu proyecto en Google Cloud.
[NETWORK_NAME] Es el nombre de la red privada que se usará con la réplica de Cloud SQL.

Crea la réplica de Cloud SQL

Antes de completar este paso, debes crear un archivo JSON que contenga los datos de tu solicitud de réplica. Luego, abre una terminal y usa estos comandos para crear una réplica de Cloud SQL en Cloud SQL:

cURL

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 POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances

Ejemplo

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./replica.json \
     -X POST \
Propiedad Valor
[PROJECT_ID] Es el ID de tu proyecto en Google Cloud.
[JSON_PATH] Es la ruta al archivo JSON que contiene los datos de la solicitud de réplica de Cloud SQL.

Qué deberías ver cuando termines

Para asegurarte de que las instancias se configuraron de forma correcta, ve a la página Instancias de Cloud SQL. Deberías ver tu instancia de representación de origen y la réplica de Cloud SQL. Se verán similares a lo siguiente:

ID de instancia Tipo IP pública
(-) source-representation-instance Primaria externa de MySQL 10.68.48.3:3306
replica-instance Réplica de lectura de MySQL 34.66.48.59

Actualiza los permisos del usuario de replicación

El usuario de replicación del servidor de la base de datos de origen 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 de la base de datos de origen e ingresa los siguientes comandos:

MySQL

UPDATE mysql.user
  SET Host='[NEW_HOST]' WHERE Host='[OLD_HOST]' AND User='[USERNAME]';
FLUSH PRIVILEGES;

Ejemplo

UPDATE mysql.user
  SET Host='192.0.2.0' WHERE Host='%' AND User='replicationUser';
FLUSH PRIVILEGES;
Propiedad Valor
[USERNAME] Es la cuenta de usuario de replicación de MySQL en el servidor de la base de datos de origen.
[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.

Permite conexiones entrantes en el servidor de la base de datos de origen

La réplica de Cloud SQL debe conectarse al servidor de la base de datos de origen para que la replicación sea exitosa. Debes configurar el firewall de la red para que el servidor de la base de datos de origen acepte conexiones desde la dirección IP saliente de la réplica de Cloud SQL si se cumplen todas las condiciones que figuran a continuación:

  • El servidor de la base de datos de origen está detrás de un firewall o alguna otra restricción de red.
  • Tu réplica de Cloud SQL usa una IP pública.

Para obtener instrucciones, consulta Agrega una dirección o un rango de direcciones autorizados. Para conectarte a la réplica de Cloud SQL, usa la dirección IP principal de la réplica. Esta dirección IP se muestra en Cloud Console.

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 de la base de datos de origen.

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 de la base de datos de origen
  • Privilegios del usuario de replicación
  • Compatibilidad de versiones

Si realizas una sincronización en línea, los siguientes comandos también servirán para verificar estos aspectos:

  • La réplica de Cloud SQL aún no se replica.
  • Los registros binarios están habilitados en el servidor de la base de datos de origen.
  • GTID se habilita si intentas realizar una sincronización externa desde un servidor de la base de datos de origen de RDS y usas un bucket de Google Cloud.

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",
         "skipVerification": false
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
Propiedad Valor
[SYNC_MODE] Puede ser online o offline. Si se usa online, verifyExternalSyncSettings verifica que puedas mantener la réplica de Cloud SQL y el servidor de la base de datos de origen sincronizados después de que se configura 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.

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 Google Cloud Console.

    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 de la base de datos de origen, confirma lo siguiente:

    • Cualquier firewall en el servidor de la base de datos de origen se configura para permitir conexiones desde la dirección IP saliente de la réplica de Cloud SQL.
    • Tienes la configuración de SSL/TLS correcta.
    • El usuario de replicación, el host y la contraseña son correctos.

Replica el servidor de la base de datos de origen

Una vez que hayas verificado que puedes replicar desde el servidor de la base de datos de origen, estás listo para realizar la replicación. La réplica importará alrededor entre 25 y 50 GB por hora.

Durante el proceso de importación inicial, no realices ninguna operación DDL en el servidor de la base de datos de origen. 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 usará los registros binarios del servidor de la base de datos de origen para ponerse al día con el estado actual del servidor.

Si no tienes permiso para acceder al bloqueo global de las operaciones de lectura en el servidor de la base de datos de origen y el GTID está desactivado, como puede ser con Amazon RDS, consulta Pasos con registros; de lo contrario, consulta Pasos.

Pasos

Abre una terminal e ingresa los siguientes comandos para replicar desde el servidor de la base de datos de origen.

Pasos con registros

  1. Ve al Visor de registros y selecciona tu réplica de Cloud SQL de la lista de recursos. Deberías ver una lista de los registros más recientes para tu réplica de Cloud SQL. Omítelos por el momento.
  2. Abre una terminal e ingresa los siguientes comandos para replicar desde el servidor de la base de datos de origen.
  3. Regresa al Visor de registros. Cuando veas el siguiente registro, deja de escribir en la base de datos del servidor de la base de datos de origen. En la mayoría de los casos, esto solo es necesario durante unos segundos.

    DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.
    
  4. Cuando veas el siguiente registro en el Visor de registros, vuelve a habilitar la escritura en la base de datos del servidor de la base de datos de origen.

    DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
    

Los siguientes son los comandos para replicar desde el servidor de la base de datos de origen:

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]/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 Valor
[SYNC_MODE] Puede ser online o offline. Si es online, los cambios futuros en el servidor de la base de datos de origen se reflejarán en la réplica de Cloud SQL. Si es offline, los cambios futuros no se reflejarán en la réplica de Cloud SQL.
[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.

Confirma el estado de la replicación

Cuando la réplica de Cloud SQL finaliza la replicación, se conecta al servidor de la base de datos de origen y aplica todas las actualizaciones que se realizaron después de que se tomó la exportación. Sigue estos pasos para confirmar el estado de la replicación.

Es importante verificar el estado de replicación antes de ascender la réplica a una instancia independiente. Si el proceso de replicación no está completo ni se ejecutó de forma correcta, una réplica ascendida no tendrá todos los cambios de la instancia de representación de origen.

Si el retraso de replicación no se muestra igual o cercano a 0, toma medidas para solucionarlo.

Si el GTID está desactivado, la recuperación de un momento determinado (PITR) y los registros binarios se inhabilitan en la réplica promocionada. Para habilitar GTID, habilita PITR. Esta acción requiere reiniciar la instancia.

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.

Procedimientos complementarios

Estos procedimientos pueden ser útiles para configurar la replicación.

Configura la retención de registros binarios

Debes configurar el servidor de la base de datos de origen para que retenga registros binarios por al menos 24 horas.

Comunidad de MySQL

Si el servidor de la base de datos de origen usa MySQL Community Edition, puedes usar estos comandos de MySQL para actualizar la configuración de retención de registros binarios.

MySQL de Cloud

Si el servidor de la base de datos de origen usa MySQL de Cloud SQL, los registros binarios se conservan durante siete días. No se puede modificar esta configuración.

Amazon RDS

Si el servidor de la base de datos de origen es una instancia de Amazon RDS, puedes usar este comando para actualizar la configuración de retención de registros binarios:

call mysql.rds_set_configuration('binlog retention hours', 24);

Agrega usuarios a la réplica de Cloud SQL

Las cuentas de usuario de MySQL no se pueden importar desde el servidor de la base de datos de origen, pero puedes crearlas en una réplica de Cloud SQL. Haz esto antes de replicar desde el servidor de la base de datos de origen.

Obtén la dirección IP saliente de la réplica de Cloud SQL

Puedes usar la dirección IP saliente de la réplica de Cloud SQL para crear una conexión segura entre el servidor de la base de datos de origen y la réplica de Cloud SQL. Hay varias formas de obtener esta dirección IP saliente:

gcloud

gcloud sql instances describe [REPLICA_NAME] --format="default(ipAddresses)"

Cloud SQL

  1. Abre la página Instancias de Cloud SQL.
  2. Junto a la dirección IP pública de la réplica de Cloud SQL, desplázate sobre la sugerencia de herramientas Más información y recupera la dirección IP saliente. Ten en cuenta que la dirección IP saliente no es la dirección IP que se muestra en la lista principal de la réplica en Cloud Console.

Actualiza la representación de origen o la réplica de Cloud SQL

Después de configurar una representación de origen o una réplica de Cloud SQL, puedes actualizarla con estas opciones de configuración. Por ejemplo, estas situaciones hacen que debas actualizar tus opciones de configuración:

  • El host, el puerto o la IP del servidor de la base de datos de origen cambia.
  • Deseas usar un usuario de replicación de MySQL diferente.
  • Cambia la contraseña del usuario de replicación de MySQL.
  • Cambian los certificados SSL que usaste para conectarte de forma segura al servidor de la base de datos de origen.

Soluciona problemas

Haz clic en los vínculos de la tabla para obtener más información:

Situación Posible problema Solución
Specified key was too long; max key length is 767 bytes. La instancia principal externa puede tener la variable innodb_large_prefix configurada. Establece la marca innodb_large_prefix en ON cuando crees la réplica o actualiza la réplica existente con la marca.
Table definition has changed. Hubo cambios en el lenguaje de definición de datos (DDL) durante el proceso de volcado. Evita los cambios de DDL durante el proceso de volcado.
Mensaje de error: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. Puede haber una vista, una función o un procedimiento en la base de datos fuente que haga referencia a DEFINER de una manera que no sea compatible con Cloud SQL. Consulta más información sobre el uso de DEFINER en Cloud SQL.
Mensaje de error: ERROR 1045 (28000) at line {line_number}: Access denied for user 'cloudsqlimport'@'localhost Hay un DEFINER en la base de datos de origen que no existe en la réplica. Consulta más información sobre el uso de DEFINER en Cloud SQL.
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 conectarte o usa mysqldump con la opción max_allowed_packet.
Got packet bigger than 'max_allowed_packet' bytes when dumping table. El paquete fue más grande de lo que permitía la configuración. Usa mysqldump con la opción max_allowed_packet.
La migración inicial de los datos se realizó de forma correcta, pero no se están replicando los datos. Es posible que haya marcas de replicación en conflicto. Consulta estas opciones de configuración de marcas.
La migración inicial de los datos se realizó de forma correcta, pero la replicación de datos dejó de funcionar después de un tiempo. Puede haber muchas causas. Prueba estas sugerencias.
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.

La clave especificada era demasiado larga; la longitud máxima es de 767 bytes

Verás el error Specified key was too long; max key length is 767 bytes..

Posible problema

La instancia principal externa puede tener la variable innodb_large_prefix configurada. Esto permite que los prefijos de clave de índice sean más largos que 767 bytes. El valor predeterminado es OFF para MySQL 5.6.

Solución

Establece la marca innodb_large_prefix en ON cuando crees la réplica o actualiza la réplica existente con la marca.


La definición de la tabla cambió

Verás el error Table definition has changed.

Posible problema

Hubo cambios de DDL durante el proceso de volcado.

Solución

No modifiques las tablas ni realices ningún otro cambio de DDL durante el proceso de volcado.


Se denegó el acceso porque necesitas privilegios SUPER para esta operación (al menos uno)

Verás el error Access denied; you need (at least one of) the SUPER privilege(s) for this operation.

Posible problema

La causa raíz podría ser que el cliente tiene VIEW/FUNCTION/PROCEDURE con DEFINER mediante user@localhost super (como root@localhost). Esto no es compatible con Cloud SQL.

Solución

La solución alternativa es actualizar el definidor en las bases de datos externas, por ejemplo, de root@localhost a root@% o un usuario que no sea superusuario. Consulta Stored Object Access Control (Control de acceso a objetos almacenados) para obtener más información.


ERROR 1045 (28000) en la línea xxx: Se denegó el acceso para el usuario “cloudsqlimport”@“localhost

Verás el error ERROR 1045 (28000) at line xxx: Access denied for user 'cloudsqlimport'@'localhost.

Posible problema

Un usuario de la base de datos de origen con la cláusula DEFINER no existe en la base de datos de la réplica, y ese usuario hace referencia cruzada en las definiciones del objeto en la base de datos de origen.

Solución

Los usuarios no se migran con los datos. Crea los usuarios de la base de datos de origen en la réplica de la base de datos antes de iniciar la replicación.


Se perdió la conexión con el servidor MySQL durante la consulta mientras se realizaba el volcado de la tabla

Verás el error Lost connection to MySQL server during query when dumping table.

Posible problema

  • Es posible que la fuente no esté disponible para conectarse desde la réplica.

  • La base de datos de origen puede tener tablas con BLOB grandes o strings largas que requieren que se configure max_allowed_packet en un número mayor en la base de datos de origen.

Solución

  • Reinicia y asegúrate de que la instancia principal externa esté disponible para conectarse.

  • Usa mysqldump con la opción max_allowed_packet para volcar los datos y migrar con el archivo de volcado.


Se obtuvo un paquete mayor que los bytes de “max_allowed_packet” durante el volcado de la tabla

Verás el error Got packet bigger than 'max_allowed_packet' bytes when dumping table.

Posible problema

El paquete fue más grande de lo que permitía la configuración.

Solución

Usa mysqldump con la opción max_allowed_packet para volcar los datos y migrar con el archivo de volcado.


No se está replicando ningún dato

La migración inicial de los datos se realizó de forma correcta, pero no se están replicando los datos.

Posible problema

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.

Solución

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 replicación de datos dejó de funcionar después de un tiempo

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

Posible problema

Este problema puede tener muchas causas raíz.

Solución

  • Verifica las métricas de replicación para la instancia de réplica en la IU de Cloud Monitoring.

  • Los errores del subproceso de MySQL IO o el subproceso de SQL se pueden encontrar en los archivos de registro de mysql.err en Cloud Logging.

  • El error también se puede encontrar cuando te conectas a la instancia de réplica. Ejecuta el comando SHOW SLAVE STATUS y verifica estos campos en el resultado:

    • Slave_IO_Running
    • Slave_SQL_Running
    • Last_IO_Error
    • Last_SQL_Error

Error de comprobación de mysqld: el disco de datos está lleno

Verás el error mysqld check failed: data disk is full.

Posible problema

Si ves este error durante una operación de DRAIN, el disco de datos de la instancia de réplica está lleno.

Solución

Aumenta el tamaño del disco de la instancia de réplica.

¿Qué sigue?