Exportar um arquivo SQL

Para fazer backup de esquemas e dados de banco de dados como um script de texto simples de instruções SQL, é possível exportar dados de clusters do AlloyDB para PostgreSQL para um arquivo dump SQL em um bucket do Cloud Storage.

Para informações sobre como migrar um banco de dados inteiro de um servidor de banco de dados compatível para uma nova instância do AlloyDB, consulte Migrar um banco de dados para o AlloyDB usando o Database Migration Service. Se você estiver exportando porque quer criar uma nova instância a partir do arquivo exportado, considere restaurar um cluster de um backup armazenado.

É possível cancelar a exportação de dados de clusters do AlloyDB para PostgreSQL. Para mais informações, consulte Cancelar uma operação de exportação.

Antes de começar

  • Antes de iniciar uma operação de exportação, lembre-se de que as operações de exportação usam recursos do banco de dados, mas não interferem nas operações padrão do banco de dados, a menos que a instância tenha um provisionamento menor do que deveria ser.
  • As cobranças de transferência de dados entre regiões se aplicam quando o bucket de destino está em uma região diferente do cluster de origem. Para mais informações, consulte Preços do AlloyDB para PostgreSQL.
  • A compactação será ativada se o nome do objeto terminar com a extensão .gz. O objeto é exportado no formato .gz para o Cloud Storage.
  • Várias operações de exportação podem ser executadas em paralelo.

Papéis e permissões necessários para exportar do AlloyDB

Para exportar dados do AlloyDB para o Cloud Storage, o usuário que inicia a exportação precisa ter um dos seguintes papéis do Identity and Access Management (IAM):

Além disso, a conta de serviço do cluster do AlloyDB precisa ter um dos seguintes papéis no bucket do Cloud Storage:

  • O papel do IAM storage.objectAdmin ou storage.objectCreator
  • Um papel personalizado, incluindo a permissão storage.objects.create

Para receber ajuda com os papéis do IAM, consulte Identity and Access Management.

Exportar dados do AlloyDB para um arquivo dump SQL

Ao usar o AlloyDB para executar uma exportação, seja na gcloud CLI ou na API, você estará usando o utilitário pg_dump com as opções necessárias para garantir que o arquivo de exportação resultante seja válido para importação no AlloyDB.

Para exportar dados de um banco de dados em um cluster do AlloyDB para um arquivo dump SQL em um bucket do Cloud Storage, siga estas etapas:

gcloud

  1. Verifique se há um bucket do Cloud Storage para armazenar o arquivo exportado ou crie um novo bucket.
  2. Use gcloud storage buckets add-iam-policy-binding para conceder o papel do IAM storage.objectAdmin à conta de serviço do AlloyDB para o bucket. O formato da conta de serviço é o seguinte:

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

    Para instruções sobre como conceder papéis em buckets, consulte Definir e gerenciar políticas do IAM em buckets.

    Se você estiver exportando o arquivo para um bucket do Cloud Storage que não foi criado por você, talvez sejam necessárias outras permissões do IAM para conceder papéis no bucket. Para mais detalhes, consulte Papéis necessários.

  3. Exporte o banco de dados para o bucket do Cloud Storage. Veja a seguir as opções para exportar dados em um formato de dump SQL:

    • --async (opcional): retorna imediatamente, sem aguardar a conclusão da operação em andamento.
    • --tables (opcional): tabelas de onde exportar.
    • --schema-only (opcional): se definido, exporta apenas o esquema.
    • --clean-target-objects (opcional): se definido, gera comandos para DROP todos os objetos de banco de dados despejados antes de gerar os comandos para criá-los.
    • --if-exist-target-objects (opcional): se definido, use os comandos DROP ... IF EXISTS para verificar se o objeto existe antes de descartá-lo no modo --clean-target-objects.

    Para usar esses recursos, inclua as opções no comando gcloud. Se você quiser exportar apenas definições de objeto (esquema) e nenhum dado, use a flag --schema-only. Para especificar quais tabelas serão exportadas, use a flag --tables=TABLE_NAMES. É possível especificar valores separados por vírgulas de nomes de tabelas ou padrões de caracteres curinga para especificar várias tabelas.

    Caso contrário, remova esses parâmetros do 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 gcloud alloydb clusters export não contém gatilhos ou procedimentos armazenados, mas contém visualizações. Para exportar gatilhos ou procedimentos armazenados, use o utilitário pg_dump.

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

  4. Se você não precisar manter o papel do IAM definido anteriormente, revogue o papel.

REST v1

  1. Verifique se há um bucket do Cloud Storage para armazenar o arquivo exportado ou crie um novo bucket:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. Use gcloud storage buckets add-iam-policy-binding para conceder o papel do IAM storage.objectAdmin à conta de serviço do AlloyDB para o bucket. O formato da conta de serviço é o seguinte:

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

    Para instruções sobre como conceder papéis em buckets, consulte Definir e gerenciar políticas do IAM em buckets.

    Se você estiver exportando o arquivo para um bucket do Cloud Storage que não foi criado por você, talvez sejam necessárias outras permissões do IAM para conceder papéis no bucket. Para mais detalhes, consulte Papéis necessários.

  3. Exporte o banco 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 os dados da solicitação, faça as seguintes substituições:

    • PROJECT_ID: o ID do projeto;
    • REGION: a região em que o cluster do AlloyDB está implantado.
    • CLUSTER_ID: o ID do cluster.
    • BUCKET_NAME: o nome do bucket do Cloud Storage.
    • PATH_TO_SQL_FILE: o caminho para o arquivo dump SQL.
    • DATABASE_NAME: o nome de um banco de dados dentro da instância do AlloyDB.
    • TABLES: tabelas de onde exportar.
    • SCHEMA_ONLY: se for true, exporte apenas o esquema.
    • CLEAN_TARGET_OBJECTS: se for true, os comandos de saída para DROP todos os objetos de banco de dados despejados antes de gerar os comandos para criá-los.
    • IF_EXIST_TARGET_OBJECTS: se for true, use os comandos DROP ... IF EXISTS para verificar se o objeto existe antes de descartá-lo no modo clean_target_objects.

    Para usar esses recursos, defina os valores dos parâmetros como true. Caso contrário, defina os valores como false. Se você quiser exportar apenas definições de objeto (esquema) e nenhum dado, use a flag schema_only. Para especificar quais tabelas serão exportadas, use o campo tables. É possível selecionar várias tabelas fornecendo uma lista separada por vírgulas de nomes de tabelas ou escrevendo caracteres curinga no padrão.

    Corpo JSON da solicitação:

    {
      "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 a solicitação, expanda uma destas opções:

    curl (Linux, macOS ou Cloud Shell)

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

       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)

    Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

       $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
       

    Você vai receber uma resposta JSON semelhante a esta:

    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
    }
    
  4. Se você não precisar manter o papel do IAM definido anteriormente, remova-o.

Para ver a lista completa de parâmetros da solicitação, consulte clusters.export.

A seguir