Como fazer backup e restaurar bancos de dados usando o gcloud

Nesta página, descrevemos como usar o Backup e restauração do Cloud Spanner com a interface de linha de comando gcloud.

Pré-requisitos

Os exemplos nesta página fazem as seguintes suposições:

  • Você já configurou o SDK do gcloud para uso com o Cloud Spanner. Se você estiver começando a usar o gcloud com o Cloud Spanner, consulte Primeiros passos com o Cloud Spanner usando o gcloud.

  • Você já configurou o gcloud com um projeto padrão. Exemplo:

    gcloud config set core/project my-project
    
  • Você já tem uma instância chamada test-instance e um banco de dados chamado example-db.

Criar backup

Para criar um backup chamado example-db-backup-6 e fazer com que ele expire em um ano:

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

Veja algumas observações de uso:

  • Para definir a data de validade do backup, especifique a sinalização --retention-period ou --expiration-date. Para informações sobre a sintaxe de data, consulte Tópico sobre datas e horas no gcloud.
  • O nome do backup precisa ser exclusivo na instância.
  • O comando retorna imediatamente por causa da sinalização --async. Sem a sinalização, o comando aguardará a conclusão da operação de backup.
  • Especifique a sinalização --help para receber ajuda para qualquer comando.

Veja o 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.

Na próxima seção, usaremos a operação de backup para verificar o progresso do backup.

Para mais detalhes sobre esse comando, consulte "spanner backups create".

Mostrar progresso do backup

  1. Para acompanhar o progresso de uma operação de backup, use cloud spanner operations describe:

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

    Esta é a saída:

    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. Se você não tiver o nome da operação, encontre-o usando gcloud spanner operations list:

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

    Observações sobre o uso:

    • Para limitar a lista, especifique a sinalização --filter.

      • Por exemplo, --filter="metadata.name:example-db" lista apenas as operações de backup em um banco de dados específico.
      • Por exemplo, --filter="error:*" lista apenas as operações de backup que falharam.

      Para informações sobre a sintaxe do filtro, consulte gcloud topic filtros. Para informações sobre como filtrar operações de backup, consulte o campo filter em ListBackupOperationsRequest.

    • A sinalização --type não diferencia maiúsculas de minúsculas.

    Esta é a saída:

    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
    

Restaurar um banco de dados a partir de um backup

Para restaurar um banco de dados:

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

Observações sobre o uso:

  • O comando retorna imediatamente por causa da sinalização --async. Sem a sinalização, o comando aguardará a conclusão da operação de restauração.
  • Se as instâncias de origem e de destino forem diferentes, elas precisarão ter a mesma configuração de instância.
  • Se o banco de dados de destino já existir, a operação falhará.

Esta é a saída:

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

Para mais detalhes sobre esse comando, consulte gcloud spanner databases restore.

Mostrar restauração e otimização do progresso

  1. Para acompanhar o progresso de uma operação de restauração, use gcloud spanner operations describe:

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

    Esta é a saída:

    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
    

    A partir da saída, podemos ver que a operação de restauração está concluída e agora está no estado READY_OPTIMIZING, conforme descrito em Como a restauração funciona. Também recebemos optimizeDatabaseOperationName, que podemos usar para rastrear o progresso da operação de otimização.

  2. Para acompanhar o progresso da operação de otimização, use gcloud spanner operations describe:

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

    Esta é a saída:

    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. Se você não tiver o nome da operação de restauração ou otimização, encontre-a usando gcloud spanner operations list. Se o banco de dados restaurado não estiver na mesma instância do backup, especifique a instância de destino na sinalização instance:

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

    Esta é a saída:

    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
    

Receber informações de backup

Para receber informações sobre um backup:

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

Esta é a saída:

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 mais detalhes sobre esse comando, consulte gcloud spanner backups describe.

Listar backups

Para listar todos os backups em uma instância:

gcloud spanner backups list --instance=test-instance

Esta é a saída:

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 a lista, especifique a sinalização --filter. Por exemplo, --filter="state:creating" lista apenas os backups que ainda estão sendo criados. Para informações sobre a sintaxe do filtro, consulte gcloud topic filtros. Para informações sobre como filtrar backups, consulte o campo filter em ListBackupsRequest.

Para mais detalhes sobre esse comando, consulte gcloud spanner backups list.

Atualizar metadados de backup

Para atualizar a data de validade de um backup:

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

Esta é a saída:

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 mais detalhes sobre esse comando, consulte gcloud spanner backups update-metadata.

Excluir backup

Para excluir um backup:

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

Confirme a operação:

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 mais detalhes sobre esse comando, consulte gcloud spanner backups delete.