동시에 파일 내보내기 및 가져오기

이 페이지에서는 Cloud SQL 인스턴스로 파일을 동시에 내보내고 가져오는 방법을 설명합니다.

시작하기 전에

내보내기 또는 가져오기 작업을 시작하기 전에 다음 사항을 확인하세요.

  • 데이터베이스에 충분한 여유 공간이 있는지 확인합니다.
  • 내보내기 및 가져오기 작업은 데이터베이스 리소스를 사용하지만 인스턴스가 프로비저닝되지 않는 한 일반적인 데이터베이스 작업에 지장을 주지 않습니다.

  • 데이터 내보내기 및 가져오기 권장사항을 따르세요.
  • 가져오기 작업을 완료한 후 결과를 확인합니다.

MySQL용 Cloud SQL에서 여러 파일로 동시에 데이터 내보내기

다음 섹션에는 MySQL용 Cloud SQL에서 여러 파일로 데이터를 동시에 내보내는 방법에 관한 정보가 포함되어 있습니다.

MySQL용 Cloud SQL에서 여러 파일로 데이터를 동시에 내보내는 데 필요한 역할 및 권한

데이터를 Cloud SQL에서 Cloud Storage로 내보내려면 내보내기를 시작하는 사용자에게 다음 역할 중 하나가 있어야 합니다.

또한 Cloud SQL 인스턴스의 서비스 계정에는 다음 역할 중 하나가 있어야 합니다.

  • storage.objectAdmin Identity and Access Management(IAM) 역할
  • 다음 권한이 포함된 맞춤 역할:
    • storage.objects.create
    • storage.objects.list(파일을 동시에 내보내는 경우에만)
    • storage.objects.delete(파일을 동시에 내보내는 경우에만)

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

동시에 여러 파일로 데이터 내보내기

Cloud SQL에 있는 여러 파일에서 Cloud Storage로 데이터를 동시에 내보낼 수 있습니다. 이렇게 하려면 dumpInstance 유틸리티를 사용합니다.

파일이 Cloud Storage에 저장되면 다른 Cloud SQL 데이터베이스로 가져올 수 있습니다. 파일의 데이터에 로컬로 액세스하려면 Cloud Storage에서 로컬 환경으로 데이터를 다운로드합니다.

파일에 DEFINER 절 (조회, 트리거, 저장된 프로시저 등)이 포함된 경우 해당 문이 실행되는 순서에 따라 해당 파일을 가져오기에 사용하는 데 실패할 수 있습니다. Cloud SQL에서 DEFINER사용 및 우회적 해결 방법에 대해 자세히 알아보세요.

gcloud

Cloud SQL에서 여러 파일로 데이터를 동시에 내보내려면 다음 단계를 완료하세요.

  1. Cloud Storage 버킷을 만듭니다.
  2. 파일을 내보낼 Cloud SQL 인스턴스의 서비스 계정을 찾으려면
    gcloud sql instances describe 명령어를 사용합니다.
    gcloud sql instances describe INSTANCE_NAME
    
  3. INSTANCE_NAME을 Cloud SQL 인스턴스의 이름으로 바꿉니다.

    출력에서 serviceAccountEmailAddress 필드와 연결된 값을 찾습니다.

  4. 서비스 계정에 storage.objectAdmin IAM 역할을 부여하려면 gsutil iam 유틸리티를 사용합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  5. Cloud SQL에서 여러 파일로 데이터를 동시에 내보내려면 gcloud sql export sql 명령어를 사용합니다.
    gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \
    --offload \
    --parallel \
    --threads=THREAD_NUMBER \
    --database=DATABASE_NAME \
    --table=TABLE_EXPRESSION
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 파일을 동시에 내보낼 Cloud SQL 인스턴스의 이름입니다.
    • BUCKET_NAME: Cloud Storage 버킷의 이름입니다.
    • BUCKET_PATH: 내보내기 파일이 저장되는 버킷의 경로입니다.
    • FOLDER_NAME: 내보내기 파일이 저장되는 폴더입니다.
    • THREAD_NUMBER: Cloud SQL에서 파일을 동시에 내보내는 데 사용하는 스레드 수입니다. 예를 들어 한 번에 파일 3개를 동시에 내보내려면 이 매개변수의 값으로 3을 지정합니다.
    • DATABASE_NAME(선택사항): 내보내기를 수행할 Cloud SQL 인스턴스 내 데이터베이스의 이름입니다. 데이터베이스를 지정하지 않으면 Cloud SQL에서 인스턴스의 모든 데이터베이스를 내보냅니다.
    • TABLE_EXPRESSION: 지정된 데이터베이스에서 내보낼 테이블입니다.

    export sql 명령어에는 트리거 또는 저장 프로시저가 포함되지 않지만 뷰가 포함됩니다. 트리거 또는 저장 프로시저를 내보내려면 내보내기에 단일 스레드를 사용합니다. 이 스레드는 mysqldump 도구를 사용합니다.

    내보내기가 완료되면 Cloud Storage 버킷의 폴더에 MySQL 셸 덤프 형식의 파일이 생성됩니다.

  6. MySQL용 Cloud SQL에서 내보내기에 필요한 역할 및 권한에서 설정한 IAM 역할이 필요하지 않으면 취소합니다.

