Utilizzare il recupero point-in-time (PITR)

Questa pagina descrive come utilizzare il recupero point-in-time (PITR) per ripristinare l'istanza Cloud SQL principale.

Per scoprire di più sul PITR, consulta PITR.

Per impostazione predefinita, il PITR viene abilitato quando crei un'istanza della versione Cloud SQL Enterprise Plus, indipendentemente dal fatto che venga creata utilizzando la console Google Cloud, gcloud CLI, Terraform o l'API Cloud SQL Admin.

Se crei un'istanza della versione Cloud SQL Enterprise nella console Google Cloud, il PITR viene abilitato per impostazione predefinita. In caso contrario, se crei l'istanza utilizzando gcloud CLI, Terraform o l'API Cloud SQL Admin, devi abilitare manualmente PITR.

Archiviazione log per PITR

Cloud SQL utilizza l'archiviazione WAL (write-ahead logging) per PITR.

Il 9 gennaio 2023 abbiamo lanciato l'archiviazione dei log write-ahead per PITR in Cloud Storage. Da questo lancio, si applicano le seguenti condizioni:

  • Tutte le istanze della versione Cloud SQL Enterprise Plus archiviano i log write-ahead in Cloud Storage. Solo le istanze della versione Cloud SQL Enterprise Plus di cui esegui l'upgrade dalla versione Cloud SQL Enterprise e con PITR abilitato prima del 9 gennaio 2023 continuano ad archiviare i propri log su disco.
  • Le istanze della versione Cloud SQL Enterprise create con PITR abilitato prima del 9 gennaio 2023 continueranno ad archiviare i log su disco.
  • Tutte le istanze della versione Cloud SQL Enterprise che crei con PITR abilitato dopo il 9 gennaio 2023 archiviano i log in Cloud Storage.

Per le istanze che archiviano i log write-ahead solo su disco, puoi spostare i log dal disco a Cloud Storage disattivando prima e poi riattivando PITR.

Periodo di conservazione dei log

Per verificare se un'istanza archivia i log utilizzati per PITR in Cloud Storage, utilizza Controlla la posizione di archiviazione dei log delle transazioni utilizzati per PITR.

Dopo aver utilizzato un client PostgreSQL come psql o pgAdmin per connetterti a un database dell'istanza, esegui questo comando: show archive_command. Se dei log write-ahead sono archiviati in Cloud Storage, vedrai -async_archive -remote_storage.

I log di tutte le altre istanze esistenti per cui è abilitato PITR continuano a essere archiviati su disco. La modifica all'archiviazione dei log in Cloud Storage è disponibile in un secondo momento.

Se i log sono archiviati in Cloud Storage, Cloud SQL carica i log ogni cinque minuti o meno. Di conseguenza, se un'istanza di Cloud SQL è disponibile, può essere recuperata all'ultima data. Tuttavia, se l'istanza non è disponibile, il Recovery Point Objective è in genere di cinque minuti o meno. Utilizza gcloud CLI o l'API Admin per verificare l'ora più recente in cui puoi ripristinare l'istanza ed eseguire il ripristino fino a quel momento.

I log write-ahead utilizzati con PITR vengono eliminati automaticamente con il backup automatico associato, il che in genere avviene una volta soddisfatto il valore impostato per transactionLogRetentionDays. Questo è il numero di giorni di giorni di log delle transazioni che Cloud SQL conserva per PITR. Per la versione Cloud SQL Enterprise Plus, il numero di giorni di giorni di conservazione dei log delle transazioni può essere impostato tra 1 e 35, mentre per la versione Cloud SQL Enterprise il valore può essere impostato da 1 a 7.

Quando ripristini un backup su un'istanza Cloud SQL prima di abilitare PITR, perderai i log write-ahead che consentono l'operabilità di PITR.

Per le istanze abilitate per la chiave di crittografia gestita dal cliente (CMEK), i log write-ahead vengono criptati utilizzando la versione più recente di CMEK. Per eseguire un ripristino, dovrebbero essere disponibili tutte le versioni della chiave più recenti per il numero di giorni configurati per il parametro retained-transaction-log-days.

