Crea copias de seguridad y restablece bases de datos con gcloud CLI

En esta página, se describe cómo usar la función de copia de seguridad y restablecimiento de Spanner con Google Cloud CLI.

Requisitos previos

En los ejemplos de esta página, se supone que hiciste lo siguiente:

  • Ya configuraste la gcloud CLI para usarla con Spanner. Si recién comienzas a usar Google Cloud CLI con Spanner, consulta Comienza a usar Spanner con Google Cloud CLI.

  • Configuraste Google Cloud CLI con un proyecto predeterminado. Por ejemplo:

    gcloud config set core/project my-project
  • Ya tienes una instancia llamada test-instance y una base de datos llamada example-db.

Crear una copia de seguridad

Para crear una copia de seguridad llamada example-db-backup-6 y hacer que venza en 1 año, usa gcloud spanner backups create:

   gcloud spanner backups create example-db-backup-6 --instance=test-instance \
      --database=example-db --retention-period=1y --async

Estas son algunas notas de uso:

  • Para establecer la fecha de vencimiento de la copia de seguridad, especifica la marca --retention-period o --expiration-date. Para obtener más información sobre la sintaxis de fecha , consulta gcloud topic datetimes.
  • El nombre de la copia de seguridad debe ser único en la instancia.
  • El comando se muestra de inmediato debido a la marca --async. Sin la marca, el comando esperará a que se complete la operación de copia de seguridad.
  • Especifica la marca --help para obtener ayuda con cualquier comando.

    El resultado es similar al siguiente:

    Create request issued for: [example-db-backup-6]
    Check operation [projects/my-project/instances/test-instance/backups/example-db-backup-6/operations/_auto_op_234567] for status.
    

    Para verificar el progreso de una operación de copia de seguridad, consulta Verifica el progreso de la operación.

Copia una copia de seguridad

Para copiar una copia de seguridad en una instancia diferente en el mismo proyecto, haz lo siguiente:

gcloud spanner backups copy \
    --source-instance=test-instance \
    --source-backup=example-db \
    --destination-instance=backup-instance \
    --destination-backup=copied-backup \
    --expiration-date=2022-03-30T10:49:41Z

Para copiar una copia de seguridad en una instancia diferente en un proyecto diferente, haz lo siguiente:

gcloud spanner backups copy \
  --source-backup=projects/my-project/instances/test-instance/backups/example-db \
  --destination-backup=projects/backup-project/instances/backup-instance-eu/backups/copied-backup \
  --expiration-date=2022-03-30T10:49:41Z

Notas de uso:

  • Si eliges copiar la copia de seguridad en una instancia diferente del mismo proyecto, debes crear una instancia nueva (o tener una lista) para la copia de seguridad copiada. En el ejemplo anterior, se usa backup-instance. No puedes crear una instancia nueva como parte de la operación de copia de seguridad.
  • Si decides copiar la copia de seguridad en un proyecto diferente, debes tener otro proyecto con su propia instancia lista para la copia. En el ejemplo anterior, se usa backup-project. No puedes crear un proyecto nuevo como parte de la operación de copia de seguridad.
  • El tiempo de vencimiento de la copia de seguridad debe ser de al menos seis horas desde el momento en que se procesa la solicitud de copia actual y, como máximo, 366 días después de la copia de seguridad de origen create_time.

El resultado es similar al siguiente:

createTime: '2022-03-29T22:06:05.905823Z'
database: projects/my-project/instances/test-instance/databases/example-db
databaseDialect: GOOGLE_STANDARD_SQL
encryptionInfo:
  encryptionType: GOOGLE_DEFAULT_ENCRYPTION
expireTime: '2022-03-30T10:49:41Z'
maxExpireTime: '2023-03-17T20:46:33.479336Z'
name: projects/backup-project/instances/backup-instance-eu/backups/copied-backup
sizeBytes: '7957667'
state: READY
versionTime: '2022-03-16T20:46:33.479336Z'

Para verificar el progreso de una operación de copia, consulta Verifica el progreso de la operación.

Restablece una base de datos a partir de una copia de seguridad

Para restablecer una base de datos, usa gcloud spanner databases restore:

gcloud spanner databases restore --async \
    --destination-instance=test-instance --destination-database=example-db-restored \
    --source-instance=test-instance --source-backup=example-db-backup-6

Notas de uso:

  • El comando se muestra de inmediato debido a la marca --async. Sin la marca, el comando esperará a que se complete la operación de restablecimiento.
  • Si las instancias de origen y de destino son diferentes, deben tener la misma configuración de instancias.
  • Si la base de datos de destino ya existe, la operación fallará.

El resultado es similar al siguiente:

Restore database in progress. Operation name=projects/my-project/instances/test-instance/databases/example-db-restored-1/operations/_auto_op_bb8e360b256b04bf

Para realizar un seguimiento del progreso de una operación de restablecimiento, consulta Verifica el progreso de la operación.

Verifica el progreso de la operación

