Utiliser la récupération à un moment précis

Cette page explique comment utiliser la récupération à un moment précis pour restaurer votre instance Cloud SQL principale.

Pour en savoir plus sur la récupération à un moment précis, consultez la section Récupération à un moment précis.

Stockage de journaux pour la récupération à un moment précis

La récupération à un moment précis utilise l'archivage des journaux préalables (WAL, Write-Ahead Logging). Par défaut, la récupération à un moment précis est activée pour les instances Cloud SQL Enterprise Plus. Toutes ces instances stockent leurs journaux WAL dans Cloud Storage pour le nombre de jours de conservation des journaux que vous spécifiez.

Le 9 janvier 2023, nous avons lancé le stockage des journaux WAL pour la récupération à un moment précis dans Cloud Storage. Pour les instances Cloud SQL Enterprise, les conditions suivantes s'appliquent à la récupération à un moment précis :

  • Les nouvelles instances que vous créez en activant la récupération à un moment précis après ce lancement stockent leurs journaux dans Cloud Storage pendant le nombre de jours de conservation des journaux que vous spécifiez.
  • Les instances existantes pour lesquelles vous activez la récupération à un moment précis après ce lancement stockent également leurs journaux dans Cloud Storage.
  • Les journaux des instances existantes sur lesquelles la récupération à un moment précis était activée avant ce lancement continuent d'être stockés sur le disque.

Pour savoir si les journaux d'une instance sont stockés dans Cloud Storage, consultez la métrique bytes_used_by_data_type de l'instance. Si la valeur du type de données archived_wal_log est 0, les journaux de l'instance sont stockés dans Cloud Storage.

Après vous être connecté à une base de données de l'instance à l'aide d'un client PostgreSQL tel que psql ou pgAdmin, exécutez la commande suivante : show archive_command. Si des journaux WAL sont archivés dans Cloud Storage, -async_archive -remote_storage s'affiche.

Les journaux des autres instances existantes sur lesquelles la récupération à un moment précis est activée continuent d'être conservés sur le disque. La modification du stockage des journaux dans Cloud Storage sera disponible ultérieurement.

Si les journaux sont stockés dans Cloud Storage, ils sont importés par Cloud SQL toutes les cinq minutes ou moins. Par conséquent, si une instance Cloud SQL est disponible, vous pouvez en récupérer la version la plus récente. Toutefois, si l'instance est indisponible, l'objectif de point de récupération est généralement de cinq minutes ou moins. Utilisez l'API pour vérifier la dernière heure à laquelle vous pouvez restaurer l'instance et effectuer une récupération à ce moment précis.

Les journaux préalables utilisés pour la récupération à un moment précis sont automatiquement supprimés, ainsi que leur sauvegarde automatique associée, généralement après que la valeur définie pour transactionLogRetentionDays soit atteinte. Il s'agit du nombre de jours de journaux de transactions que Cloud SQL conserve pour la récupération à un moment précis. Pour l'édition Cloud SQL Enterprise Plus, le nombre de jours de journaux de transactions conservés peut être compris entre 1 et 35. Pour Cloud SQL Enterprise, la valeur peut être comprise entre 1 et 7.

Lorsque vous restaurez une sauvegarde sur une instance Cloud SQL avant d'activer la récupération à un moment précis, vous perdez les journaux WAL permettant la récupération à un moment précis.

Pour les instances où la clé de chiffrement gérée par le client (CMEK) est activée, les journaux préalables sont chiffrés à l'aide de la dernière version de CMEK. Pour effectuer une restauration, toutes les versions de la clé les plus récentes correspondant au nombre de jours configurés pour le paramètre retained-transaction-log-days doivent être disponibles.

Pour les instances disposant de journaux préalables stockés dans Cloud Storage, les journaux sont stockés dans la même région que l'instance principale. Cet espace de stockage des journaux (jusqu'à 35 jours pour Cloud SQL Enterprise Plus et sept jours pour Cloud SQL Enterprise, la durée maximale pour la récupération à un moment précis) ne génère aucun coût supplémentaire par instance.

Si la récupération à un moment précis est activée sur votre instance et si la taille de vos journaux préalables sur le disque pose problème:

  • Vous pouvez désactiver la récupération à un moment précis et la réactiver pour vous assurer que les nouveaux journaux sont stockés dans Cloud Storage. Cependant, tous les journaux préalables existants sont supprimés.

  • Vous pouvez augmenter l'espace de stockage disponible sur l'instance. Sachez toutefois qu'une augmentation importante de l'espace disque occupé par vos journaux préalables peut être temporaire.

  • Nous vous recommandons d'activer l'augmentation automatique de l'espace de stockage pour éviter tout problème de stockage inattendu. Cette recommandation ne s'applique que si la récupération à un moment précis est activée sur votre instance et que vos journaux sont stockés sur le disque.

  • Vous pouvez désactiver la récupération à un moment précis si vous souhaitez supprimer les journaux et récupérer de l'espace de stockage. La réduction des journaux préalables ne réduit pas la taille du disque provisionné pour l'instance.

  • Les journaux sont supprimés définitivement une fois par jour, et non de manière continue. Si vous définissez la durée de conservation des journaux sur une valeur de deux jours, cela signifie qu'au moins deux jours et au plus trois jours de journaux sont conservés. Nous vous recommandons de définir le nombre de sauvegardes à une valeur correspondant à la durée de conservation des journaux plus un, afin de garantir un minimum de jours spécifiés de rétention des journaux.