Per le istanze con log write-ahead archiviati in Cloud Storage, i log vengono archiviati nella stessa regione dell'istanza principale. Questa archiviazione dei log (fino a 35 giorni per la versione Cloud SQL Enterprise Plus e sette giorni per la versione Cloud SQL Enterprise, la lunghezza massima per il PITR) non genera costi aggiuntivi per istanza.

Utilizzo dei log e del disco

Se nell'istanza è abilitato PITR e se la dimensione dei log write-ahead su disco causa un problema per l'istanza:

  • Puoi disabilitare il PITR e riabilitarlo per assicurarti che i nuovi log vengano archiviati in Cloud Storage nella stessa regione dell'istanza. Tuttavia, eventuali log write-ahead esistenti vengono eliminati, pertanto non è possibile eseguire un ripristino point-in-time prima della data in cui è stato riattivato PITR.

  • Puoi aumentare la dimensione dello spazio di archiviazione dell'istanza. Tuttavia, l'aumento delle dimensioni del log write-ahead nell'utilizzo del disco potrebbe essere temporaneo.

  • Ti consigliamo di abilitare l' aumento automatico dello spazio di archiviazione per evitare problemi imprevisti. Questo suggerimento si applica solo se nell'istanza è abilitato PITR e se i log sono archiviati su disco.

  • Puoi disabilitare il PITR se vuoi eliminare i log e recuperare lo spazio di archiviazione. La riduzione dei log write-ahead utilizzati non riduce la dimensione del disco di cui è stato eseguito il provisioning per l'istanza.

  • I log vengono eliminati definitivamente una volta al giorno, non in modo continuo. Se imposti la conservazione dei log su 2 giorni, vengono conservati almeno due giorni di log e un massimo di tre giorni di log. Ti consigliamo di impostare il numero di backup su uno superiore ai giorni di conservazione dei log per garantire un minimo di giorni specificati di conservazione dei log.

Abilita PITR

Quando crei una nuova istanza nella console Google Cloud, sia Backup automatici sia Abilita il recupero point-in-time vengono abilitati automaticamente.

La procedura seguente abilita il PITR su un'istanza principale esistente.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Apri il menu Altre azioni Icona Altre azioni. per l'istanza su cui vuoi abilitare il PITR e fai clic su Modifica.
  3. In Personalizza la tua istanza, espandi la sezione Protezione dei dati.
  4. Seleziona la casella di controllo Abilita il recupero point-in-time.
  5. Espandi Opzioni avanzate.
  6. Inserisci il numero di giorni per la conservazione dei log, da 1 a 35 per la versione Cloud SQL Enterprise Plus o da 1 a 7 per la versione Cloud SQL Enterprise.
  7. Fai clic su Salva.

gcloud

  1. Visualizza la panoramica dell'istanza:
    gcloud sql instances describe INSTANCE_NAME
    
  2. Se vedi enabled: false nella sezione backupConfiguration, abilita i backup pianificati:
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM
    

    Specifica il parametro backup-start-time utilizzando l'ora a 24 ore nel fuso orario UTC±00.

  3. Abilita PITR:
    gcloud sql instances patch INSTANCE_NAME \
    --enable-point-in-time-recovery
    

    Se abiliti il PITR su un'istanza principale, puoi anche configurare il numero di giorni per cui vuoi conservare i log delle transazioni aggiungendo il seguente parametro:

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

    Nella sezione backupConfiguration, viene visualizzato pointInTimeRecoveryEnabled: true se la modifica è riuscita.

Terraform

Per abilitare il PITR, utilizza una risorsa 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
}

Applica le modifiche

Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.

prepara Cloud Shell

  1. Avvia Cloud Shell.
  2. Imposta il progetto Google Cloud predefinito a cui vuoi applicare le configurazioni Terraform.

    Devi eseguire questo comando una sola volta per progetto e puoi eseguirlo in qualsiasi directory.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Se imposti valori espliciti nel file di configurazione Terraform, le variabili di ambiente vengono sostituite.

