Configurar la recuperación a un momento dado (PITR)

Cuando creas una instancia en la Google Cloud consola, se habilitan automáticamente las copias de seguridad automatizadas y la recuperación a un momento dado. Puedes configurar PITR en cualquier instancia siguiendo estos pasos:

Habilitar PITR

Cuando creas una instancia en la Google Cloud consola, se habilitan automáticamente las opciones Copias de seguridad automatizadas y Habilitar recuperación a un momento dado.

El siguiente procedimiento habilita PITR en una instancia principal ya creada.

Consola

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

    Ir a Instancias de Cloud SQL

  2. Abre el menú de más acciones Icono de acciones adicionales. de la instancia en la que quieras habilitar PITR y haz clic en Editar.
  3. En Personalizar tu instancia, amplía la sección Protección de datos.
  4. Seleccione la casilla Habilitar recuperación a un momento dado.
  5. En el campo Días de registros, introduce el número de días que quieres conservar los registros (de 1 a 35 en la edición Enterprise Plus de Cloud SQL o de 1 a 7 en la edición Enterprise de Cloud SQL).
  6. Haz clic en Guardar.

gcloud

  1. Muestra la vista general de la instancia:
    gcloud sql instances describe INSTANCE_NAME
  2. Si ves enabled: false en la sección backupConfiguration, habilita las copias de seguridad programadas:
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM

    Especifica el parámetro backup-start-time con el formato de 24 horas en la zona horaria UTC±00.

  3. Habilita PITR:
    gcloud sql instances patch INSTANCE_NAME \
    --enable-point-in-time-recovery

    Si habilitas PITR en una instancia principal, también puedes configurar el número de días durante los que quieres conservar los registros de transacciones añadiendo el siguiente parámetro:

    --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
  4. Confirma tu cambio:
    gcloud sql instances describe INSTANCE_NAME

    En la sección backupConfiguration, verás pointInTimeRecoveryEnabled: true si el cambio se ha realizado correctamente.

Terraform

Para habilitar PITR, usa un recurso de Terraform.

resource "google_sql_database_instance" "postgres_instance_pitr" {
  name             = ""
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Aplica los cambios

Para aplicar la configuración de Terraform en un Google Cloud proyecto, sigue los pasos que se indican en las siguientes secciones.

Preparar Cloud Shell

  1. Abre Cloud Shell.
  2. Define el Google Cloud proyecto predeterminado en el que quieras aplicar tus configuraciones de Terraform.

    Solo tienes que ejecutar este comando una vez por proyecto y puedes hacerlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.

Preparar el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

    Copia el código de ejemplo en el archivo main.tf que acabas de crear.

    También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

  3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
    terraform init

    Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
    terraform plan

    Haz las correcciones necesarias en la configuración.

  2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply

    Espera hasta que Terraform muestre el mensaje "Apply complete!".

  3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para comprobar que Terraform los ha creado o actualizado.

Eliminar los cambios

Para eliminar los cambios, sigue estos pasos:

  1. Para inhabilitar la protección contra eliminación, en el archivo de configuración de Terraform, asigna el valor false al argumento deletion_protection.
    deletion_protection =  "false"
  2. Aplica la configuración de Terraform actualizada ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply
  1. Para quitar los recursos que se hayan aplicado anteriormente con tu configuración de Terraform, ejecuta el siguiente comando e introduce yes en la petición:

    terraform destroy

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia.
  • INSTANCE_NAME: el nombre de la instancia principal o de réplica de lectura que estás configurando para la alta disponibilidad
  • START_TIME: la hora (en horas y minutos)

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "START_TIME",
      "enabled": true,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID o el número de proyecto del Google Cloud proyecto que contiene la instancia.
  • INSTANCE_NAME: el nombre de la instancia principal o de réplica de lectura que estás configurando para la alta disponibilidad
  • START_TIME: la hora (en horas y minutos)

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "START_TIME",
      "enabled": true,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

Inhabilitar PITR

Consola

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

    Ir a Instancias de Cloud SQL

  2. Abre el menú de más acciones Icono de acciones adicionales. de la instancia que quieras desactivar y selecciona Editar.
  3. En Personalizar tu instancia, amplía la sección Protección de datos.
  4. Desmarca Habilitar recuperación a un momento dado.
  5. Haz clic en Guardar.

gcloud

  1. Desactiva la recuperación a un momento dado:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-point-in-time-recovery
  2. Confirma tu cambio:
    gcloud sql instances describe INSTANCE_NAME

    En la sección backupConfiguration, verás pointInTimeRecoveryEnabled: false si el cambio se ha realizado correctamente.

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de instancia.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "pointInTimeRecoveryEnabled": false
    }
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • project-id: el ID del proyecto
  • instance-id: el ID de instancia.

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":
    {
      "enabled": false,
      "pointInTimeRecoveryEnabled": false
    }
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

Definir la retención de registros de transacciones

