Usar la recuperación de un momento determinado

En esta página, se describe cómo usar la recuperación de un momento determinado para restablecer la instancia de Cloud SQL.

Para obtener más información sobre la recuperación de un momento determinado, consulta Recuperación de un momento determinado.

Habilita la recuperación de un momento determinado

Cuando creas una instancia nueva en Google Cloud Console, las copias de seguridad automáticas y Habilitar la recuperación de un momento determinado están habilitadas de forma automática. Este procedimiento habilita la recuperación de un momento determinado en una instancia existente.

Console

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

    Ir a Instancias de Cloud SQL

  2. Abre el menú de más acciones Ícono de más acciones para la instancia en la que deseas habilitar la recuperación de un momento determinado y haz clic en Editar.
  3. En Personalizar tu instancia, expande la sección Copias de seguridad.
  4. Selecciona la casilla de verificación Habilitar la recuperación de un momento determinado.
  5. Expande Opciones avanzadas.
  6. Agrega la cantidad de días que se retendrán los registros, entre 1 y 7.
  7. Haz clic en Guardar.

gcloud

  1. Muestra la descripción 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
    

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

  3. Habilita la recuperación de un momento determinado:
    gcloud sql instances patch INSTANCE_NAME \
    --enable-bin-log
    

    Si habilitas la recuperación de un momento determinado en una instancia principal, también puedes configurar la cantidad de días para los que deseas conservar los registros de transacciones. Para ello, agrega el siguiente parámetro:

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

    En la sección backupConfiguration, verás binaryLogEnabled: true si se realizó correctamente el cambio.

Terraform

Para habilitar la recuperación de un momento determinado, usa un recurso de Terraform.

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance-pitr"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    backup_configuration {
      enabled                        = true
      binary_log_enabled             = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
  deletion_protection =  "true"
}

REST v1

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”

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": true,
      "binaryLogEnabled": true
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

REST v1beta4

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”

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, expande una de estas opciones:

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

Realiza una recuperación de un momento determinado

Console

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

    Ir a Instancias de Cloud SQL

  2. Abre el menú de más acciones Ícono de más acciones para la instancia que deseas recuperar y haz clic en Clonar.
  3. Opcional. En la página Crear una clonación, actualiza el nombre de la instancia nueva.
  4. Selecciona Clone from earlier time.
  5. Ingresa un tiempo de recuperación de un momento determinado.
  6. Haz clic en Crear clon.

gcloud

Crea una clonación mediante la recuperación de un momento determinado.

Reemplaza lo siguiente:

  • SOURCE_INSTANCE_NAME: Es el nombre de la instancia desde la que restableces.
  • NEW_INSTANCE_NAME: Es el nombre para el clon.
  • TIMESTAMP: Es la zona horaria UTC para la instancia de origen en formato RFC 3339. Por ejemplo, 2012-11-15T16:19:00.094Z.
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time 'TIMESTAMP'

REST v1

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

  • project-id: El ID del proyecto
  • target-instance-id: El ID de la instancia de destino
  • source-instance-id: El ID de la instancia de origen
  • restore-timestamp El momento al que se restablecerá

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

REST v1beta4

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

  • project-id: El ID del proyecto
  • target-instance-id: El ID de la instancia de destino
  • source-instance-id: El ID de la instancia de origen
  • restore-timestamp El momento al que se restablecerá

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

Inhabilita la recuperación de un momento determinado

Console

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

    Ir a Instancias de Cloud SQL

  2. Abre el menú de más acciones Ícono de más acciones para la instancia que deseas inhabilitar y selecciona Editar.
  3. En Personalizar tu instancia, expande la sección Copias de seguridad.
  4. Desmarca la opción Habilitar la recuperación de un momento determinado.
  5. Haz clic en Guardar.
  6. En la página Descripción general de la instancia, binaryLogEnabled se muestra como falso.

gcloud

  1. Inhabilita la recuperación de un momento determinado:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-bin-log
  2. Confirma los cambios:
    gcloud sql instances describe INSTANCE_NAME
    

    En la sección backupConfiguration, verás binaryLogEnabled: false si se realizó correctamente el cambio.

REST v1

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

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,
      "binaryLogEnabled": false
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

REST v1beta4

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

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,
      "binaryLogEnabled": false
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

Uso del disco y recuperación de un momento determinado

La recuperación de un momento determinado usa registros binarios. Estos registros se actualizan de forma periódica y usan espacio de almacenamiento. Los registros binarios y la copia automática de seguridad que se asocia a ellos se borran de manera automática. Por lo general, esto ocurre luego de 7 días.

