Esportare un file SQL

Per eseguire il backup degli schemi e dei dati del database come script di testo normale di istruzioni SQL, puoi esportare i dati dai cluster AlloyDB per PostgreSQL in un file di dump SQL in un bucket Cloud Storage.

Per informazioni sulla migrazione di un intero database da un server di database supportato a una nuova istanza AlloyDB, consulta Esegui la migrazione di un database ad AlloyDB utilizzando Database Migration Service. Se stai eseguendo l'esportazione perché vuoi creare una nuova istanza dal file esportato, valuta la possibilità di ripristinare un cluster da un backup archiviato.

Puoi annullare l'esportazione dei dati dai cluster AlloyDB per PostgreSQL. Per saperne di più, consulta Annulla un'operazione di esportazione.

Prima di iniziare

  • Prima di iniziare un'operazione di esportazione, tieni presente che le operazioni di esportazione utilizzano le risorse del database, ma non interferiscono con le operazioni standard del database, a meno che l'istanza non sia sottoposta a provisioning insufficiente.
  • I costi di trasferimento di dati tra regioni si applicano quando il bucket di destinazione si trova in una regione diversa rispetto al cluster di origine. Per ulteriori informazioni, consulta Prezzi di AlloyDB per PostgreSQL.
  • La compressione è abilitata se il nome dell'oggetto termina con l'estensione .gz. L'oggetto viene quindi esportato in formato .gz in Cloud Storage.
  • È possibile eseguire più operazioni di esportazione in parallelo.

Ruoli e autorizzazioni richiesti per l'esportazione da AlloyDB

Per esportare i dati da AlloyDB in Cloud Storage, l'utente che avvia l'esportazione deve disporre di uno dei seguenti ruoli Identity and Access Management (IAM):

Inoltre, il account di servizio del cluster AlloyDB deve avere uno dei seguenti ruoli nel bucket Cloud Storage:

  • Il ruolo IAM storage.objectAdmin o storage.objectCreator
  • Un ruolo personalizzato, inclusa l'autorizzazione storage.objects.create

Per assistenza con i ruoli IAM, consulta Identity and Access Management.

Esporta i dati di AlloyDB in un file di dump SQL

Quando utilizzi AlloyDB per eseguire un'esportazione, sia da gcloud CLI che dall'API, utilizzi l'utilità pg_dump con le opzioni necessarie per garantire che il file di esportazione risultante sia valido per l'importazione in AlloyDB.

Per esportare i dati da un database in un cluster AlloyDB in un file di dump SQL in un bucket Cloud Storage, segui questi passaggi:

gcloud

  1. Assicurati che esista un bucket Cloud Storage per archiviare il file esportato o crea un nuovo bucket.
  2. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectAdmin ruolo IAM al account di servizio AlloyDB per il bucket. Il formato del account di servizio è il seguente:

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    Per istruzioni sulla concessione di ruoli sui bucket, consulta Imposta e gestisci le policy IAM sui bucket.

    Se esporti il file in un bucket Cloud Storage esistente che non hai creato, potresti aver bisogno di autorizzazioni IAM aggiuntive per concedere i ruoli nel bucket. Per i dettagli, consulta Ruoli richiesti.

  3. Esporta il database nel bucket Cloud Storage. Di seguito sono elencate le opzioni per l'esportazione dei dati in un formato di dump SQL:

    • --async (facoltativo): termina immediatamente, senza attendere il completamento dell'operazione in corso.
    • --tables (facoltativo): tabelle da cui esportare i dati.
    • --schema-only (facoltativo): se impostato, esporta solo lo schema.
    • --clean-target-objects (facoltativo): se impostato, genera i comandi per DROP tutti gli oggetti del database di cui è stato eseguito il dump prima di generare i comandi per crearli.
    • --if-exist-target-objects (facoltativo): se impostato, utilizza i comandi DROP ... IF EXISTS per verificare l'esistenza dell'oggetto prima di eliminarlo in modalità --clean-target-objects.

    Per utilizzare queste funzionalità, includi queste opzioni nel comando gcloud. Se vuoi esportare solo le definizioni degli oggetti (schema) e nessun dato, utilizza il flag --schema-only. Per specificare le tabelle da esportare, utilizza il flag --tables=TABLE_NAMES. Puoi specificare valori separati da virgole di nomi di tabelle o pattern con caratteri jolly per specificare più tabelle.

    In caso contrario, rimuovi questi parametri dal seguente comando:

    gcloud alloydb clusters export CLUSTER_NAME \
      --region=REGION \
      --database=DATABASE_NAME \
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME" \
      --tables=TABLE_NAMES \
      --schema-only \
      --clean-target-objects \
      --if-exist-target-objects \
      --sql

    Il comando gcloud alloydb clusters export non contiene trigger o stored procedure, ma contiene viste. Per esportare trigger o stored procedure, utilizza l'utilità pg_dump.

    Per saperne di più sull'utilizzo del comando gcloud alloydb clusters export, consulta la pagina di riferimento del comando gcloud alloydb clusters export.

  4. Se non hai bisogno di conservare il ruolo IAM impostato in precedenza, revocalo.

