Crea réplicas de lectura

En esta página, se describe cómo crear una réplica de lectura de una instancia de Cloud SQL.

Una réplica de lectura es una copia de la instancia principal que refleja los cambios de esta última casi en tiempo real, en circunstancias normales. Puedes usar una réplica de lectura para derivar las solicitudes de lectura o el tráfico de estadísticas de la instancia principal.

Además, para la recuperación ante desastres, puedes realizar una migración regional. Si una réplica es una réplica entre regiones, puedes realizar una conmutación por error a otra región. En particular, puedes ascender una réplica a una instancia independiente (en cuyo caso, las réplicas existentes no considerarán a esa instancia como principal).

Para obtener más información sobre cómo funciona la replicación, consulta Replicación en Cloud SQL.

Antes de comenzar

Si la réplica que crearás será la primera de esta instancia, asegúrate de que la instancia cumpla los requisitos de las instancias principales. Más información

Crea una réplica de lectura

Los pasos para crear una réplica de lectura son los que se describen a continuación.

Console

  1. En Google Cloud Console, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Busca la instancia que deseas replicar y abre su menú more actions en el extremo derecho de la lista.
  3. Selecciona Crear réplica de lectura.

    Si no ves esa opción, eso significa que la instancia es una réplica, y no puedes replicar una réplica.

  4. Si la instancia tiene habilitadas las copias de seguridad y los registros binarios, continúa con el paso 6. De lo contrario, selecciona Copias de seguridad automáticas y Enable binary logging. Luego, haz clic en Continuar y en Guardar y reiniciar para reiniciar la instancia.

    Cuando se habilita el registro binario, la instancia se reinicia.

  5. En la página Crea réplicas de lectura, actualiza el ID de la instancia, si es necesario, y cualquier otra opción de configuración requerida, incluidos el nombre, la región y la zona.
  6. Haz clic en Crear.

    Cloud SQL crea una copia de seguridad si es necesario, y crea la réplica. Volverás a la página de la instancia principal.

gcloud

  1. Verifica el estado de la instancia principal:
    gcloud sql instances describe PRIMARY_INSTANCE_NAME
          

    Si la propiedad databaseReplicationEnabled es true, la instancia es una réplica; por lo tanto, no puedes crear una réplica de otra.

  2. Si la propiedad enabled en backupConfiguration es false, habilita las copias de seguridad para la instancia principal:
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --backup-start-time=>HH:MM
          
    El parámetro backup-start-time se establece en el formato de 24 horas, en la zona horaria UTC±00, y especifica el inicio de un período de copia de seguridad de 4 horas. Las copias de seguridad pueden iniciarse en cualquier momento durante el período de copia de seguridad.
  3. Si la propiedad binaryLogEnabled es false, habilita los registros binarios en la instancia principal:
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --enable-bin-log
    
    La instancia se reinicia cuando se habilitan los registros binarios.
  4. Crea la réplica:
    gcloud sql instances create REPLICA_NAME \
    --master-instance-name=PRIMARY_INSTANCE_NAME
    

    Si es necesario, puedes especificar un tamaño de nivel diferente con el parámetro --tier.

    Puedes especificar una región diferente mediante el parámetro --region.

    Si la instancia principal solo tiene una dirección IP privada, agrega el parámetro --no-assign-ip al comando.

    Debes crear la réplica en la misma red de VPC que la instancia principal.

  • El registro binario es compatible con las instancias de réplica de lectura (solo MySQL 5.7 y 8.0; no es compatible con réplicas de conmutación por error de alta disponibilidad heredadas). Habilita el registro binario en una réplica con el mismo comando de gcloud mediante el uso del nombre de instancia de la réplica en lugar del nombre de la instancia principal.
    gcloud sql instances patch REPLICA_INSTANCE_NAME \
    --enable-bin-log
        

    La durabilidad del registro binario en la instancia de réplica (pero no en la instancia principal) se puede establecer con la marca sync_binlog, que controla la frecuencia con la que el servidor MySQL sincroniza el registro binario en el disco.

    Las copias de seguridad no se pueden habilitar en las instancias de réplica, pero el registro binario se puede habilitar en una réplica incluso cuando las copias de seguridad están inhabilitadas, a diferencia de la instancia principal.

    El período de retención de binlog en las instancias de réplica se configura automáticamente como un día, a diferencia de los siete días de las instancias principales.