Prepara la directory

Ogni file di configurazione Terraform deve avere una propria directory (detta anche modulo principale).

  1. In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione .tf, ad esempio main.tf. In questo tutorial, il file è indicato come main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.

    Copia il codice campione nel file main.tf appena creato.

    Se vuoi, copia il codice da GitHub. Questa opzione è consigliata se lo snippet Terraform fa parte di una soluzione end-to-end.

  3. Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
  4. Salva le modifiche.
  5. Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
    terraform init

    Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione -upgrade:

    terraform init -upgrade

Applica le modifiche

  1. Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
    terraform plan

    Apporta le correzioni necessarie alla configurazione.

  2. Applica la configurazione Terraform eseguendo il comando seguente e inserendo yes al prompt:
    terraform apply

    Attendi finché Terraform non visualizza il messaggio "Applicazione completata".

  3. Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.

Elimina le modifiche

Per eliminare le modifiche:

  1. Per disabilitare la protezione dall'eliminazione, nel file di configurazione Terraform imposta l'argomento deletion_protection su false.
    deletion_protection =  "false"
  2. Applica la configurazione Terraform aggiornata eseguendo il comando seguente e inserendo yes al prompt:
    terraform apply
  1. Rimuovi le risorse applicate in precedenza con la tua configurazione Terraform eseguendo il comando seguente e inserendo yes al prompt:

    terraform destroy

REST v1

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza
  • INSTANCE_NAME: il nome dell'istanza di replica principale o di lettura che stai configurando per l'alta disponibilità
  • START_TIME: l'ora (in ore e minuti)

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID o il numero di progetto del progetto Google Cloud che contiene l'istanza
  • INSTANCE_NAME: il nome dell'istanza di replica principale o di lettura che stai configurando per l'alta disponibilità
  • START_TIME: l'ora (in ore e minuti)

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Ottieni il tempo di recupero più recente

Per un'istanza disponibile, puoi eseguire PITR fino all'ora più recente. Se l'istanza non è disponibile e i log dell'istanza sono archiviati in Cloud Storage, puoi recuperare l'ora di ripristino più recente ed eseguire il PITR fino a quel momento. In entrambi i casi, puoi ripristinare l'istanza in una zona diversa fornendo un valore per la zona preferita.

gcloud

Scopri l'ultimo momento in cui puoi recuperare un'istanza Cloud SQL non disponibile.

Sostituisci INSTANCE_NAME con il nome dell'istanza su cui stai eseguendo la query.

gcloud sql instances get-latest-recovery-time INSTANCE_NAME

REST v1

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID progetto
  • INSTANCE_NAME: il nome dell'istanza per la quale stai eseguendo una query per conoscere il tempo di ripristino più recente

Metodo HTTP e URL:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

REST v1beta4

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: l'ID progetto
  • INSTANCE_NAME: il nome dell'istanza per la quale stai eseguendo una query per conoscere il tempo di ripristino più recente

Metodo HTTP e URL:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Esegui PITR

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Apri il menu Altre azioni Icona Altre azioni. per l'istanza da recuperare e fai clic su Crea clone.
  3. Facoltativamente, nella pagina Crea un clone, aggiorna l'ID del nuovo clone.
  4. Seleziona Clona da un momento precedente.
  5. Inserisci un'ora PITR.
  6. Fai clic su Crea clone.

gcloud

Crea un clone utilizzando PITR.

Sostituisci quanto segue:

  • SOURCE_INSTANCE_NAME: nome dell'istanza da cui stai eseguendo il ripristino.
  • NEW_INSTANCE_NAME: il nome del clone.
  • TIMESTAMP: fuso orario UTC per l'istanza di origine in formato RFC 3339. Ad esempio 2012-11-15T16:19:00.094Z.
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time 'TIMESTAMP'