REST v1

Cloud SQL에서 여러 파일로 데이터를 동시에 내보내려면 다음 단계를 완료하세요.

  1. Cloud Storage 버킷을 만듭니다.
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    다음을 바꿉니다.
    • PROJECT_NAME: 만들려는 Cloud Storage 버킷을 포함하는 Google Cloud 프로젝트의 이름입니다.
    • LOCATION_NAME: 내보내는 파일을 저장할 버킷의 위치입니다. 예를 들면 us-east1입니다.
    • BUCKET_NAME: 이름 지정 요구사항이 적용되는 버킷의 이름입니다. 예를 들면 my-bucket입니다.
  2. 인스턴스에 버킷의 legacyBucketWriter IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  3. Cloud SQL에서 여러 파일로 데이터를 동시에 내보냅니다.

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

    • PROJECT_NAME: 만든 Cloud Storage 버킷이 포함된 Google Cloud 프로젝트의 이름입니다.
    • INSTANCE_NAME: 파일을 동시에 내보낼 Cloud SQL 인스턴스의 이름입니다.
    • BUCKET_NAME: Cloud Storage 버킷의 이름입니다.
    • BUCKET_PATH: 내보내기 파일이 저장되는 버킷의 경로입니다.
    • FOLDER_NAME: 내보내기 파일이 저장되는 폴더입니다.
    • DATABASE_NAME(선택사항): 내보내기를 수행할 Cloud SQL 인스턴스 내 데이터베이스의 이름입니다. 데이터베이스를 지정하지 않으면 Cloud SQL에서 인스턴스의 모든 데이터베이스를 내보냅니다.
    • THREAD_NUMBER: Cloud SQL에서 파일을 동시에 내보내는 데 사용하는 스레드 수입니다. 예를 들어 한 번에 파일 3개를 동시에 내보내려면 이 매개변수의 값으로 3을 지정합니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

    JSON 요청 본문:

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlExportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

    다음과 비슷한 JSON 응답이 표시됩니다.

  4. 내보내기가 완료되면 Cloud Storage 버킷의 폴더에 MySQL 셸 덤프 형식의 파일이 생성됩니다.

  5. MySQL용 Cloud SQL에서 내보내기에 필요한 역할 및 권한에서 설정한 IAM 역할이 필요하지 않으면 취소합니다.
이 요청에 대한 전체 매개변수 목록은 Cloud SQL Admin API 페이지를 참조하세요.

REST v1beta4