Usa gcloud spanner operations describe para verificar el progreso de una operación.

  1. Obtén el ID de operación:

    gcloud spanner operations list --instance=INSTANCE-NAME \
    --database=DATABASE-NAME --type=BACKUP

    Reemplaza lo siguiente:

    • INSTANCE-NAME por el nombre de la instancia de Spanner
    • DATABASE-NAME por el nombre de la base de datos

    Notas de uso:

    • Para limitar la lista, especifica la marca --filter. Por ejemplo:

      • --filter="metadata.name:example-db" solo enumera las operaciones en una base de datos específica.
      • --filter="error:*" solo enumera las operaciones de copia de seguridad que fallaron.

      Para obtener más información sobre la sintaxis del filtro, consulta gcloud topic filter. Para obtener información sobre cómo filtrar las operaciones de copia de seguridad, consulta el campo filter en ListBackupOperationsRequest.

    • La marca --type no distingue mayúsculas de minúsculas.

    El resultado es similar al siguiente:

    OPERATION_ID               DONE  @TYPE                 BACKUP               SOURCE_DATABASE  START_TIME                   END_TIME
    _auto_op_123456  True  CreateBackupMetadata  example-db-backup-7  example-db       2020-02-04T02:12:38.075515Z  2020-02-04T02:22:40.581170Z
    _auto_op_234567  True  CreateBackupMetadata  example-db-backup-6  example-db       2020-02-04T02:05:43.920377Z  2020-02-04T02:07:59.089820Z
      ```
    
  2. Ejecuta gcloud spanner operations describe:

    gcloud spanner operations describe OPERATION-ID \
    --instance=INSTANCE-NAME \
    --backup=BACKUP-NAME \

    Reemplaza lo siguiente:

    • OPERATION-ID: El ID de operación de la operación que deseas verificar.
    • INSTANCE-NAME: Es el nombre de la instancia de Spanner.
    • BACKUP-NAME: Es el nombre de la copia de seguridad de Spanner.

    En la sección progress del resultado, se muestra el porcentaje de la operación que se completó. El resultado es similar al siguiente:

    done: true
    metadata:
    ...
    progress:
    - endTime: '2022-03-01T00:28:06.691403Z'
      progressPercent: 100
      startTime: '2022-03-01T00:28:04.221401Z'
    - endTime: '2022-03-01T00:28:17.624588Z'
      startTime: '2022-03-01T00:28:06.691403Z'
      progressPercent: 100
    ...

Si la operación tarda demasiado, puedes cancelarla. Para obtener más información, consulta Cómo cancelar una operación de copia de seguridad de larga duración.

Obtén información de copia de seguridad

Para obtener información sobre una copia de seguridad, ejecuta el siguiente comando:

gcloud spanner backups describe example-db-backup-6 --instance=test-instance

El resultado es similar al siguiente:

createTime: '2020-02-04T02:05:43.920377Z'
database: projects/my-project/instances/test-instance/databases/example-db
expireTime: '2021-02-04T02:05:43.268327Z'
name: projects/my-project/instances/test-instance/backups/example-db-backup-6
sizeBytes: '1000000000'
state: READY

Para obtener más detalles sobre este comando, consulta gcloud spanner backups describe.

Mostrar una lista de las copias de seguridad

Para enumerar todas las copias de seguridad en una instancia, ejecuta el siguiente comando:

gcloud spanner backups list --instance=test-instance

El resultado es similar al siguiente:

BACKUP               SOURCE_DATABASE  CREATION_TIME                EXPIRATION_TIME              STATE  BACKUP_SIZE_IN_BYTES  IN_USE_BY
example-db-backup-6  example-db       2020-02-04T02:05:43.920377Z  2021-02-04T02:05:43.268327Z  CREATING
example-db-backup-4  example-db       2020-02-04T01:21:20.873839Z  2021-02-04T01:21:20.530151Z  READY  32
example-db-backup-3  example-db       2020-02-03T23:59:18.936433Z  2021-02-03T23:59:18.203083Z  READY  32
example-db-backup-5  example-db       2020-02-03T23:48:06.259296Z  2021-02-03T23:48:05.830937Z  READY  32
example-db-backup-2  example-db       2020-01-30T19:49:00.616338Z  2021-01-30T19:49:00.283917Z  READY  32
example-db-backup-1  example-db       2020-01-30T19:47:09.492551Z  2021-01-30T19:47:09.097804Z  READY  32

Para limitar la lista, especifica la marca --filter. Por ejemplo, --filter="state:creating" enumera solo las copias de seguridad que aún se están creando. Para obtener más información sobre la sintaxis del filtro, consulta gcloud topic filter. Para obtener información sobre cómo filtrar copias de seguridad, consulta el campo filter en ListBackupsRequest.

Para obtener más detalles sobre este comando, consulta gcloud spanner backups list.

Actualiza los metadatos de copia de seguridad

Para actualizar la fecha de vencimiento de una copia de seguridad, haz lo siguiente:

gcloud spanner backups update-metadata example-db-backup-6 \
    --instance=test-instance --expiration-date=2020-05-05T00:00:00Z

El resultado es similar al siguiente:

createTime: '2020-02-04T02:05:43.920377Z'
database: projects/my-project/instances/test-instance/databases/example-db
expireTime: '2020-05-05T00:00:00Z'
name: projects/my-project/instances/test-instance/backups/example-db-backup-6
sizeBytes: '1000000000'
state: READY

Para obtener más detalles sobre este comando, consulta gcloud spanner backups update-metadata.

Borrar copia de seguridad

Para borrar una copia de seguridad, haz lo siguiente:

gcloud spanner backups delete example-db-backup-1 --instance=test-instance

Debes confirmar la operación:

You are about to delete backup [example-db-backup-1]

Do you want to continue (Y/n)?  Y

Deleted backup [example-db-backup-1].

Para obtener más detalles sobre este comando, consulta gcloud spanner backups delete.