REST v1

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • project-id: l'ID progetto
  • target-instance-id: l'ID istanza di destinazione
  • source-instance-id: l'ID istanza di origine
  • restore-timestamp Il momento specifico per ripristinare fino a

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • project-id: l'ID progetto
  • target-instance-id: l'ID istanza di destinazione
  • source-instance-id: l'ID istanza di origine
  • restore-timestamp Il momento specifico per ripristinare fino a

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Disattiva PITR

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Apri il menu Altre azioni Icona Altre azioni. per l'istanza da disabilitare e seleziona Modifica.
  3. In Personalizza la tua istanza, espandi la sezione Protezione dei dati.
  4. Deseleziona Abilita recupero point-in-time.
  5. Fai clic su Salva.
  6. Nella pagina Panoramica dell'istanza, in Configurazione, l'impostazione PITR è elencata come disabilitata.

gcloud

  1. Disabilita il recupero point-in-time:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-point-in-time-recovery
  2. Conferma la modifica:
    gcloud sql instances describe INSTANCE_NAME
    

    Nella sezione backupConfiguration, viene visualizzato pointInTimeRecoveryEnabled: false se la modifica è riuscita.

REST v1

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • project-id: l'ID progetto
  • instance-id: l'ID istanza

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • project-id: l'ID progetto
  • instance-id: l'ID istanza

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Controlla la posizione di archiviazione dei log delle transazioni utilizzati per il PITR

Puoi controllare dove l'istanza Cloud SQL memorizza i log delle transazioni utilizzati per PITR.

gcloud

Per determinare se l'istanza archivia i log per il PITR su disco o Cloud Storage, utilizza il seguente comando:

   gcloud sql instances describe INSTANCE_NAME
   

Sostituisci INSTANCE_NAME con il nome dell'istanza.

Nell'output del comando, il campo transactionalLogStorageState fornisce informazioni su dove vengono archiviati i log delle transazioni per il PITR per l'istanza. I possibili stati di archiviazione dei log delle transazioni sono i seguenti:

  • DISK: l'istanza archivia i log delle transazioni utilizzati per il PITR su disco.
  • CLOUD_STORAGE: l'istanza archivia i log delle transazioni utilizzati per il PITR in Cloud Storage.

Imposta la conservazione dei log delle transazioni

Per impostare il numero di giorni per la conservazione dei log write-ahead:

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Apri il menu Altre azioni Icona Altre azioni. per l'istanza su cui vuoi impostare il log delle transazioni e seleziona Modifica.
  3. In Personalizza la tua istanza, espandi la sezione Protezione dei dati.
  4. Nella sezione Abilita il recupero point-in-time, espandi Opzioni avanzate.
  5. Inserisci il numero di giorni per la conservazione dei log, da 1 a 35 per la versione Cloud SQL Enterprise Plus o da 1 a 7 per Cloud SQL Enterprise.
  6. Fai clic su Salva.

gcloud

Modifica l'istanza per impostare il numero di giorni in cui conservare i log write-ahead.

Sostituisci quanto segue:

  • INSTANCE-NAME: il nome dell'istanza su cui vuoi impostare il log delle transazioni.
  • DAYS-TO-RETAIN: il numero di giorni di log delle transazioni da conservare. Per la versione Cloud SQL Enterprise Plus, l'intervallo valido è compreso tra 1 e 35 giorni, con un valore predefinito di 14 giorni. Per la versione Cloud SQL Enterprise, l'intervallo valido è compreso tra 1 e 7 giorni, con un valore predefinito di 7 giorni. Se non viene specificato alcun valore, viene utilizzato il valore predefinito. Valido solo se il PITR è abilitato. Conservare più giorni di log delle transazioni richiede maggiori dimensioni di archiviazione.

  gcloud sql instances patch INSTANCE-NAME \
    --retained-transaction-log-days=DAYS-TO-RETAIN
  

REST v1

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • days-to-retain: il numero di giorni per la conservazione dei log delle transazioni, da 1 a 7
  • project-id: l'ID progetto
  • instance-id: l'ID istanza

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

REST v1beta4

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • days-to-retain: il numero di giorni per la conservazione dei log delle transazioni, da 1 a 7
  • project-id: l'ID progetto
  • instance-id: l'ID istanza

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una di queste opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

Passaggi successivi