Copia de seguridad y restablecimiento de bases de datos mediante gcloud

En esta página, se describe cómo usar la Copia de seguridad y restablecimiento de Cloud Spanner con la interfaz de línea de comandos de gcloud.

Requisitos

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

  • Ya configuraste el SDK de gcloud para usarlo con Cloud Spanner. Si no tienes experiencia en el uso de gcloud con Cloud Spanner, consulta Comienza a usar Cloud Spanner.

  • Ya configuraste gcloud 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.

Crea una copia de seguridad

Para crear una copia de seguridad llamada example-db-backup-6 y hacer que caduque en 1 año, haz lo siguiente:

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 las marcas --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 sobre cualquier comando.

A continuación, se muestra el resultado:

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.

En la siguiente sección, usaremos la operación de copia de seguridad para verificar el progreso de la copia de seguridad.

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

Muestra el progreso de una copia de seguridad

  1. Para seguir el progreso de una operación de copia de seguridad, usa gcloud spanner operations describe:

    gcloud spanner operations describe _auto_op_234567 \
        --instance=test-instance --backup=example-db-backup-6
    

    Este es el resultado:

    done: true
    metadata:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata
      database: projects/my-project/instances/test-instance/databases/example-db
      name: projects/my-project/instances/test-instance/backups/example-db-backup-6
      progress:
        endTime: '2020-02-04T02:07:59.089820Z'
        progressPercent: 100
        startTime: '2020-02-04T02:05:43.920377Z'
    name: projects/my-project/instances/test-instance/backups/example-db-backup-6/operations/_auto_op_234567
    response:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.Backup
      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
    
  2. Si no tienes el nombre de la operación, búscalo con gcloud spanner operations list:

    gcloud spanner operations list --instance=test-instance --type=BACKUP
    

    Notas de uso:

    • Para limitar la lista, especifica la marca --filter.

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

      Si deseas obtener información sobre la sintaxis de filtro, consulta gcloud topic filters. 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 entre mayúsculas y minúsculas.

    Este es el resultado:

    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
    

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

Para restablecer una base de datos, sigue estos pasos:

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 destino son diferentes, deben tener la misma configuración de instancia.
  • Si la base de datos de destino ya existe, la operación fallará.

Este es el resultado:

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

Para obtener más detalles sobre este comando, consulta gcloud spanner databases restore.

Muestra el restablecimiento y la optimización del progreso

  1. Para realizar un seguimiento del progreso de una operación de restablecimiento, usa gcloud spanner operations describe:

    gcloud spanner operations describe  _auto_op_bb8e360b256b04bf \
        --instance=test-instance --database=example-db-restored
    

    Este es el resultado:

    done: true
    metadata:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata
      backupInfo:
        backup: projects/my-project/instances/test-instance/backups/example-db-backup-6
        createTime: '2020-02-03T23:48:06.259296Z'
        sourceDatabase: projects/my-project/instances/test-instance/databases/example-db
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      optimizeDatabaseOperationName: projects/my-project/instances/test-instance/databases/example-db-restored/operations/_auto_op_7702f3f19fa99616
      progress:
        endTime: '2020-02-04T02:40:56.424382Z'
        progressPercent: 100
        startTime: '2020-02-04T02:35:30.683330Z'
      sourceType: BACKUP
    name: projects/my-project/instances/test-instance/databases/example-db-restored/operations/_auto_op_91ff1f270832a22b
    response:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.Database
      createTime: '2020-02-04T02:35:30.683330Z'
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      restoreInfo:
        backupInfo:
          backup: projects/my-project/instances/test-instance/backups/example-db-backup-6
          createTime: '2020-02-03T23:48:06.259296Z'
          sourceDatabase: projects/my-project/instances/test-instance/databases/example-db
        sourceType: BACKUP
      state: READY_OPTIMIZING
    

    En el resultado, podemos ver que la operación de restablecimiento está completa y ahora se encuentra en el estado de READY_OPTIMIZING, como se describe en Cómo funciona el restablecimiento. También tenemos optimizeDatabaseOperationName, que podemos usar para realizar un seguimiento del progreso de la operación de optimización.

  2. Para realizar un seguimiento del progreso de la operación de optimización, usa gcloud spanner operations describe:

    gcloud-testing spanner operations describe _auto_op_7702f3f19fa99616 \
        --instance=test-instance --database=example-db-restored
    

    Este es el resultado:

    done: true
    metadata:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      progress:
        endTime: '2020-02-04T22:11:21.731739Z'
        progressPercent: 100
        startTime: '2020-02-04T22:10:48.308090Z'
    name: projects/my-project/instances/test-instance/databases/example-db-restored/operations/_auto_op_7702f3f19fa99616
    response:
      '@type': type.googleapis.com/google.spanner.admin.database.v1.Database
      createTime: '2020-02-04T22:03:34.282186Z'
      name: projects/my-project/instances/test-instance/databases/example-db-restored
      restoreInfo:
        backupInfo:
          backup: projects/my-project/instances/test-instance/backups/example-db-backup-6
          createTime: '2020-02-03T23:48:06.259296Z'
          sourceDatabase: projects/my-project/instances/test-instance/databases/example-db
        sourceType: BACKUP
      state: READY
    
  3. Si no tienes el nombre de la operación de restablecimiento o de optimización, búscalo con gcloud spanner operations list. Si la base de datos restablecida no está en la misma instancia que la copia de seguridad, asegúrate de especificar la instancia de destino en la marca instance:

    gcloud spanner operations list --instance=test-instance \
        --type=DATABASE_RESTORE
    

    Este es el resultado:

    OPERATION_ID               DONE  @TYPE                             RESTORED_DATABASE    SOURCE_BACKUP        START_TIME                   END_TIME
    _auto_op_7702f3f19fa99616  True  OptimizeRestoredDatabaseMetadata  example-db-restored                       2020-02-04T02:40:56.424382Z  2020-02-04T02:41:37.765157Z
    _auto_op_91ff1f270832a22b  True  RestoreDatabaseMetadata           example-db-restored  example-db-backup-6  2020-02-04T02:35:30.683330Z  2020-02-04T02:40:56.424382Z
    

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

Este es el resultado:

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 lista de copias de seguridad

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

gcloud spanner backups list --instance=test-instance

Este es el resultado:

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. Si deseas obtener información sobre la sintaxis de filtro, consulta gcloud topic filters. 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

Este es el resultado:

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.