Cloud SQL에서 여러 파일로 데이터를 동시에 내보내려면 다음 단계를 완료하세요.

  1. Cloud Storage 버킷을 만듭니다.
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    다음을 바꿉니다.
    • PROJECT_NAME: 만들려는 Cloud Storage 버킷을 포함하는 Google Cloud 프로젝트의 이름입니다.
    • LOCATION_NAME: 내보내는 파일을 저장할 버킷의 위치입니다. 예를 들면 us-east1입니다.
    • BUCKET_NAME: 이름 지정 요구사항이 적용되는 버킷의 이름입니다. 예를 들면 my-bucket입니다.
  2. 인스턴스에 버킷의 storage.objectAdmin IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  3. Cloud SQL에서 여러 파일로 데이터를 동시에 내보냅니다.

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

    • PROJECT_NAME: 만든 Cloud Storage 버킷이 포함된 Google Cloud 프로젝트의 이름입니다.
    • INSTANCE_NAME: 파일을 동시에 내보낼 Cloud SQL 인스턴스의 이름입니다.
    • BUCKET_NAME: Cloud Storage 버킷의 이름입니다.
    • BUCKET_PATH: 내보내기 파일이 저장되는 버킷의 경로입니다.
    • FOLDER_NAME: 내보내기 파일이 저장되는 폴더입니다.
    • DATABASE_NAME(선택사항): 내보내기를 수행할 Cloud SQL 인스턴스 내 데이터베이스의 이름입니다. 데이터베이스를 지정하지 않으면 Cloud SQL에서 인스턴스의 모든 데이터베이스를 내보냅니다.
    • THREAD_NUMBER: Cloud SQL에서 파일을 동시에 내보내는 데 사용하는 스레드 수입니다. 예를 들어 한 번에 파일 3개를 동시에 내보내려면 이 매개변수의 값으로 3을 지정합니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

    JSON 요청 본문:

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlExportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

    다음과 비슷한 JSON 응답이 표시됩니다.

  4. 내보내기가 완료되면 Cloud Storage 버킷의 폴더에 MySQL 셸 덤프 형식의 파일이 생성됩니다.

  5. MySQL용 Cloud SQL에서 내보내기에 필요한 역할 및 권한에서 설정한 IAM 역할이 필요하지 않으면 취소합니다.
이 요청에 대한 전체 매개변수 목록은 Cloud SQL Admin API 페이지를 참조하세요.

여러 파일에서 MySQL용 Cloud SQL로 동시에 데이터 가져오기

다음 섹션에는 여러 파일에서 MySQL용 Cloud SQL로 동시에 데이터를 가져오는 방법에 대한 정보가 포함되어 있습니다.

여러 파일에서 데이터를 MySQL용 Cloud SQL로 동시에 가져오는 데 필요한 역할 및 권한

데이터를 Cloud Storage에서 Cloud SQL로 가져오려면 가져오기를 시작하는 사용자에게 다음 역할 중 하나가 있어야 합니다.

또한 Cloud SQL 인스턴스의 서비스 계정에는 다음 역할 중 하나가 있어야 합니다.

  • storage.objectAdmin IAM 역할
  • 다음 권한이 포함된 맞춤 역할:
    • storage.objects.get
    • storage.objects.list(동시에 파일을 가져오는 경우에만)

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

MySQL용 Cloud SQL로 데이터 가져오기

Cloud Storage에 있는 여러 파일에서 데이터베이스로 데이터를 동시에 가져올 수 있습니다. 이렇게 하려면 loadDump 유틸리티를 사용합니다.

gcloud

