Esportare un file SQL

Questa pagina descrive come esportare i dati dai cluster AlloyDB per PostgreSQL in file di dump SQL.

Per informazioni sulla migrazione di un intero database da un server di database supportato a una nuova istanza AlloyDB, consulta Eseguire 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 ulteriori informazioni, consulta Annullare l'esportazione dei dati.

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 sottoprovvisionata.
  • I costi di trasferimento dei dati tra regioni si applicano quando il bucket di destinazione si trova in una regione diversa dal cluster di origine. Per ulteriori informazioni, consulta i 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 per il cluster AlloyDB deve disporre di uno dei seguenti ruoli:

  • Il ruolo IAM storage.objectAdmin
  • Un ruolo personalizzato, incluse le autorizzazioni storage.objects.create

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

Esportare i dati di AlloyDB in un file di dump SQL

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

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

gcloud

  1. Crea un bucket Cloud Storage.
  2. Utilizza il formato fornito per identificare il account di servizio per il progetto da cui stai esportando. Il formato del account di servizio è il seguente:

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

    Concedi al account di servizio le autorizzazioni per il bucket Cloud Storage per l'operazione di esportazione.

  3. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectAdmin ruolo IAM al account di servizio. Per assistenza con l'impostazione delle autorizzazioni IAM, consulta Utilizzare le autorizzazioni IAM.

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

    • --async (facoltativo): restituisce immediatamente, senza attendere il completamento dell'operazione in corso.
    • --tables (facoltativo): tabelle da cui esportare.
    • --schema-only (facoltativo): se impostato, esporta solo lo schema.
    • --clean-target-objects (facoltativo): se impostato, genera comandi per DROP tutti gli oggetti del database di cui è stato eseguito il dump prima di generare i comandi per la loro creazione.
    • --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 dei nomi delle 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 alloydb clusters export non contiene trigger o stored procedure, ma contiene viste. Per esportare trigger o stored procedure, utilizza l' pg_dump utility.

    Per ulteriori informazioni sull'utilizzo del comando alloydb clusters export, consulta la alloydb clusters export pagina di riferimento del comando.

  5. Se non devi conservare il ruolo IAM che hai impostato in precedenza, revoca il ruolo ora.

REST v1

  1. Crea un bucket per l'esportazione:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. Utilizza il formato del account di servizio per identificare il account di servizio per il progetto da cui stai esportando.

    Il formato del account di servizio è il seguente:

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

    Concedi al account di servizio le autorizzazioni per il bucket Cloud Storage per l'operazione di esportazione.

  3. Utilizza gcloud storage buckets add-iam-policy-binding per concedere il storage.objectAdmin ruolo IAM al account di servizio. Per assistenza con l'impostazione delle autorizzazioni IAM, consulta Utilizzare le autorizzazioni IAM.

  4. 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 sostituzioni seguenti:

    • 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: tabelle da cui esportare.
    • 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 la loro creazione.
    • IF_EXIST_TARGET_OBJECTS: se true, utilizza DROP ... IF EXISTS comandi per verificare l'esistenza dell'oggetto prima di eliminarlo in modalità clean_target_objects.

    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 di nomi di tabelle separati da virgole 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 il comando seguente:

       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 il comando seguente:

       $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
       

    Riceverai 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
    }
    
  5. Se non devi conservare il ruolo IAM che hai impostato in precedenza, rimuovilo ora.

Per l'elenco completo dei parametri per la richiesta, consulta clusters:export.

Passaggi successivi