Exporte um ficheiro SQL

Esta página descreve como exportar dados de clusters do AlloyDB for PostgreSQL para ficheiros SQL dump.

Para informações sobre a migração de uma base de dados completa de um servidor de base de dados suportado para uma nova instância do AlloyDB, consulte o artigo Migre uma base de dados para o AlloyDB através do Database Migration Service. Se estiver a exportar porque quer criar uma nova instância a partir do ficheiro exportado, considere restaurar um cluster a partir de uma cópia de segurança armazenada.

Pode cancelar a exportação de dados de clusters do AlloyDB for PostgreSQL. Para mais informações, consulte Cancele a exportação de dados.

Antes de começar

  • Antes de iniciar uma operação de exportação, tenha em atenção que as operações de exportação usam recursos da base de dados, mas não interferem com as operações padrão da base de dados, a menos que a instância tenha um aprovisionamento insuficiente.
  • Aplicam-se custos de transferência de dados entre regiões quando o contentor de destino está numa região diferente do cluster de origem. Para mais informações, consulte os preços do AlloyDB para PostgreSQL.
  • A compressão é ativada se o nome do objeto terminar com a extensão .gz. O objeto é, em seguida, exportado no formato .gz para o Cloud Storage.
  • É possível executar várias operações de exportação em paralelo.

Funções e autorizações necessárias para exportar a partir do AlloyDB

Para exportar dados do AlloyDB para o Cloud Storage, o utilizador que inicia a exportação tem de ter uma das seguintes funções de gestão de identidades e acessos (IAM):

Além disso, a conta de serviço do cluster do AlloyDB tem de ter uma das seguintes funções:

  • A função de IAM storage.objectAdmin
  • Uma função personalizada, incluindo as autorizações storage.objects.create

Para obter ajuda com as funções de IAM, consulte o artigo Gestão de identidade e de acesso.

Exporte dados do AlloyDB para um ficheiro de captura SQL

Quando usa o AlloyDB para fazer uma exportação, quer seja a partir da CLI gcloud ou da API, está a usar o utilitário pg_dump com as opções necessárias para garantir que o ficheiro de exportação resultante é válido para importação de volta para o AlloyDB.

Para exportar dados de uma base de dados num cluster do AlloyDB para um ficheiro de despejo SQL num contentor do Cloud Storage, siga estes passos:

gcloud

  1. Crie um contentor do Cloud Storage.
  2. Use o formato fornecido para identificar a conta de serviço do projeto a partir do qual está a exportar. O formato da conta de serviço é o seguinte:

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

    Conceda autorizações à conta de serviço no contentor do Cloud Storage para a operação de exportação.

  3. Use gcloud storage buckets add-iam-policy-binding para conceder a storage.objectAdmin função do IAM à conta de serviço. Para obter ajuda na definição das autorizações de IAM, consulte o artigo Usar autorizações de IAM.

  4. Exporte a base de dados para o seu contentor do Cloud Storage. As seguintes listas de opções para exportar dados num formato de despejo de SQL:

    • --async (Opcional): devolve imediatamente, sem esperar que a operação em curso seja concluída.
    • --tables (Opcional): tabelas a exportar.
    • --schema-only (Opcional): se definido, exporta apenas o esquema.
    • --clean-target-objects (Opcional): se estiver definido, envia comandos para DROP todos os objetos da base de dados transferidos antes de enviar os comandos para a respetiva criação.
    • --if-exist-target-objects (Opcional): se estiver definido, use comandos DROP ... IF EXISTS para verificar a existência do objeto antes de o largar no modo --clean-target-objects.

    Para usar estas funcionalidades, inclua estas opções no comando gcloud. Se quiser exportar apenas definições de objetos (esquema) e nenhum dado, use a flag –-schema-only. Para especificar as tabelas a exportar, use a flag --tables=TABLE_NAMES. Pode especificar valores separados por vírgulas de nomes de tabelas ou padrões de carateres universais para especificar várias tabelas.

    Caso contrário, remova estes parâmetros do seguinte 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

    O comando alloydb clusters export não contém acionadores nem procedimentos armazenados, mas contém vistas. Para exportar acionadores ou procedimentos armazenados, use o utilitário pg_dump.

    Para mais informações sobre a utilização do comando alloydb clusters export, consulte a página de referência do comando alloydb clusters export.

  5. Se não precisar de manter a função do IAM que definiu anteriormente, revogue a função agora.

REST v1

  1. Crie um contentor para a exportação:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. Use o formato de conta de serviço para identificar a conta de serviço do projeto a partir do qual está a exportar.

    O formato da conta de serviço é o seguinte:

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

    Conceda autorizações à conta de serviço para o contentor do Cloud Storage para a operação de exportação.

  3. Use gcloud storage buckets add-iam-policy-binding para conceder a storage.objectAdmin função do IAM à conta de serviço. Para obter ajuda na definição das autorizações de IAM, consulte o artigo Usar autorizações de IAM.

  4. Exporte a sua base de dados.

    Use o seguinte método HTTP e URL:

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

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto.
    • REGION: a região na qual o cluster do AlloyDB está implementado.
    • CLUSTER_ID: o ID do cluster.
    • BUCKET_NAME: o nome do contentor do Cloud Storage.
    • PATH_TO_SQL_FILE: o caminho para o ficheiro de captura SQL.
    • DATABASE_NAME: o nome de uma base de dados na instância do AlloyDB.
    • TABLES: tabelas a exportar.
    • SCHEMA_ONLY: se true, exporte apenas o esquema.
    • CLEAN_TARGET_OBJECTS: se true, comandos de saída para DROP todos os objetos da base de dados transferidos antes de emitir os comandos para a respetiva criação.
    • IF_EXIST_TARGET_OBJECTS: se true, use os comandos DROP ... IF EXISTS para verificar a existência do objeto antes de o largar no modo clean_target_objects.

    Para usar estas funcionalidades, defina os valores destes parâmetros como true. Caso contrário, defina os respetivos valores como false. Se quiser exportar apenas definições de objetos (esquema) e nenhum dado, use a flag schema_only. Para especificar as tabelas a exportar, use o campo tables. Pode selecionar várias tabelas fornecendo uma lista de nomes de tabelas separados por vírgulas ou escrevendo carateres universais no padrão.

    Corpo JSON do pedido:

    {
      "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
      }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    curl (Linux, macOS ou Cloud Shell)

    Guarde o corpo do pedido num ficheiro com o nome request.json e execute o seguinte 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)

    Guarde o corpo do pedido num ficheiro com o nome request.json e execute o seguinte 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
       

    Recebe uma resposta JSON semelhante à seguinte:

    Resposta

    {
      "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 não precisar de manter a função do IAM que definiu anteriormente, remova-a agora.

Para ver a lista completa de parâmetros do pedido, consulte clusters:export.

O que se segue?