Configurar réplicas externas

En esta página, se describe cómo configurar una instancia de Cloud SQL para crear una o más réplicas externas a Cloud SQL, y cómo descender de nivel la instancia principal en la configuración de una réplica externa para revertir esa configuración.

Para obtener más información sobre la configuración de la réplica externa, consulta Información sobre la replicación externa.

Establece la configuración de la réplica externa

Antes de comenzar

Antes de comenzar con esta tarea, debes contar con una instancia de Cloud SQL y una instancia externa de MySQL que cumpla con los requisitos para réplicas externas.

Configura la instancia principal

  1. Ve a la página Instancias de Cloud SQL en la consola de Google Cloud.
  2. En la instancia principal, habilita el acceso de la dirección IP de la réplica externa.

    Si quieres obtener más información sobre cómo habilitar el acceso de IP, consulta Configura el acceso para conexiones IP públicas.

  3. Registra la dirección IP pública y la dirección IP saliente pública de la instancia principal para usarla más adelante. Puedes encontrar estos valores en la página Descripción general de la instancia.
  4. Haz clic en el ícono de Cloud Shell en la esquina superior derecha.
  5. En el mensaje de Cloud Shell, usa el cliente MySQL incorporado para conectarte a tu instancia principal:
       
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=root
       
       
  6. Ingresa tu contraseña raíz. Deberías ver el mensaje de mysql.
  7. Crea un usuario especial para la replicación y otorga privilegios de replicación:
    CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD';
    GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
       
  8. Si estás comenzando con una base de datos nueva, crea la misma base de datos y las mismas tablas en las instancias principal y de réplica. Por ejemplo:
    CREATE DATABASE test;
    
    USE test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
  9. Si ya tienes una base de datos en la instancia principal, debes crear la misma en la réplica. Para ello, exporta la base de datos de la instancia principal a un bucket de Cloud Storage y, luego, impórtala en la réplica. Obtén más información sobre la exportación de datos desde Cloud SQL a un archivo de volcado de SQL en Cloud Storage.

Configura la réplica externa

Advertencia: Con este procedimiento, se reemplazarán todos los datos alojados en la base de datos de MySQL de la réplica (incluidos los usuarios y las contraseñas) por la configuración y los datos de la instancia principal.
  1. En la máquina que aloja a la réplica, propaga tu nueva instancia externa de MySQL con el archivo de exportación que creaste desde la instancia principal.

    Por ejemplo, con el siguiente comando, se carga un archivo exportado llamado mydump.sql:

    mysql --user=root --password < mydump.sql
    
  2. Determina el ID del servidor para este par réplica-instancia principal.

    El ID del servidor es un valor numérico (por ejemplo, “3”) que debe ser único en la configuración de la réplica externa (cada réplica debe tener un ID de servidor único).

  3. Agrega las siguientes opciones al archivo de opciones my.cnf de la réplica:
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    Si quieres obtener más información sobre las opciones de replicación de MySQL, consulta la página sobre opciones para la replicación y el registro de objetos binarios.

  4. Reinicia el proceso mysqld para que se lea el archivo de configuración.
  5. En un cliente mysql en la réplica, ingresa el siguiente comando:
    CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER',
    MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
    
  6. Inicia la replicación en la réplica:
    START SLAVE;
    
  7. Confirma el estado de la replicación:

    SHOW SLAVE STATUS\G;
    

    Si ves el mensaje “En espera de que la instancia principal envíe un evento”, la replicación está en funcionamiento.

Desciende de nivel la instancia principal de una réplica externa

Cuando tienes una instancia de Cloud SQL con una réplica externa, puedes revertir la configuración, lo que genera los siguientes cambios:

  • La réplica externa pasa a ser la nueva instancia principal.
  • La instancia de Cloud SQL pasa a ser una réplica de lectura, que replicará desde el servidor que antes era la réplica externa (ahora llamado servidor de la base de datos de origen).

Para revertir la configuración de la réplica externa, sigue estos pasos:

  1. Crea una instancia de representación del origen.

    Esta instancia representará al servidor de la base de datos de origen para la réplica de Cloud SQL luego de que se complete la operación de descenso de nivel.

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "name": "SOURCE_REPRESENTATION_NAME",
             "region": "REGION",
             "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION",
             "onPremisesConfiguration": {
                 "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT"
             }
         }' \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
    

    Usa la región en la que quieres que resida tu réplica de Cloud SQL.

  2. Inicia el proceso de descenso de nivel.

    Debido a que esta llamada a la API requiere que brindes información sensible, usa un archivo JSON para proporcionar tus datos a cURL, en lugar de ingresarlos en la línea de comandos.

    Crea el archivo de datos:

    {
        "demoteMasterContext": {
            "replicaConfiguration": {
                "mysqlReplicaConfiguration": {
                    "username": "REPLICATION_USERNAME",
                    "password": "PASSWORD",
                    "caCertificate": "EXTERNAL_SERVER_CA",
                    "clientCertificate": "CLIENT_CERT",
                    "clientKey": "PRIVATE_KEY"
                }
            },
            "masterInstanceName": "SOURCE_REPRESENTATION_NAME",
        },
    }
    

    Luego, haz una llamada a la API.

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @PATH_TO_DATA_FILE \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
    

    Para obtener más información sobre las opciones de SSL/TLS, consulta las opciones de SSL/TLS. Para obtener más información sobre las propiedades que usó el objeto replicaConfiguration, consulta cómo replicar desde un servidor externo.

  3. Espera a que la réplica externa complete todas las transacciones pendientes desde la instancia principal.

    Cuando la réplica haya finalizado, el comando SHOW SLAVE STATUS mostrará 0 en Seconds Behind Master y el valor de Executed_Gtid_Set será idéntico entre la réplica externa y la instancia principal de Cloud SQL.

  4. Usa el cliente mysql para detener la replicación en la réplica externa:

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Espera a que la instancia de Cloud SQL comience a replicar desde el servidor externo, que ahora es el servidor de la base de datos de origen.

    Ejecutar el comando SHOW SLAVE STATUS en la instancia de Cloud SQL brinda el estado de la replicación.

  6. Cuando la instancia de Cloud SQL replique de manera exitosa desde el servidor de la base de datos de origen, configura la marca read_only del servidor de la base de datos de origen como off y actualiza tus aplicaciones para que apunten al servidor de la base de datos de origen.

Solucionar problemas

Problema Soluciona problemas
Mensaje de error: The slave is connecting ... master has purged binary logs containing GTIDs that the slave requires. La instancia principal de Cloud SQL tiene copias de seguridad automáticas y registros binarios, y está habilitada la recuperación de un momento determinado, por lo que debería tener suficientes registros para que la réplica pueda ponerse al día. Sin embargo, en este caso, a pesar de que existen los registros binarios, la réplica no sabe desde qué fila debe comenzar a leer.

Crea un nuevo archivo de volcado con la configuración correcta de la marca y configura la réplica externa con ese archivo

  1. Conéctate a tu cliente MySQL a través de una instancia de Compute Engine.
  2. Ejecuta mysqldump y usa las marcas --master-data=1 y --flush-privileges.

    Importante: No incluyas la marca --set-gtid-purged=OFF.

    Obtén más información

  3. Asegúrate de que el archivo de volcado que se creó contenga la línea SET @@GLOBAL.GTID_PURGED='...'.
  4. Sube el archivo de volcado a un bucket de Cloud Storage y configura la réplica con el archivo de volcado.

¿Qué sigue?