Esegui il backup e ripristina i database utilizzando gcloud CLI

Questa pagina descrive come utilizzare il backup e il ripristino di Spanner con Google Cloud CLI.

Prerequisiti

Gli esempi in questa pagina fanno i seguenti presupposti:

  • Hai già configurato l'interfaccia a riga di comando gcloud CLI per l'utilizzo con Spanner. Se non hai mai utilizzato Google Cloud CLI con Spanner, consulta la guida introduttiva a Spanner con Google Cloud CLI.

  • Hai configurato Google Cloud CLI con un progetto predefinito. Ad esempio:

    gcloud config set core/project my-project
    
  • Hai un'istanza denominata test-instance e un database denominato example-db.

Crea backup

Per creare un backup denominato example-db-backup-6 e fare in modo che scada dopo 1 anno, utilizza gcloud spanner backups create:

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

Di seguito sono riportate alcune note sull'utilizzo:

  • Per impostare la data di scadenza del backup, specifica il flag --retention-period o --expiration-date. Per informazioni sulla sintassi delle date , consulta gcloud topic datetimes.
  • Il nome del backup deve essere univoco nell'istanza.
  • Il comando viene restituito immediatamente a causa del flag --async. Senza il flag, il comando attende il completamento dell'operazione di backup.
  • Specifica il flag --help per ricevere assistenza per qualsiasi comando.

    L'output è simile al seguente:

    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.
    

    Per verificare l'avanzamento di un'operazione di backup, consulta Controllare l'avanzamento dell'operazione.

Copiare un backup

Per copiare un backup in un'istanza diversa nello stesso progetto:

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

Per copiare un backup in un'istanza diversa di un altro progetto:

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

Note sull'utilizzo:

  • Se scegli di copiare il backup in un'istanza diversa nello stesso progetto, devi creare una nuova istanza (o averne una pronta) per il backup copiato. Nell'esempio precedente, viene utilizzato backup-instance. Non puoi creare una nuova istanza nell'ambito dell'operazione di copia di backup.
  • Se scegli di copiare il backup in un altro progetto, devi avere un altro progetto con la propria istanza pronta per il backup copiato. Nell'esempio precedente, viene utilizzato backup-project. Non puoi creare un nuovo progetto nell'ambito dell'operazione di copia di backup.
  • La scadenza del backup deve essere di almeno 6 ore dopo l'elaborazione della richiesta di copia corrente e di massimo 366 giorni dopo il giorno create_time del backup di origine.

L'output è simile al seguente:

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'

Per verificare l'avanzamento di un'operazione di copia, consulta Controllare l'avanzamento dell'operazione.

Ripristina un database da un backup

Per ripristinare un database, utilizza 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

Note sull'utilizzo:

  • Il comando viene restituito immediatamente a causa del flag --async. Senza il flag, il comando attende il completamento dell'operazione di ripristino.
  • Se le istanze di origine e di destinazione sono diverse, devono avere la stessa configurazione dell'istanza.
  • Se il database di destinazione esiste già, l'operazione non andrà a buon fine.

L'output è simile al seguente:

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

Per monitorare l'avanzamento di un'operazione di ripristino, vedi Controllare l'avanzamento dell'operazione.

Controlla l'avanzamento dell'operazione

Utilizza gcloud spanner operations describe per verificare l'avanzamento di un'operazione.

  1. Recupera l'ID operazione:

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

    Sostituisci quanto segue:

    • INSTANCE-NAME con il nome dell'istanza Spanner.
    • DATABASE-NAME con il nome del database.

    Note sull'utilizzo:

    • Per limitare l'elenco, specifica il flag --filter. Ad esempio:

      • --filter="metadata.name:example-db" elenca solo le operazioni su un database specifico.
      • In --filter="error:*" sono elencate solo le operazioni di backup non riuscite.

      Per informazioni sulla sintassi dei filtri, consulta la pagina relativa ai filtri degli argomenti gcloud. Per informazioni su come filtrare le operazioni di backup, consulta il campo filter in ListBackupOperationsRequest.

    • Il flag --type non è sensibile alle maiuscole.

    L'output è simile al seguente:

    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. Esecuzione gcloud spanner operations describe:

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

    Sostituisci quanto segue:

    • OPERATION-ID: l'ID dell'operazione che vuoi controllare.
    • INSTANCE-NAME: nome dell'istanza Spanner.
    • BACKUP-NAME: il nome del backup di Spanner.

    La sezione progress nell'output mostra la percentuale dell'operazione completata. L'output è simile al seguente:

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

Se l'operazione richiede troppo tempo, puoi annullarla. Per maggiori informazioni, consulta Annullare un'operazione di backup a lunga esecuzione.

Recuperare informazioni di backup

Per ottenere informazioni su un backup:

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

L'output è simile al seguente:

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

Per maggiori dettagli su questo comando, vedi gcloud spanner backups describe.

Elenco dei backup

Per elencare tutti i backup in un'istanza:

gcloud spanner backups list --instance=test-instance

L'output è simile al seguente:

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

Per limitare l'elenco, specifica il flag --filter. Ad esempio --filter="state:creating" elenca solo i backup ancora in fase di creazione. Per informazioni sulla sintassi dei filtri, consulta la pagina relativa ai filtri degli argomenti gcloud. Per informazioni su come filtrare i backup, consulta il campo filter in ListBackupsRequest.

Per maggiori dettagli su questo comando, vedi gcloud spanner backups list.

Aggiorna metadati di backup

Per aggiornare la data di scadenza di un backup:

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

L'output è simile al seguente:

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

Per maggiori dettagli su questo comando, consulta gcloud spanner backups update-metadata.

Elimina backup

Per eliminare un backup:

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

Devi confermare l'operazione:

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

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

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

Per maggiori dettagli su questo comando, vedi gcloud spanner backups delete.