SQL 파일 내보내기

이 페이지에서는 PostgreSQL용 AlloyDB 클러스터에서 SQL 덤프 파일로 데이터를 내보내는 방법을 설명합니다.

지원되는 데이터베이스 서버에서 새 AlloyDB 인스턴스로 전체 데이터베이스를 마이그레이션하는 방법에 관한 자세한 내용은 Database Migration Service를 사용하여 데이터베이스를 AlloyDB로 마이그레이션을 참고하세요. 내보낸 파일에서 새 인스턴스를 만들기 위해 내보내려는 경우 저장된 백업에서 클러스터를 복원하는 것이 좋습니다.

PostgreSQL용 AlloyDB 클러스터에서 데이터 내보내기를 취소할 수 있습니다. 자세한 내용은 데이터 내보내기 취소를 참고하세요.

시작하기 전에

  • 내보내기 작업을 시작하기 전에 내보내기 작업은 데이터베이스 리소스를 사용하지만 인스턴스가 프로비저닝되지 않는 한 표준 데이터베이스 작업에 지장을 주지 않는다는 점에 유의하세요.
  • 대상 버킷이 소스 클러스터와 다른 리전에 있는 경우 리전 간 데이터 전송 요금이 적용됩니다. 자세한 내용은 PostgreSQL용 AlloyDB 가격 책정을 참고하세요.
  • 객체 이름이 .gz 확장자로 끝나는 경우 압축이 사용 설정됩니다. 그런 다음 객체가 .gz 형식으로 Cloud Storage로 내보내집니다.
  • 여러 내보내기 작업을 동시에 실행할 수 있습니다.

AlloyDB에서 내보내기에 필요한 역할 및 권한

AlloyDB에서 Cloud Storage로 데이터를 내보내려면 내보내기를 시작하는 사용자에게 다음 Identity and Access Management (IAM) 역할 중 하나가 있어야 합니다.

또한 AlloyDB 클러스터의 서비스 계정에는 다음 역할 중 하나가 있어야 합니다.

  • storage.objectAdmin IAM 역할
  • storage.objects.create 권한이 포함된 맞춤 역할

IAM 역할에 대한 도움말은 Identity and Access Management를 참고하세요.

AlloyDB 데이터를 SQL 덤프 파일로 내보내기

AlloyDB를 사용하여 gcloud CLI 또는 API에서 내보내기를 수행할 때는 결과 내보내기 파일을 AlloyDB로 다시 가져오는 데 필요한 옵션과 함께 pg_dump 유틸리티를 사용합니다.

AlloyDB 클러스터의 데이터베이스에서 Cloud Storage 버킷의 SQL 덤프 파일로 데이터를 내보내려면 다음 단계를 따르세요.