Activer la récupération à un moment précis

Lorsque vous créez une instance dans Google Cloud Console, les options de sauvegardes automatisées et d'activation de la récupération à un moment précis sont automatiquement activées.

La procédure suivante permet d'activer la récupération à un moment précis sur une instance principale existante.

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Ouvrez le menu "Autres actions" Icône Plus pour l'instance sur laquelle vous souhaitez activer la récupération à un moment précis, puis cliquez sur Modifier.
  3. Sous Personnaliser votre instance, développez la section Protection des données.
  4. Cochez la case Activer la récupération à un moment précis.
  5. Développez les options avancées.
  6. Indiquez le nombre de jours de conservation des journaux, compris entre 1 et 35 pour l'édition Cloud SQL Enterprise Plus, ou entre 1 et 7 pour l'édition Cloud SQL Enterprise.
  7. Cliquez sur Enregistrer.

gcloud

  1. Affichez la présentation de l'instance :
    gcloud sql instances describe INSTANCE_NAME
    
  2. Si la mention enabled: false s'affiche dans la section backupConfiguration, activez les sauvegardes planifiées :
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM
    

    Spécifiez le paramètre backup-start-time au format 24 heures dans le fuseau horaire UTC ± 00.

  3. Activer la récupération à un moment précis
    gcloud sql instances patch INSTANCE_NAME \
    --enable-point-in-time-recovery
    

    Si vous activez la récupération à un moment précis sur une instance principale, vous pouvez également configurer le nombre de jours pendant lesquels vous souhaitez conserver les journaux de transactions en ajoutant le paramètre suivant :

    --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
    
  4. Confirmez la modification :
    gcloud sql instances describe INSTANCE_NAME

    Dans la section backupConfiguration, vous voyez le message pointInTimeRecoveryEnabled: true s'afficher si la modification a réussi.

Terraform

Pour activer la récupération à un moment précis, utilisez une ressource Terraform.

resource "google_sql_database_instance" "postgres_instance_pitr" {
  name             = ""
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Appliquer les modifications

Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.

Préparer Cloud Shell

  1. Lancez Cloud Shell.
  2. Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.

    Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.

Préparer le répertoire

Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).

  1. Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension .tf, par exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.

    Copiez l'exemple de code dans le fichier main.tf que vous venez de créer.

    Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
    terraform init

    Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option -upgrade :

    terraform init -upgrade

Appliquer les modifications

  1. Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
    terraform plan

    Corrigez les modifications de la configuration si nécessaire.

  2. Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply

    Attendez que Terraform affiche le message "Apply completed!" (Application terminée).

  3. Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.

Supprimer les modifications

Pour supprimer vos modifications, procédez comme suit :

  1. Pour désactiver la protection contre la suppression, définissez l'argument deletion_protection sur false dans le fichier de configuration Terraform.
    deletion_protection =  "false"
  2. Appliquez la configuration Terraform mise à jour en exécutant la commande suivante et en saisissant yes lorsque vous y êtes invité :
    terraform apply
  1. Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant yes à l'invite :

    terraform destroy

REST v1

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • INSTANCE_NAME : nom de l'instance principale ou de l'instance répliquée avec accès en lecture que vous configurez pour la haute disponibilité.
  • START_TIME : heure (en heures et en minutes).

Méthode HTTP et URL :

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Corps JSON de la requête :

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "START_TIME",
      "enabled": true,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

REST v1beta4

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : ID ou numéro de projet du projet Google Cloud contenant l'instance.
  • INSTANCE_NAME : nom de l'instance principale ou de l'instance répliquée avec accès en lecture que vous configurez pour la haute disponibilité.
  • START_TIME : heure (en heures et en minutes).

Méthode HTTP et URL :

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

Corps JSON de la requête :

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "START_TIME",
      "enabled": true,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

Obtenir le dernier délai de récupération

Pour une instance disponible, vous pouvez effectuer la récupération à un moment précis jusqu'à l'heure la plus récente. Si l'instance n'est pas disponible et que les journaux d'instance sont stockés dans Cloud Storage, vous pouvez récupérer la dernière heure de récupération et effectuer la récupération à un moment précis jusqu'à ce moment-là. Dans les deux cas, vous pouvez restaurer l'instance dans une autre zone en indiquant une valeur pour la zone de votre choix.

gcloud

Obtenez la dernière heure à laquelle vous pouvez récupérer une instance Cloud SQL qui n'est pas disponible.

Remplacez INSTANCE_NAME par le nom de l'instance que vous interrogez.

gcloud sql instances get-latest-recovery-time INSTANCE_NAME

REST v1

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID du projet
  • INSTANCE_NAME : nom de l'instance pour laquelle vous interrogez l'heure de la dernière récupération