Si el tamaño de los registros binarios genera un problema en la instancia, haz lo siguiente:

  • Puedes aumentar el tamaño de almacenamiento de la instancia, pero el aumento del tamaño de tu registro binario con respecto al uso del disco puede ser temporal.

  • Te recomendamos que habilites el aumento automático de almacenamiento para evitar problemas inesperados.

  • Puedes inhabilitar la recuperación de un momento determinado si deseas borrar los registros y recuperar el almacenamiento. Disminuir el almacenamiento usado no reduce el tamaño del almacenamiento aprovisionado para la instancia.

  • Los registros se borran definitivamente una vez al día, no de forma continua. Configurar la retención de registros en dos días implica que se retengan al menos dos días de registros y, como máximo, tres días de registros. Recomendamos configurar la cantidad de copias de seguridad en un día más que los días de retención de registros para garantizar un mínimo de días específicos de retención.

Configura la retención del registro de transacciones

Para establecer la cantidad de días que se retendrán los registros binarios (del 1 al 7):

Console

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

    Ir a Instancias de Cloud SQL

  2. Abre el menú de más acciones Ícono de más acciones para la instancia en la que deseas establecer el registro de transacciones y selecciona Editar.
  3. En Personalizar tu instancia, expande la sección Copias de seguridad.
  4. En la sección Habilitar la recuperación de un momento determinado, expande Opciones avanzadas.
  5. Agrega la cantidad de días que se retendrán los registros, entre 1 y 7.
  6. Haz clic en Guardar.

gcloud

Edita la instancia para establecer la cantidad de días que se retendrán los registros binarios.

Reemplaza lo siguiente:

  • INSTANCE-NAME: Es el nombre de la instancia en la que deseas configurar el registro de transacciones.
  • DAYS-TO-RETAIN: Es la cantidad de días de registros de transacciones que se conservarán. El rango válido es entre 1 y 7. Si no se especifica, el valor predeterminado es 7. Solo es válido cuando la recuperación de un momento determinado está habilitada. Para conservar más días de registros de transacciones, se requiere un tamaño de almacenamiento mayor.
gcloud sql instances patch INSTANCE-NAME 
--retained-transaction-log-days=DAYS-TO-RETAIN