Para definir el número de días que se conservarán los registros write-ahead, sigue estos pasos:

Consola

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

    Ir a Instancias de Cloud SQL

  2. Abre el menú de acciones Icono de acciones adicionales. de la instancia en la que quieras activar el registro de transacciones y selecciona Editar.
  3. En Personalizar tu instancia, amplía la sección Protección de datos.
  4. En la sección Habilitar recuperación a un momento dado, despliega Opciones avanzadas.
  5. Introduce el número de días que quieres conservar los registros (entre 1 y 35 para la edición Enterprise Plus de Cloud SQL, o entre 1 y 7 para la edición Enterprise de Cloud SQL).
  6. Haz clic en Guardar.

gcloud

Edita la instancia para definir el número de días que se conservarán los registros write-ahead.

Haz los cambios siguientes:

  • INSTANCE_NAME: el nombre de la instancia en la que quieras definir el registro de transacciones.
  • DAYS_TO_RETAIN: número de días que se conservarán los registros de transacciones. En la edición Enterprise Plus de Cloud SQL, el intervalo válido es de entre 1 y 35 días, con un valor predeterminado de 14 días. En la edición Enterprise de Cloud SQL, el intervalo válido es de 1 a 7 días, con un valor predeterminado de 7 días.

    Si no especifica ningún valor, Cloud SQL usará el valor predeterminado. Esto solo es válido cuando se habilita la recuperación a un momento dado. Para conservar los registros de transacciones durante más días, se necesita un mayor tamaño de almacenamiento.

  gcloud sql instances patch INSTANCE_NAME 
--retained-transaction-log-days=DAYS_TO_RETAIN

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto.
  • INSTANCE_ID: el ID de instancia.
  • DAYS_TO_RETAIN: número de días que se conservarán los registros de transacciones. En la edición Enterprise Plus de Cloud SQL, el intervalo válido es de entre 1 y 35 días, con un valor predeterminado de 14 días. En la edición Enterprise de Cloud SQL, el intervalo válido es de 1 a 7 días, con un valor predeterminado de 7 días.

    Si no se especifica ningún valor, se usará el valor predeterminado. Esto solo es válido cuando se habilita la recuperación a un momento dado. Para conservar los registros de transacciones durante más días, se necesita más espacio de almacenamiento.

Método HTTP y URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

Cuerpo JSON de la solicitud:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "DAYS_TO_RETAIN"
    }
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto.
  • INSTANCE_ID: el ID de instancia.
  • DAYS_TO_RETAIN: número de días que se conservarán los registros de transacciones. En la edición Enterprise Plus de Cloud SQL, el intervalo válido es de entre 1 y 35 días, con un valor predeterminado de 14 días. En la edición Enterprise de Cloud SQL, el intervalo válido es de 1 a 7 días, con un valor predeterminado de 7 días.

    Si no se especifica ningún valor, se usará el valor predeterminado. Esto solo es válido cuando se habilita la recuperación a un momento dado. Para conservar los registros de transacciones durante más días, se necesita más espacio de almacenamiento.

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":
    {
      "transactionLogRetentionDays": "DAYS_TO_RETAIN"
    }
  }
}

Para enviar tu solicitud, despliega una de estas opciones:

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

Comprobar la ubicación de almacenamiento de los registros de transacciones usados para PITR

Puedes comprobar dónde almacena tu instancia de Cloud SQL los registros de transacciones que se usan para la recuperación a un momento dado.

gcloud

Para determinar si tu instancia almacena los registros de PITR en el disco o en Cloud Storage, usa el siguiente comando:

   gcloud sql instances describe INSTANCE_NAME
   

Sustituye INSTANCE_NAME por el nombre de la instancia.

Si hay varias instancias en el mismo proyecto, también puedes consultar la ubicación de almacenamiento de los registros de transacciones. Para determinar la ubicación de varias instancias, usa el siguiente comando:

   gcloud sql instances list --show-transactional-log-storage-state
   

Respuesta de ejemplo:

NAME  DATABASE_VERSION LOCATION         TRANSACTIONAL_LOG_STORAGE_STATE
my_01 POSTGRES_12      us-central-1     DISK
my_02 POSTGRES_12      us-central-1     CLOUD_STORAGE
...
   

