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

Cette page explique comment utiliser la sauvegarde et la restauration Spanner avec la Google Cloud CLI.

Prérequis

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

  • Vous avez déjà configuré gcloud CLI pour une utilisation avec Spanner. Si vous débutez avec Google Cloud CLI avec Spanner, consultez la page Premiers pas avec Spanner à l'aide de Google Cloud CLI.

  • Vous avez configuré Google Cloud CLI 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 et qu'elle expire dans un an, utilisez gcloud spanner backups create:

   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 de date , consultez 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 cette 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.

    Le résultat ressemble à ceci :

    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.
    

    Pour vérifier la progression d'une opération de sauvegarde, consultez la section Vérifier la progression de l'opération.

Copier une sauvegarde

Pour copier une sauvegarde dans une autre instance du même projet, procédez comme suit:

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

Pour copier une sauvegarde dans une autre instance d'un autre projet, procédez comme suit:

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

Remarques sur l'utilisation :

  • Si vous choisissez de copier la sauvegarde dans une autre instance du même projet, vous devez créer une instance (ou en disposer d'une à votre service) pour la sauvegarde copiée. Dans l'exemple précédent, backup-instance est utilisé. Vous ne pouvez pas créer d'instance lors de l'opération de copie de sauvegarde.
  • Si vous choisissez de copier la sauvegarde dans un autre projet, vous devez disposer d'un autre projet avec sa propre instance prête pour la sauvegarde copiée. Dans l'exemple précédent, backup-project est utilisé. Vous ne pouvez pas créer de projet dans le cadre de l'opération de copie de sauvegarde.
  • L'heure d'expiration de la sauvegarde doit être d'au moins six heures à compter du traitement de la requête de copie en cours et au maximum 366 jours après la sauvegarde source create_time.

Le résultat ressemble à ceci :

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'

Pour vérifier la progression d'une opération de copie, consultez la section Vérifier la progression de l'opération.

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

Pour restaurer une base de données, utilisez 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

Remarques sur l'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.

Le résultat ressemble à ceci :

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

Pour suivre la progression d'une opération de restauration, consultez la section Vérifier la progression de l'opération.

Vérifier la progression de l'opération

Utilisez gcloud spanner operations describe pour vérifier la progression d'une opération.

  1. Obtenez l'ID d'opération:

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

    Remplacez les éléments suivants :

    • INSTANCE-NAME par le nom de l'instance Spanner.
    • DATABASE-NAME par le nom de la base de données.

    Remarques sur l'utilisation :

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

      • --filter="metadata.name:example-db" ne répertorie que les opérations sur une base de données spécifique.
      • --filter="error:*" ne répertorie que les opérations de sauvegarde qui ont é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 le champ filter dans ListBackupOperationsRequest.

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

    Le résultat ressemble à ceci :

    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. Exécutez gcloud spanner operations describe :

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

    Remplacez les éléments suivants :

    • OPERATION-ID: ID de l'opération que vous souhaitez vérifier.
    • INSTANCE-NAME: nom de l'instance Spanner.
    • BACKUP-NAME: nom de la sauvegarde Spanner.

    La section progress de la sortie indique le pourcentage d'achèvement de l'opération. Le résultat ressemble à ceci :

    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 l'opération prend trop de temps, vous pouvez l'annuler. Pour en savoir plus, consultez la section Annuler une opération de sauvegarde de longue durée.

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

Le résultat ressemble à ceci :

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

Le résultat ressemble à ceci :

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

Le résultat ressemble à ceci :

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 section 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 section gcloud spanner backups delete.