여러 파일의 데이터를 Cloud SQL로 동시에 가져오려면 다음 단계를 완료하세요.

  1. Cloud Storage 버킷을 만듭니다.
  2. 버킷에 파일을 업로드합니다.

    버킷에 파일 업로드하기에 대한 도움말은 파일에서 객체 업로드를 참조하세요.

  3. 파일을 가져올 Cloud SQL 인스턴스의 서비스 계정을 찾으려면
    gcloud sql instances describe 명령어를 사용합니다.
    gcloud sql instances describe INSTANCE_NAME
    
  4. INSTANCE_NAME을 Cloud SQL 인스턴스의 이름으로 바꿉니다.

    출력에서 serviceAccountEmailAddress 필드와 연결된 값을 찾습니다.

  5. 서비스 계정에 storage.objectAdmin IAM 역할을 부여하려면 gsutil iam 유틸리티를 사용합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  6. 여러 파일의 데이터를 Cloud SQL로 동시에 가져오려면 gcloud sql import sql 명령어를 사용합니다.
    gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME \
    --offload \
    --parallel \
    --threads=THREAD_NUMBER \
    --database=DATABASE_NAME
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 파일을 동시에 가져올 Cloud SQL 인스턴스의 이름입니다.
    • BUCKET_NAME: Cloud Storage 버킷의 이름입니다.
    • BUCKET_PATH: 가져오기 파일이 저장되는 버킷의 경로입니다.
    • FOLDER_NAME: 가져오기 파일이 저장되는 폴더입니다.
    • THREAD_NUMBER: Cloud SQL에서 파일을 동시에 가져오는 데 사용하는 스레드 수입니다. 예를 들어 한 번에 파일 3개를 동시에 가져오려면 이 매개변수의 값으로 3을 지정합니다.
    • DATABASE_NAME(선택사항): 가져오기를 수행할 Cloud SQL 인스턴스 내의 데이터베이스 이름입니다. 데이터베이스를 지정하지 않으면 Cloud SQL에서 인스턴스의 모든 데이터베이스를 가져옵니다.

    명령어가 ERROR_RDBMS와 같은 오류를 반환할 경우 권한을 검토하세요. 이 오류는 권한 문제로 인해 발생하는 경우가 자주 있습니다.

  7. MySQL용 Cloud SQL로 가져오기에 필요한 역할 및 권한에서 설정한 IAM 권한이 필요하지 않으면 gsutil iam을 사용하여 삭제합니다.

REST v1

여러 파일의 데이터를 Cloud SQL로 동시에 가져오려면 다음 단계를 완료하세요.

  1. Cloud Storage 버킷을 만듭니다.
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    다음을 바꿉니다.
    • PROJECT_NAME: 만들려는 Cloud Storage 버킷을 포함하는 Google Cloud 프로젝트의 이름입니다.
    • LOCATION_NAME: 가져올 파일을 저장할 버킷의 위치입니다. 예를 들면 us-east1입니다.
    • BUCKET_NAME: 이름 지정 요구사항이 적용되는 버킷의 이름입니다. 예를 들면 my-bucket입니다.
  2. 버킷에 파일을 업로드합니다.

    버킷에 파일 업로드하기에 대한 도움말은 파일에서 객체 업로드를 참조하세요.

  3. 인스턴스에 버킷의 storage.objectAdmin IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  4. 여러 파일의 데이터를 Cloud SQL로 동시에 가져옵니다.

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

    • PROJECT_NAME: 만든 Cloud Storage 버킷이 포함된 Google Cloud 프로젝트의 이름입니다.
    • INSTANCE_NAME: 파일을 동시에 가져올 Cloud SQL 인스턴스의 이름입니다.
    • BUCKET_NAME: Cloud Storage 버킷의 이름입니다.
    • BUCKET_PATH: 가져오기 파일이 저장되는 버킷의 경로입니다.
    • FOLDER_NAME: 가져오기 파일이 저장되는 폴더입니다.
    • DATABASE_NAME(선택사항): 가져오기를 수행할 Cloud SQL 인스턴스 내의 데이터베이스 이름입니다. 데이터베이스를 지정하지 않으면 Cloud SQL에서 인스턴스의 모든 데이터베이스를 가져옵니다.
    • THREAD_NUMBER: Cloud SQL에서 파일을 동시에 가져오는 데 사용하는 스레드 수입니다. 예를 들어 한 번에 파일 3개를 동시에 가져오려면 이 매개변수의 값으로 3을 지정합니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

    JSON 요청 본문:

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlImportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

    다음과 비슷한 JSON 응답이 표시됩니다.

    이 요청에 대한 전체 매개변수 목록은 Cloud SQL Admin API 페이지를 참조하세요.
  5. MySQL용 Cloud SQL로 가져오기에 필요한 역할 및 권한에서 설정한 IAM 권한이 필요하지 않으면 gsutil iam을 사용하여 삭제합니다.

REST v1beta4