REST v1

  1. Obtén la configuración de copia de seguridad actual

    Usa el método get del recurso de las instancias a fin de que se muestren la versión de la base de datos y la configuración de copia de seguridad actual de la instancia principal.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • project-id: El ID del proyecto
    • primary-instance-name: Es el nombre de la instancia principal.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/primary-instance-name

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

  2. Verifica que los campos de replicación estén configurados

    Si enabled o pointInTimeEnabled son false, usa el método patch del recurso de las instancias para habilitarlos a ambos. En la solicitud, especifica las propiedades de la configuración de copia de seguridad que deseas cambiar.

    Para habilitar las copias de seguridad, configura enabled en true y startTime a una hora del día en formato HH:MM. El parámetro startTime se establece en el formato de 24 horas, en la zona horaria UTC ± 00, y especifica el inicio de un período de copia de seguridad de 4 horas. Las copias de seguridad pueden iniciarse en cualquier momento durante el período de copia de seguridad.

    Para habilitar la recuperación de un momento determinado, establece pointInTimeEnabled en true.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia (principal o de réplica)
    • start-time: La hora en el formato “HH:MM”
    • enabled: Se establece como verdadero para una instancia principal y como falso para una instancia de réplica

    Método HTTP y URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

    Cuerpo JSON de la solicitud:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "start-time",
          "enabled": enabled,
          "binaryLogEnabled": true
        }
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

  3. Crea la réplica de lectura

    Usa el método insert del recurso de las instancias para crear la réplica de lectura. La propiedad databaseVersion debe ser la misma que la instancia principal. Para una réplica de lectura entre regiones, especifica una región que no sea la de la instancia principal.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • project-id: El ID del proyecto
    • database-version: La string de la versión de Enum (por ejemplo, MYSQL_8_0)
    • primary-instance-name: Es el nombre de la instancia principal.
    • primary-instance-region: Es la región de la instancia principal.
    • replica-region: La región de la instancia de réplica
    • replica-name: El nombre de la instancia de réplica
    • machine-type: La string de enumeración del tipo de máquina. Por ejemplo: “db-custom-1-3840”

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

    Cuerpo JSON de la solicitud:

    {
      "masterInstanceName": "primary-instance-name",
      "project": "project-id",
      "databaseVersion": "database-version",
      "name": "replica-name",
      "region": "replica-region",
      "settings":
      {
        "tier": "machine-type",
        "settingsVersion": 0,
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

REST v1beta4

  1. Obtén la configuración de copia de seguridad actual

    Usa el método get del recurso de las instancias a fin de que se muestren la versión de la base de datos y la configuración de copia de seguridad actual de la instancia principal.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • project-id: El ID del proyecto
    • primary-instance-name: Es el nombre de la instancia principal.

    Método HTTP y URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/primary-instance-name

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

  2. Verifica que los campos de replicación estén configurados

    Si enabled o binaryLogEnabled son false en la instancia principal, usa el método patch del recurso de las instancias para habilitar ambos. En la solicitud, especifica las propiedades de la configuración de copia de seguridad que deseas cambiar.

    Para habilitar las copias de seguridad, configura enabled en true y startTime a una hora del día en formato HH:MM. El parámetro startTime se establece en el formato de 24 horas, en la zona horaria UTC ± 00, y especifica el inicio de un período de copia de seguridad de 4 horas. Las copias de seguridad pueden iniciarse en cualquier momento durante el período de copia de seguridad.

    Para habilitar la recuperación de un momento determinado, establece binaryLogEnabled en true en la instancia principal.

    El registro binario es compatible con las instancias de réplica de lectura (solo MySQL 5.7 y 8.0). Habilita el registro binario en una réplica con la misma API, mediante el uso del ID de instancia de la réplica en lugar del ID de la instancia principal.

    La durabilidad del registro binario en la réplica (pero no en la instancia principal) se puede establecer con la marca sync_binlog, que controla la frecuencia con la que el servidor MySQL sincroniza el registro binario en el disco.

    Las copias de seguridad no se pueden habilitar en las instancias de réplica, pero el registro binario se puede habilitar en una réplica incluso cuando las copias de seguridad están inhabilitadas, a diferencia de la instancia principal.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • project-id: El ID del proyecto
    • instance-id: El ID de la instancia (principal o de réplica)
    • start-time: La hora en el formato “HH:MM”
    • enabled: Se establece como verdadero para una instancia principal y como falso para una instancia de réplica

    Método HTTP y URL:

    PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    Cuerpo JSON de la solicitud:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "start-time",
          "enabled": enabled,
          "binaryLogEnabled": true
        }
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

  3. Crea la réplica de lectura

    Usa el método insert del recurso de las instancias para crear la réplica de lectura. La propiedad databaseVersion debe ser la misma que la instancia principal. Para una réplica de lectura entre regiones, especifica una región que no sea la de la instancia principal.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • project-id: El ID del proyecto
    • database-version: La string de la versión de Enum (por ejemplo, MYSQL_8_0)
    • primary-instance-name: Es el nombre de la instancia principal.
    • primary-instance-region: Es la región de la instancia principal.
    • replica-region: La región de la instancia de réplica
    • replica-name: El nombre de la instancia de réplica
    • machine-type: La string de enumeración del tipo de máquina. Por ejemplo: “db-custom-1-3840”

    Método HTTP y URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances

    Cuerpo JSON de la solicitud:

    {
      "masterInstanceName": "primary-instance-name",
      "project": "project-id",
      "databaseVersion": "database-version",
      "name": "replica-name",
      "region": "replica-region",
      "settings":
      {
        "tier": "machine-type",
        "settingsVersion": 0,
      }
    }
    

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

Configura réplicas de lectura para la autenticación de la base de datos de IAM

Las réplicas de lectura no tienen la marca cloudsql_iam_authentication habilitada de forma automática cuando se habilita en la instancia principal.

Si deseas configurar una réplica de lectura para la autenticación de la base de datos de IAM, haz lo siguiente:

  1. En Google Cloud Console, ve a la página Instancias de Cloud SQL.

    Ir a Instancias de Cloud SQL

  2. Haz clic en el nombre de la instancia para abrir la página Descripción general de esa instancia.
  3. En el mosaico de configuración, busca la marca cloudsql_iam_authentication. Si la marca no está en la lista, no es necesario habilitarla en la réplica de lectura. Si la marca está en la lista, debes habilitar la marca en la réplica de lectura. Si necesitas habilitar la marca en la réplica de lectura, continúa con el paso siguiente.
  4. Selecciona Réplicas en el menú de navegación de SQL.
  5. Haz clic en el nombre de la réplica que deseas editar.
  6. Haz clic en Edit.
  7. En la sección Opciones de configuración, expande Marcas.
  8. Selecciona + Agregar elemento.
  9. Ingresa cloudsql_iam_authentication para el nombre de la marca. Asegúrate de que la opción Activada esté seleccionada para esta marca.
  10. Haz clic en Guardar.

Soluciona problemas

Problema Soluciona problemas
La réplica de lectura no comenzó a replicarse cuando se creó. Es probable que haya un error más específico en los archivos de registro. Inspecciona los registros en Cloud Logging para encontrar el error real.
No se puede crear una réplica de lectura: error invalidFlagValue. Una de las marcas de la solicitud no es válida. Puede ser una marca que proporcionaste explícitamente o una que se configuró como un valor predeterminado.

Primero, comprueba que el valor de la marca max_connections sea mayor o igual que el valor en el principal.

Si la marca max_connections se configuró de forma correcta, inspecciona los registros en Cloud Logging para encontrar el error real.

No se puede crear una réplica de lectura: error desconocido. Es probable que haya un error más específico en los archivos de registro. Inspecciona los registros en Cloud Logging para encontrar el error real.

Si el error es set Service Networking service account as servicenetworking.serviceAgent role on consumer project, inhabilita y vuelve a habilitar la Service Networking API. Esta acción crea la cuenta de servicio que se necesita para continuar con el proceso.

El disco está lleno. El tamaño del disco de la instancia principal puede llenarse durante la creación de una réplica. Edita la instancia principal para actualizarla a un tamaño de disco más grande.
La instancia de réplica usa demasiada memoria. La réplica usa memoria temporal para almacenar en caché las operaciones de lectura solicitadas con frecuencia, lo que puede ocasionar que use más memoria que la instancia principal.

Reinicia la instancia de réplica para recuperar el espacio de memoria temporal.

Se detuvo la replicación. Se alcanzó el límite de almacenamiento máximo y el aumento de almacenamiento automático no está habilitado.

Edita la instancia para habilitar automatic storage increase.

El retraso de replicación se mantiene alto. La carga de escritura es demasiado alta para que la réplica la maneje. El retraso de la replicación se produce cuando el subproceso de SQL en una réplica no puede mantener el ritmo del subproceso de E/S. Algunos tipos de consultas o cargas de trabajo pueden causar un gran retraso de la replicación de forma temporal o permanente en un esquema determinado. Algunas de las causas típicas del retraso de la replicación son las siguientes:
  • Consultas lentas en la réplica. Encuéntralas y corrígelas.
  • Todas las tablas deben tener una clave primaria o única. Cada actualización en una tabla sin una clave única o primaria genera análisis completos de la tabla en la réplica.
  • Las consultas como DELETE ... WHERE field < 50000000 provocan un retraso de la replicación basado en filas, ya que se acumula una gran cantidad de actualizaciones en la réplica.

Estas son algunas soluciones posibles:

Si cambias las marcas de replicación paralelas, se generará un error. Se configuró un valor incorrecto para una o más de estas marcas.

En la instancia principal que muestra el mensaje de error, configura las marcas de replicación paralelas:

  1. Modifica las marcas binlog_transaction_dependency_tracking y transaction_write_set_extraction:
    • binlog_transaction_dependency_tracking=COMMIT_ORDER
    • transaction_write_set_extraction=OFF
  2. Agrega la marca slave_pending_jobs_size_max:

    slave_pending_jobs_size_max=33554432

  3. Modifica la marca transaction_write_set_extraction:

    transaction_write_set_extraction=XXHASH64

  4. Modifica la marca binlog_transaction_dependency_tracking:

    binlog_transaction_dependency_tracking=WRITESET

La creación de la réplica falla con el tiempo de espera. Las transacciones no confirmadas de larga duración en la instancia principal pueden generar una falla en la creación de la réplica de lectura.

Vuelve a crear la réplica después de detener todas las consultas en ejecución.

¿Qué sigue?