REST v1beta4

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

  • days-to-retain: es la cantidad de días que se retendrán los registros de transacciones, de 1 a 7
  • project-id: El ID del proyecto
  • instance-id: El ID de la 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":
    {
      "transactionLogRetentionDays": "days-to-retain"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

Realiza la recuperación de un momento determinado mediante posiciones de registros binarios

Si bien te recomendamos que realices la recuperación de un momento determinado mediante marcas de tiempo como se describe en el procedimiento anterior, también puedes realizar la recuperación de un momento determinado si proporcionas una posición de registro binario específica en un archivo de registro binario.

Para obtener más información sobre la recuperación de un momento determinado mediante posiciones de registro binarios, consulta la referencia de MySQL, Recuperación de un momento determinado mediante el registro binario.

Antes de comenzar

Para llevar a cabo esta tarea, debes contar con lo siguiente:

Identifica la posición de recuperación

  1. Usa el cliente MySQL a fin de conectarte a la instancia que deseas restablecer.

    Para hacerlo, usa Cloud Shell o la máquina cliente local. Si deseas obtener más información, consulta Opciones de conexión para aplicaciones externas.

  2. Muestra los archivos de registro binarios para la instancia:

    SHOW BINARY LOGS;
    
  3. Muestra los primeros 100 eventos en el archivo de registro binario más reciente:

    SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' LIMIT 100;
    

    Puedes ajustar la cantidad de filas que se muestran, pero no muestres todos los eventos en el archivo hasta que sepas cuál es el tamaño del archivo. Mostrar una gran cantidad de eventos puede afectar el rendimiento del sistema.

  4. Si el evento que buscas no aparece, usa la última posición que se muestra como punto de partida para buscar el siguiente conjunto de eventos:

    SHOW BINLOG EVENTS IN '<BINARY_LOG_FILE>' FROM <POSITION> LIMIT 100;
    
  5. Cuando encuentres el evento que marca el momento al que deseas restablecerte, registra la posición (se muestra como Pos) y el nombre del archivo de registro binario.

    El nombre de archivo del registro binario y la posición son los valores que debes usar para la recuperación de un momento determinado.

A continuación, se muestra un ejemplo del resultado del comando SHOW BINLOG EVENTS:

+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                                |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
| mysql-bin.000011 |   4 | Format_desc |  88955285 |         120 | Server ver: 5.6.30-log, Binlog ver: 4               |
| mysql-bin.000011 | 120 | Query       |  88955285 |         211 | create database db1                                 |
| mysql-bin.000011 | 211 | Query       |  88955285 |         310 | use `db1`; CREATE TABLE t (c CHAR(20))              |
| mysql-bin.000011 | 310 | Query       |  88955285 |         381 | BEGIN                                               |
| mysql-bin.000011 | 381 | Table_map   |  88955285 |         426 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 310 | Query       |  88955285 |         381 | BEGIN                                               |

| mysql-bin.000011 | 426 | Write_rows  |  88955285 |         464 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 464 | Xid         |  88955285 |         495 | COMMIT /* xid=56 */                                 |
| mysql-bin.000011 | 495 | Query       |  88955285 |         566 | BEGIN                                               |
| mysql-bin.000011 | 566 | Table_map   |  88955285 |         611 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 611 | Write_rows  |  88955285 |         649 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 649 | Xid         |  88955285 |         680 | COMMIT /* xid=57 */                                 |
| mysql-bin.000011 | 680 | Query       |  88955285 |         751 | BEGIN                                               |
| mysql-bin.000011 | 751 | Table_map   |  88955285 |         796 | table_id: 18 (db1.t)                                |
| mysql-bin.000011 | 796 | Write_rows  |  88955285 |         834 | table_id: 18 flags: STMT_END_F                      |
| mysql-bin.000011 | 834 | Xid         |  88955285 |         865 | COMMIT /* xid=58 */                                 |
| mysql-bin.000011 | 865 | Query       |  88955285 |         977 | use `db1`; DROP TABLE `t` /* generated by server */ |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------+
16 rows in set (0.04 sec)

Para restablecer hasta la declaración DROP TABLE, en negrita, debes usar “865” en “mysql-bin.000011” como posición de recuperación. La declaración DROP TABLE y todas las operaciones posteriores no se reflejan en la nueva instancia.

Realiza la recuperación de un momento determinado mediante posiciones de eventos del registros binario

gcloud

Usa el comando gcloud sql instances clone con las marcas --bin-log-file-name y --bin-log-position.

  1. Crea la instancia nueva con el nombre del archivo binario de registro y la posición de recuperación.

    Reemplaza lo siguiente:

    • SOURCE_INSTANCE_NAME: Es el nombre de la instancia desde la que restableces.
    • NEW_INSTANCE_NAME: El nombre de la clonación.
    • BINLOG_FILE_NAME: Nombre para el registro binario, como mysql-bin.187288.
    • POSITION: La posición en el registro binario al que se debe restablecer, como 50001356.
    gcloud sql instances clone SOURCE_INSTANCE_NAME \
    NEW_INSTANCE_NAME \
    --bin-log-file-name="BINLOG_FILE_NAME" \
    --bin-log-position=POSITION

    Por ejemplo, un comando gcloud sql instances clone puede ser similar al siguiente:

    gcloud sql instances clone instance1 \
    instance1-clone \
    --bin-log-file-name=mysql-bin.0000031 \
    --bin-log-position=107 \
  2. Usa el ID de operación que muestra el comando clone para verificar el estado de la operación de restablecimiento.
    gcloud sql operations describe OPERATION_ID

    Cuando la operación está en curso, se muestra el estado RUNNING. Cuando se completa la operación, se muestra el estado DONE.

REST v1

Crea la instancia nueva con el nombre del archivo de registro binario y la posición de recuperación que identificaste:

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

  • project-id: El ID del proyecto
  • target-instance-id: El ID de la instancia de destino
  • source-instance-id: El ID de la instancia de origen
  • binary-log-file-name: El nombre del archivo de registro binario
  • binary-log-position: La posición dentro del archivo de registro binario

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "binLogCoordinates":
    {
      "kind": "sql#binLogCoordinates",
      "binLogFileName": "binary-log-file-name",
      "binLogPosition": "binary-log-position"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

REST v1beta4

Crea la instancia nueva con el nombre del archivo de registro binario y la posición de recuperación que identificaste:

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

  • project-id: El ID del proyecto
  • target-instance-id: El ID de la instancia de destino
  • source-instance-id: El ID de la instancia de origen
  • binary-log-file-name: El nombre del archivo de registro binario
  • binary-log-position: La posición dentro del archivo de registro binario

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "binLogCoordinates":
    {
      "kind": "sql#binLogCoordinates",
      "binLogFileName": "binary-log-file-name",
      "binLogPosition": "binary-log-position"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

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

Solucionar problemas

Problema Soluciona problemas

argument --point-in-time: Failed to parse date/time:
Unknown string format: 2021-0928T30:54:03.094;
received: 2021-0928T30:54:03.094Z

O

Invalid value at 'body.clone_context.point_in_time'
(type.googleapis.com/google.protobuf.Timestamp), Field 'pointInTime',
Invalid time format: Failed to parse input,

La marca de tiempo que proporcionaste no es válida.

HTTP Error 400: Successful backup required for carrying out the operation was not found.

O

Successful backup required for carrying out the operation was not found. or Time where no backups can be found.

La marca de tiempo que proporcionaste se debe a una hora en la que no se pudieron encontrar las copias de seguridad o las coordenadas binlog.

¿Qué sigue?