Méthode HTTP et URL :

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "kind": "sql#getLatestRecoveryTime",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

REST v1beta4

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : ID du projet
  • INSTANCE_NAME : nom de l'instance pour laquelle vous interrogez l'heure de la dernière récupération

Méthode HTTP et URL :

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "kind": "sql#getLatestRecoveryTime",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

Effectuer une récupération à un moment précis

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Ouvrez le menu "Autres actions" Icône Autres actions pour l'instance que vous souhaitez récupérer, puis cliquez sur Créer un clone.
  3. Si vous le souhaitez, sur la page Créer un clone, mettez à jour l'ID du nouveau clone.
  4. Sélectionnez Cloner l'instance à un moment antérieur.
  5. Saisissez la date et l'heure de la récupération à un moment précis.
  6. Cliquez sur Créer un clone.

gcloud

Créez un clone à l'aide de la récupération à un moment précis.

Remplacez les éléments suivants :

  • SOURCE_INSTANCE_NAME : nom de l'instance à partir de laquelle vous effectuez la restauration.
  • NEW_INSTANCE_NAME : nom du clone.
  • TIMESTAMP : fuseau horaire UTC de l'instance source au format RFC 3339. Exemple : 2012-11-15T16:19:00.094Z.
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time 'TIMESTAMP'

REST v1

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • project-id : ID du projet
  • target-instance-id : ID de l'instance cible
  • source-instance-id : ID de l'instance source
  • restore-timestamp : moment jusqu'auquel effectuer la restauration

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone

Corps JSON de la requête :

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

REST v1beta4

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • project-id : ID du projet
  • target-instance-id : ID de l'instance cible
  • source-instance-id : ID de l'instance source
  • restore-timestamp : moment jusqu'auquel effectuer la restauration

Méthode HTTP et URL :

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone

Corps JSON de la requête :

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

Désactiver la récupération à un moment précis

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Ouvrez le menu "Autres actions" Icône Plus pour l'instance que vous souhaitez désactiver, puis sélectionnez Modifier.
  3. Sous Personnaliser votre instance, développez la section Protection des données.
  4. Désactivez l'option Activer la récupération à un moment précis.
  5. Cliquez sur Save (Enregistrer).
  6. Sur la page Présentation de l'instance, sous Configuration, le paramètre de récupération à un moment précis est répertorié comme désactivé.

gcloud

  1. Désactivez la récupération à un moment précis :
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-point-in-time-recovery
  2. Confirmez la modification :
    gcloud sql instances describe INSTANCE_NAME
    

    Dans la section backupConfiguration, vous voyez le message pointInTimeRecoveryEnabled: false s'afficher si la modification a réussi.

REST v1

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • project-id : ID du projet
  • instance-id : ID de l'instance.

Méthode HTTP et URL :

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Corps JSON de la requête :

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "pointInTimeRecoveryEnabled": false
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

REST v1beta4

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • project-id : ID du projet
  • instance-id : ID de l'instance.

Méthode HTTP et URL :

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Corps JSON de la requête :

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "pointInTimeRecoveryEnabled": false
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

Définir la durée de conservation des journaux de transaction

Pour définir le nombre de jours de conservation des journaux préalables, procédez comme suit :

Console

  1. Dans Google Cloud Console, accédez à la page Instances Cloud SQL.

    Accéder à la page Instances Cloud SQL

  2. Ouvrez le menu "Autres actions" Icône Plus pour l'instance pour laquelle vous souhaitez définir les journaux de transactions et sélectionnez Modifier.
  3. Sous Personnaliser votre instance, développez la section Protection des données.
  4. Dans la section Activer la récupération à un moment précis, développez Options avancées.
  5. Indiquez le nombre de jours de conservation des journaux, compris entre 1 et 35 pour l'édition Cloud SQL Enterprise Plus, ou entre 1 et 7 pour l'édition Cloud SQL Enterprise.
  6. Cliquez sur Enregistrer.

gcloud

Modifiez l'instance pour définir le nombre de jours de conservation des journaux préalables.

Remplacez les éléments suivants :

  • INSTANCE-NAME : nom de l'instance sur laquelle vous souhaitez définir les journaux de transactions.
  • DAYS-TO-RETAIN : nombre de jours de journaux de transactions à conserver. La plage valide est comprise entre 1 et 35 (valeur par défaut : 15) pour l'édition Cloud SQL Enterprise Plus, et entre 1 et 7 (valeur par défaut : 7) pour l'édition Cloud SQL Enterprise. La valeur par défaut est utilisée si elle n'est pas spécifiée. Valable uniquement si la récupération à un moment précis est activée. Conserver davantage de jours de journaux de transactions nécessite une capacité de stockage plus importante.
gcloud sql instances patch INSTANCE-NAME 
--retained-transaction-log-days=DAYS-TO-RETAIN

REST v1beta4

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • days-to-retain : nombre de jours pendant lesquels les journaux de transactions sont conservés (entre 1 et 7)
  • project-id : ID du projet
  • instance-id : ID de l'instance.

Méthode HTTP et URL :

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Corps JSON de la requête :

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "days-to-retain"
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

Étapes suivantes