여러 파일의 데이터를 Cloud SQL로 동시에 가져오려면 다음 단계를 완료하세요.

  1. Cloud Storage 버킷을 만듭니다.
    gsutil mb -p PROJECT_NAME -l LOCATION_NAME gs://BUCKET_NAME
    
    다음을 바꿉니다.
    • PROJECT_NAME: 만들려는 Cloud Storage 버킷을 포함하는 Google Cloud 프로젝트의 이름입니다.
    • LOCATION_NAME: 가져올 파일을 저장할 버킷의 위치입니다. 예를 들면 us-east1입니다.
    • BUCKET_NAME: 이름 지정 요구사항이 적용되는 버킷의 이름입니다. 예를 들면 my-bucket입니다.
  2. 버킷에 파일을 업로드합니다.

    버킷에 파일 업로드하기에 대한 도움말은 파일에서 객체 업로드를 참조하세요.

  3. 인스턴스에 버킷의 storage.objectAdmin IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  4. 여러 파일의 데이터를 Cloud SQL로 동시에 가져옵니다.

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

    • PROJECT_NAME: 만든 Cloud Storage 버킷이 포함된 Google Cloud 프로젝트의 이름입니다.
    • INSTANCE_NAME: 파일을 동시에 가져올 Cloud SQL 인스턴스의 이름입니다.
    • BUCKET_NAME: Cloud Storage 버킷의 이름입니다.
    • BUCKET_PATH: 가져오기 파일이 저장되는 버킷의 경로입니다.
    • FOLDER_NAME: 가져오기 파일이 저장되는 폴더입니다.
    • DATABASE_NAME(선택사항): 가져오기를 수행할 Cloud SQL 인스턴스 내의 데이터베이스 이름입니다. 데이터베이스를 지정하지 않으면 Cloud SQL에서 인스턴스의 모든 데이터베이스를 가져옵니다.
    • THREAD_NUMBER: Cloud SQL에서 파일을 동시에 가져오는 데 사용하는 스레드 수입니다. 예를 들어 한 번에 파일 3개를 동시에 가져오려면 이 매개변수의 값으로 3을 지정합니다.

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

    JSON 요청 본문:

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/BUCKET_PATH/FOLDER_NAME",
          "databases": ["DATABASE_NAME"],
          "offload": [TRUE|FALSE],
          "sqlImportOptions": {
            "parallel": [TRUE|FALSE],
            "threads": [THREAD_NUMBER]
           }
       }
    }
    

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

    다음과 비슷한 JSON 응답이 표시됩니다.

    이 요청에 대한 전체 매개변수 목록은 Cloud SQL Admin API 페이지를 참조하세요.
  5. MySQL용 Cloud SQL로 가져오기에 필요한 역할 및 권한에서 설정한 IAM 권한이 필요하지 않으면 gsutil iam을 사용하여 삭제합니다.

제한사항

  • 여러 파일에서 데이터를 동시에 가져오거나 내보낼 때 스레드를 너무 많이 지정하면 Cloud SQL 인스턴스의 메모리 용량을 초과하여 사용할 수 있습니다. 이 경우 내부 오류 메시지가 표시됩니다. 인스턴스의 메모리 사용량을 확인하고 필요에 따라 인스턴스 크기를 늘립니다. 자세한 내용은 인스턴스 설정 정보를 참조하세요.
  • 내보내기를 수행할 때 데이터베이스 이름의 쉼표 또는 databases 또는 tables 필드의 테이블 이름은 지원되지 않습니다.
  • 초기 덤프 파일 다운로드를 위한 디스크 공간이 충분한지 확인합니다. 그렇지 않으면 no space left on disk 오류가 표시됩니다.
  • 인스턴스에 가상 CPU(vCPU)가 하나만 있으면 여러 파일을 동시에 가져오거나 내보낼 수 없습니다. 인스턴스의 vCPU 수는 가져오기 또는 내보내기 작업에 사용하는 스레드 수보다 작을 수 없으며 스레드 수는 2개 이상이어야 합니다.
  • 내보내기 작업 중에 CREATE, DROP 또는 ALTER와 같은 데이터 정의 언어(DDL) 문을 작성하면 작업이 실패하거나 내보낸 데이터가 PITR(point-in-time recovery) 스냅샷과 일치하지 않을 수 있습니다.
  • 가져오기 작업이 실패하면 부분적으로 가져온 데이터가 남아 있을 수 있습니다. DDL 문의 경우 MySQL이 자동으로 커밋됩니다. 이 경우 데이터를 다시 가져오기 전에 부분 데이터를 삭제하세요.

다음 단계