Sauvegarder et restaurer des bases de données à l'aide de gcloud

Cette page explique comment utiliser la fonctionnalité Sauvegarde et restauration de Cloud Spanner avec l'interface de ligne de commande gcloud.

Prérequis

Les exemples présentés sur cette page partent des principes suivants :

  • Vous avez déjà configuré le SDK gcloud pour une utilisation avec Cloud Spanner. Si vous débutez avec Cloud Spanner sur gcloud, consultez la page Premiers pas avec Cloud Spanner sur gcloud.

  • Vous avez configuré gcloud avec un projet par défaut. Exemple :

    gcloud config set core/project my-project
    
  • Vous disposez d'une instance nommée test-instance et d'une base de données nommée example-db.

Créer une sauvegarde

Pour créer une sauvegarde nommée example-db-backup-6 qui expire dans un an :

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

Voici quelques remarques d'utilisation :

  • Pour définir la date d'expiration de la sauvegarde, spécifiez l'option --retention-period ou --expiration-date. Pour en savoir plus sur la syntaxe des dates, consultez la page gcloud topic datetimes.
  • Le nom de la sauvegarde doit être unique dans l'instance.
  • La commande répond immédiatement en raison de l'option --async. Sans l'option, la commande attend la fin de l'opération de sauvegarde.
  • Spécifiez l'option --help pour obtenir de l'aide pour n'importe quelle commande.

Voici les résultats obtenus :

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.

Dans la section suivante, nous utiliserons l'opération de sauvegarde pour suivre la progression de la sauvegarde.

Pour en savoir plus sur cette commande, consultez la page gcloud spanner backups create.

Afficher la progression de la sauvegarde

  1. Pour suivre la progression d'une opération de sauvegarde, utilisez gcloud spanner operations describe :

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

    Voici le résultat :

    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 vous ne connaissez pas le nom de l'opération, recherchez-le à l'aide de gcloud spanner operations list :

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

    Consignes d'utilisation :

    • Pour limiter la liste, spécifiez l'option --filter.

      • Par exemple, --filter="metadata.name:example-db" répertorie uniquement les opérations de sauvegarde d'une base de données spécifique.
      • Par exemple, --filter="error:*" répertorie uniquement les opérations de sauvegarde ayant échoué.

      Pour en savoir plus sur la syntaxe des filtres, consultez la page gcloud topic filters. Pour en savoir plus sur le filtrage des opérations de sauvegarde, consultez les informations sur le champ filter dans la section ListBackupOperationsRequest.

    • L'option --type n'est pas sensible à la casse.

    Voici le résultat :

    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
    

Restaurer une base de données à partir d'une sauvegarde

Pour restaurer une base de données, procédez comme suit :

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

Consignes d'utilisation :

  • La commande répond immédiatement en raison de l'option --async. Sans l'option, la commande attend la fin de l'opération de restauration.
  • Si les instances source et de destination sont différentes, elles doivent avoir la même configuration d'instance.
  • Si la base de données de destination existe déjà, l'opération échouera.

Voici le résultat :

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

Pour en savoir plus sur cette commande, consultez la page gcloud spanner databases restore.

Afficher la restauration et optimiser la progression

  1. Pour suivre la progression d'une opération de restauration, utilisez gcloud spanner operations describe :

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

    Voici le résultat :

    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
    

    À partir du résultat, nous constatons que l'opération de restauration est terminée et qu'elle est désormais à l'état READY_OPTIMIZING, comme décrit dans la section Fonctionnement de la restauration. Le résultat affiche également optimizeDatabaseOperationName, que nous pouvons utiliser pour suivre la progression de l'opération d'optimisation.

  2. Pour suivre la progression de l'opération d'optimisation, utilisez gcloud spanner operations describe :

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

    Voici le résultat :

    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 vous ne connaissez pas le nom de l'opération de restauration ou d'optimisation, recherchez-le à l'aide de la commande gcloud spanner operations list. Si la base de données restaurée ne se trouve pas dans la même instance que la sauvegarde, veillez à spécifier l'instance de destination dans l'option instance :

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

    Voici le résultat :

    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
    

Obtenir des informations sur la sauvegarde

Pour obtenir des informations sur une sauvegarde, exécutez la commande suivante :

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

Voici le résultat :

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

Pour en savoir plus sur cette commande, consultez la page gcloud spanner backups describe.

Répertorier des sauvegardes

Pour répertorier toutes les sauvegardes d'une instance, exécutez la commande suivante :

gcloud spanner backups list --instance=test-instance

Voici le résultat :

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

Pour limiter la liste, spécifiez l'option --filter. Par exemple, --filter="state:creating" répertorie uniquement les sauvegardes toujours en cours de création. Pour en savoir plus sur la syntaxe des filtres, consultez la page gcloud topic filters. Pour en savoir plus sur le filtrage des sauvegardes, consultez le champ filter dans ListBackupsRequest.

Pour en savoir plus sur cette commande, consultez la page gcloud spanner backups list.

Mettre à jour les métadonnées de la sauvegarde

Pour mettre à jour la date d'expiration d'une sauvegarde :

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

Voici le résultat :

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

Pour en savoir plus sur cette commande, consultez la page gcloud spanner backups update-metadata.

Supprimer une sauvegarde

Pour supprimer une sauvegarde, exécutez la commande suivante :

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

Vous devez confirmer l'opération :

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

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

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

Pour en savoir plus sur cette commande, consultez la page gcloud spanner backups delete.