gcloud

  1. Cloud Storage 버킷 생성
  2. 제공된 형식을 사용하여 내보내는 프로젝트의 서비스 계정을 식별합니다. 서비스 계정의 형식은 다음과 같습니다.

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

    내보내기 작업을 위해 서비스 계정에 Cloud Storage 버킷에 대한 권한을 부여합니다.

  3. gcloud storage buckets add-iam-policy-binding을 사용하여 서비스 계정에 storage.objectAdmin IAM 역할을 부여합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참고하세요.

  4. 데이터베이스를 Cloud Storage 버킷으로 내보냅니다. 다음은 SQL 덤프 형식으로 데이터를 내보내는 옵션을 보여줍니다.

    • --async (선택사항): 진행 중인 작업이 완료되기를 기다리지 않고 즉시 반환합니다.
    • --tables (선택사항): 내보낼 테이블입니다.
    • --schema-only (선택사항): 설정하면 스키마만 내보냅니다.
    • --clean-target-objects (선택사항): 설정된 경우 덤프된 모든 데이터베이스 객체를 만드는 명령어를 출력하기 전에 DROP에 명령어를 출력합니다.
    • --if-exist-target-objects (선택사항): 설정된 경우 --clean-target-objects 모드에서 객체를 배치하기 전에 DROP ... IF EXISTS 명령어를 사용하여 객체의 존재를 확인합니다.

    이러한 기능을 사용하려면 gcloud 명령어에 이러한 옵션을 포함하세요. 데이터가 아닌 객체 정의 (스키마)만 내보내려면 –-schema-only 플래그를 사용합니다. 내보낼 테이블을 지정하려면 --tables=TABLE_NAMES 플래그를 사용합니다. 테이블 이름 또는 와일드 카드 패턴의 값을 쉼표로 구분하여 여러 테이블을 지정할 수 있습니다.

    그렇지 않으면 다음 명령어에서 이러한 매개변수를 삭제합니다.

    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

    alloydb clusters export 명령어에는 트리거 또는 저장 프로시저가 포함되지 않지만 뷰가 포함됩니다. 트리거 또는 저장 프로시저를 내보내려면 pg_dump 유틸리티를 사용합니다.

    alloydb clusters export 명령어 사용에 관한 자세한 내용은 alloydb clusters export 명령어 참조 페이지를 참고하세요.

  5. 이전에 설정한 IAM 역할을 유지할 필요가 없으면 지금 역할을 취소합니다.

REST v1

  1. 내보내기에 사용할 버킷을 만듭니다.

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. 서비스 계정 형식을 사용하여 내보내는 프로젝트의 서비스 계정을 식별합니다.

    서비스 계정의 형식은 다음과 같습니다.

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

    서비스 계정에 내보내기 작업을 위한 Cloud Storage 버킷에 대한 권한을 부여합니다.

  3. gcloud storage buckets add-iam-policy-binding을 사용하여 서비스 계정에 storage.objectAdmin IAM 역할을 부여합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참고하세요.

  4. 데이터베이스를 내보냅니다.

    다음 HTTP 메서드와 URL을 사용합니다.

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

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • REGION: AlloyDB 클러스터가 배포되는 리전입니다.
    • CLUSTER_ID: 클러스터 ID입니다.
    • BUCKET_NAME: Cloud Storage 버킷 이름
    • PATH_TO_SQL_FILE: SQL 덤프 파일의 경로입니다.
    • DATABASE_NAME: AlloyDB 인스턴스 내 데이터베이스의 이름입니다.
    • TABLES: 내보낼 테이블입니다.
    • SCHEMA_ONLY: true인 경우 스키마만 내보냅니다.
    • CLEAN_TARGET_OBJECTS: true인 경우 덤프된 모든 데이터베이스 객체를 만들기 위한 명령어를 출력하기 전에 DROP에 명령어를 출력합니다.
    • IF_EXIST_TARGET_OBJECTS: true인 경우 clean_target_objects 모드에서 객체를 배치하기 전에 DROP ... IF EXISTS 명령어를 사용하여 객체의 존재를 확인합니다.

    이러한 기능을 사용하려면 이러한 매개변수 값을 true로 설정합니다. 그렇지 않으면 값을 false로 설정합니다. 데이터가 아닌 객체 정의 (스키마)만 내보내려면 schema_only 플래그를 사용합니다. 내보낼 테이블을 지정하려면 tables 필드를 사용합니다. 쉼표로 구분된 테이블 이름 목록을 제공하거나 패턴에 와일드 카드 문자를 작성하여 여러 테이블을 선택할 수 있습니다.

    JSON 요청 본문:

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

    요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

    cURL(Linux, macOS, Cloud Shell)

    요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

       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)

    요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

       $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
       

    다음과 유사한 JSON 응답이 표시됩니다.

    응답

    {
      "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. 이전에 설정한 IAM 역할을 유지할 필요가 없으면 지금 삭제합니다.

이 요청에서 사용 가능한 매개변수의 전체 목록은 clusters:export를 참고하세요.

다음 단계