En el resultado del comando, el campo transactionalLogStorageState o la columna TRANSACTIONAL_LOG_STORAGE_STATE proporcionan información sobre dónde se almacenan los registros de transacciones de la recuperación a un momento dado de la instancia. Los posibles estados de almacenamiento del registro de transacciones son los siguientes:

  • DISK: la instancia almacena los registros de transacciones usados para PITR en el disco. Si actualizas una instancia de la edición Enterprise de Cloud SQL a la edición Enterprise Plus, el proceso de actualización cambiará automáticamente la ubicación del almacenamiento de registros a Cloud Storage. Para obtener más información, consulta el artículo Actualizar una instancia a la edición Enterprise Plus de Cloud SQL mediante una actualización in situ. También puedes cambiar la ubicación de almacenamiento con la interfaz de línea de comandos gcloud o la API Cloud SQL Admin sin actualizar la edición de tu instancia y sin que se produzca ningún tiempo de inactividad. Para obtener más información, consulta Cambiar el almacenamiento de los registros de transacciones a Cloud Storage.
  • SWITCHING_TO_CLOUD_STORAGE: la instancia está cambiando la ubicación de almacenamiento de los registros de transacciones de PITR a Cloud Storage.
  • SWITCHED_TO_CLOUD_STORAGE: la instancia ha completado el cambio de la ubicación de almacenamiento de los registros de transacciones de PITR del disco a Cloud Storage.
  • CLOUD_STORAGE: la instancia almacena los registros de transacciones que se usan para PITR en Cloud Storage.

Cambiar el almacenamiento de los registros de transacciones a Cloud Storage

Si tu instancia almacena en disco los registros de transacciones que se usan para la recuperación a un momento dado, puedes cambiar la ubicación de almacenamiento a Cloud Storage sin que se produzca ningún tiempo de inactividad. El proceso general de cambio de la ubicación de almacenamiento tarda aproximadamente lo que dure el periodo de conservación del registro de transacciones (en días) en completarse. En cuanto inicies el cambio, los registros de transacciones empezarán a acumularse en Cloud Storage. Durante la operación, puedes comprobar el estado del proceso general mediante el comando que se indica en Comprobar la ubicación de almacenamiento de los registros de transacciones usados para la recuperación a un momento dado.

Una vez que se haya completado el proceso general de cambio a Cloud Storage, Cloud SQL usará los registros de transacciones de Cloud Storage para la recuperación a un momento dado.

gcloud

Para cambiar la ubicación de almacenamiento a Cloud Storage, usa el siguiente comando:

   gcloud sql instances patch INSTANCE_NAME \
      --switch-transaction-logs-to-cloud-storage
   

Sustituye INSTANCE_NAME por el nombre de la instancia. La instancia debe ser una instancia principal y no una instancia de réplica. La respuesta es similar a la siguiente:

The following message is used for the patch API method.
{"name": "INSTANCE_NAME", "project": "PROJECT_NAME", "switchTransactionalLogsToCloudStorageEnabled": "true"}

Patching Cloud SQL instance...done.
Updated
[https://sqladmin.prod.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME].
   

Si el comando devuelve un error, consulta la sección Solucionar problemas al cambiar a Cloud Storage para ver los posibles pasos siguientes.

REST v1

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto.
  • INSTANCE_ID: el ID de instancia. La instancia debe ser una instancia principal y no 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:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

Para enviar tu solicitud, despliega una de estas opciones:

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

Si la solicitud devuelve un error, consulta Solucionar problemas al cambiar a Cloud Storage para ver los posibles pasos siguientes.

REST v1beta4

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto.
  • INSTANCE_ID: el ID de instancia. La instancia debe ser una instancia principal y no 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:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

Para enviar tu solicitud, despliega una de estas opciones:

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

Si la solicitud devuelve un error, consulta Solucionar problemas al cambiar a Cloud Storage para ver los posibles pasos siguientes.

Solucionar problemas al cambiar a Cloud Storage

En la siguiente tabla se enumeran los posibles errores que pueden devolverse con el código INVALID REQUEST al cambiar la ubicación de almacenamiento de los registros de transacciones del disco a Cloud Storage.

Problema Solución de problemas
Switching the storage location of the transaction logs used for PITR is not supported for instances with database type %s. Asegúrate de ejecutar el comando gcloud CLI o de hacer la solicitud de API en una instancia de Cloud SQL para MySQL o Cloud SQL para PostgreSQL. No se puede cambiar la ubicación de almacenamiento de los registros de transacciones mediante la CLI de gcloud o la API Cloud SQL Admin en Cloud SQL para SQL Server.
PostgreSQL transactional logging is not enabled on this instance. PostgreSQL usa el registro de escritura previa como registros de transacciones para la recuperación a un momento dado (PITR). Para admitir PITR, PostgreSQL requiere que habilites el registro de escritura previa en la instancia. Para obtener más información sobre cómo habilitar el registro anticipado de escritura, consulta Habilitar PITR.
This instance is already storing transaction logs used for PITR in Cloud Storage Para verificar la ubicación de almacenamiento de los registros de transacciones, ejecuta el comando que se indica en Comprobar la ubicación de almacenamiento de los registros de transacciones usados para PITR.
The instance is already switching transaction logs used for PITR from disk to Cloud Storage.

Espera a que se complete la operación de cambio.

Para verificar el estado de la operación y la ubicación de almacenamiento de los registros de transacciones, ejecuta el comando que se indica en Comprobar la ubicación de almacenamiento de los registros de transacciones utilizados para la recuperación a un momento dado.

Siguientes pasos