REST v1

  1. Assicurati che esista un bucket Cloud Storage per archiviare il file esportato o crea un nuovo bucket:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectAdmin ruolo IAM al account di servizio AlloyDB per il bucket. Il formato del account di servizio è il seguente:

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    Per istruzioni sulla concessione di ruoli sui bucket, consulta Imposta e gestisci le policy IAM sui bucket.

    Se esporti il file in un bucket Cloud Storage esistente che non hai creato, potresti aver bisogno di autorizzazioni IAM aggiuntive per concedere i ruoli nel bucket. Per i dettagli, consulta Ruoli richiesti.

  3. Esporta il database.

    Utilizza il seguente metodo HTTP e URL:

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

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

    • PROJECT_ID: l'ID progetto
    • REGION: la regione in cui è stato eseguito il deployment del cluster AlloyDB.
    • CLUSTER_ID: l'ID cluster.
    • BUCKET_NAME: il nome del bucket Cloud Storage.
    • PATH_TO_SQL_FILE: il percorso del file di dump SQL.
    • DATABASE_NAME: il nome di un database all'interno dell'istanza AlloyDB.
    • TABLES: le tabelle da cui esportare i dati.
    • SCHEMA_ONLY: se true, esporta solo lo schema.
    • CLEAN_TARGET_OBJECTS: se true, genera comandi per DROP tutti gli oggetti del database di cui è stato eseguito il dump prima di generare i comandi per crearli.
    • IF_EXIST_TARGET_OBJECTS: Setrue, utilizzoDROP ... IF EXISTS comandi per verificare l'esistenza dell'oggetto prima di rilasciarloclean_target_objects modalità.

    Per utilizzare queste funzionalità, imposta i valori di questi parametri su true. In caso contrario, imposta i valori su false. Se vuoi esportare solo le definizioni degli oggetti (schema) e nessun dato, utilizza il flag schema_only. Per specificare le tabelle da esportare, utilizza il campo tables. Puoi selezionare più tabelle fornendo un elenco separato da virgole di nomi di tabelle o scrivendo caratteri jolly nel pattern.

    Corpo JSON della richiesta:

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE"
      },
      "database": "DATABASE_NAME",
      "sql_export_options": {
        "schema_only": true,
        "tables": [
         "TABLE1",
         "TABLE2"
        ],
        "clean_target_objects": false,
        "if_exist_target_objects": true
      }
    }
    

    Per inviare la richiesta, espandi una di queste opzioni:

    curl (Linux, macOS o Cloud Shell)

    Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
       

    PowerShell (Windows)

    Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

       $cred = gcloud auth print-access-token
       $headers = @{ "Authorization" = "Bearer $cred" }
    
       Invoke-WebRequest `
         -Method POST `
         -Headers $headers `
         -ContentType: "application/json; charset=utf-8" `
         -InFile request.json `
       -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
       

    Ricevi una risposta JSON simile alla seguente:

    Risposta

    {
      "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
        "createTime": "2024-09-17T06:05:31.244428646Z",
        "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
        "verb": "export",
        "requestedCancellation": false,
        "apiVersion": "v1"
      },
      "done": false
    }
    
  4. Se non hai bisogno di conservare il ruolo IAM impostato in precedenza, rimuovilo.

Per l'elenco completo dei parametri della richiesta, consulta clusters.export.

Passaggi successivi