SQL 덤프 파일을 사용하여 내보내기 및 가져오기

이 페이지에서는 SQL 덤프 파일을 사용하여 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를 참조하세요.

MySQL용 Cloud SQL에서 SQL 덤프 파일로 내보내기

SQL 덤프 파일을 만들려면 Cloud SQL에서 Cloud Storage로 데이터를 내보냅니다. 파일이 Cloud Storage에 저장되면 다른 Cloud SQL 데이터베이스로 가져올 수 있습니다. 데이터를 로컬로 액세스할 수 있도록 Cloud Storage에서 로컬 환경으로 다운로드할 수도 있습니다.

Cloud SQL에서 내보내는 경우 mysqldump 유틸리티와 --single-transaction--hex-blob 옵션을 사용합니다. --single-transaction 옵션을 사용하면 mysqldump가 실행되기 전에 트랜잭션을 시작합니다. 전체 데이터베이스를 잠그는 대신 mysqldump가 현재 상태에서 데이터베이스를 읽을 수 있으므로 일관된 데이터 덤프가 가능합니다.

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

Cloud SQL 인스턴스의 데이터베이스에서 Cloud Storage 버킷의 SQL 덤프 파일로 데이터를 내보내려면 다음 안내를 따르세요.

Console

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
  3. 내보내기를 클릭합니다.
  4. 파일 형식 섹션에서 SQL을 클릭하여 SQL 덤프 파일을 만듭니다.
  5. 내보낼 데이터 섹션에서 이 인스턴스에 있는 하나 이상의 데이터베이스를 클릭하여 특정 데이터베이스를 내보냅니다.
  6. 드롭다운 메뉴를 사용하여 내보낼 데이터베이스를 선택합니다.
  7. 대상 섹션에서 찾아보기를 선택하여 내보낼 Cloud Storage 버킷 또는 폴더를 검색합니다.
  8. 내보내기를 클릭하여 시작합니다.

gcloud

  1. Cloud Storage 버킷을 만듭니다.
  2. 내보낼 Cloud SQL 인스턴스의 서비스 계정을 찾습니다. gcloud sql instances describe 명령어를 실행하여 수행할 수 있습니다. 출력에서 serviceAccountEmailAddress 필드를 찾습니다.
    gcloud sql instances describe INSTANCE_NAME
      
  3. gcloud storage buckets add-iam-policy-binding을 사용하여 서비스 계정에 storage.objectAdmin IAM 역할을 부여합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  4. 데이터베이스를 Cloud Storage 버킷으로 내보냅니다.
    gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz \
    --database=DATABASE_NAME \
    --offload
      

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

    export sql 명령어 사용 방법에 대한 자세한 내용은 sql export sql 명령어 참조 페이지를 확인하세요.

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

REST v1

  1. 내보내기에 사용할 버킷을 만듭니다.
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
    

    이 단계는 필수 사항은 아니지만 다른 데이터에 대한 액세스를 열지 않아도 되기 때문에 적극 권장됩니다.

  2. 인스턴스에 버킷의 legacyBucketWriter IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  3. 데이터베이스를 내보냅니다.

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

    • PROJECT_ID: 프로젝트 ID입니다.
    • INSTANCE_ID: 인스턴스 ID
    • BUCKET_NAME: Cloud Storage 버킷 이름
    • PATH_TO_DUMP_FILE: SQL 덤프 파일의 경로
    • DATABASE_NAME_1: Cloud SQL 인스턴스 내 데이터베이스의 이름
    • DATABASE_NAME_2: Cloud SQL 인스턴스 내 데이터베이스의 이름
  4. HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export

    JSON 요청 본문:

    {
     "exportContext":
       {
          "fileType": "SQL",
          "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
          "databases": ["DATABASE_NAME"],
          "offload": TRUE | FALSE
        }
    }
    

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

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

  5. 이전에 설정한 IAM 역할을 유지할 필요가 없으면 지금 삭제합니다.
이 요청에 대한 전체 매개변수 목록은 instances:export 페이지를 참조하세요.

REST v1beta4

  1. 내보내기에 사용할 버킷을 만듭니다.
    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
    

    이 단계는 필수 사항은 아니지만 다른 데이터에 대한 액세스를 열지 않아도 되기 때문에 적극 권장됩니다.

  2. 인스턴스에 버킷의 storage.objectAdmin IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  3. 데이터베이스를 내보냅니다.

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

    • PROJECT_ID: 프로젝트 ID입니다.
    • INSTANCE_ID: 인스턴스 ID
    • BUCKET_NAME: Cloud Storage 버킷 이름
    • PATH_TO_DUMP_FILE: SQL 덤프 파일의 경로
    • DATABASE_NAME_1: Cloud SQL 인스턴스 내 데이터베이스의 이름
    • DATABASE_NAME_2: Cloud SQL 인스턴스 내 데이터베이스의 이름
  4. HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/export

    JSON 요청 본문:

    {
      "exportContext":
        {
           "fileType": "SQL",
           "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
           "databases": ["DATABASE_NAME"],
           "offload": TRUE | FALSE
         }
     }
    

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

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

  5. 이전에 설정한 IAM 역할을 유지할 필요가 없으면 지금 취소합니다.
이 요청에 대한 전체 매개변수 목록은 instances:export 페이지를 참조하세요.

mysqldump를 사용하여 로컬 MySQL 서버에서 내보내기

Cloud SQL 데이터베이스로 가져올 데이터를 온프레미스 MySQL 데이터베이스에서 내보내는 경우 다음 플래그와 함께 mysqldump 유틸리티를 사용해야 합니다.

  • --databases 내보낼 데이터베이스의 명시적 목록을 지정하려면 --databases 옵션을 사용해야 합니다. 이 목록에 mysql 시스템 데이터베이스가 포함되면 안 됩니다.
  • --hex-blob 데이터베이스에 바이너리 필드가 포함된 경우 이 플래그를 사용하여 바이너리 필드를 올바르게 가져와야 합니다.
  • --set-gtid-purged=OFF GTID 정보는 SQL 덤프 파일에 포함되면 안 되고, SQL 덤프 파일로 바이너리 로깅이 사용 중지되어도 안 됩니다. (MySQL 5.5 또는 외부 복제에는 필요하지 않음)
  • --single-transaction 실행하기 전에 트랜잭션을 시작합니다. 전체 데이터베이스를 잠그는 대신 mysqldump가 현재 상태에서 데이터베이스를 읽을 수 있으므로 일관된 데이터 덤프가 가능합니다.

명령줄에서 mysqldump를 실행합니다.

mysqldump --databases DATABASE_NAME -h INSTANCE_IP -u USERNAME -p \
--hex-blob --single-transaction --set-gtid-purged=OFF \
--default-character-set=utf8mb4 > SQL_FILE.sql

mysqldump에 대한 도움말은 mysqldump 참조를 확인하세요.

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로 SQL 덤프 파일 가져오기

SQL 파일은 일련의 SQL 명령어가 포함된 일반 텍스트 파일입니다.

Console

  1. Google Cloud 콘솔에서 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스로 이동

  2. 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
  3. 가져오기를 클릭합니다.
  4. 데이터를 가져오려는 파일 선택 섹션에서 가져오기에 사용할 버킷과 SQL 덤프 파일의 경로를 입력하거나 기존 파일을 찾습니다.

    압축된 파일(.gz) 또는 압축되지 않은 파일(.sql)을 가져올 수 있습니다.

  5. 형식SQL을 선택합니다.
  6. 데이터를 가져올 데이터베이스를 선택합니다.

    이렇게 하면 가져오기 전에 Cloud SQL이 USE DATABASE 문을 실행합니다.

  7. 가져오기를 수행할 사용자를 지정하려면 사용자를 선택합니다.

    가져오기 파일에 특정 사용자가 수행해야 하는 문이 포함되어 있다면, 이 필드를 사용하여 해당 사용자를 지정합니다.

  8. 가져오기를 클릭하여 가져오기를 시작합니다.

gcloud

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

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

  3. 가져오기의 대상 인스턴스를 설명합니다.
    gcloud sql instances describe INSTANCE_NAME
    
  4. serviceAccountEmailAddress 필드를 복사합니다.
  5. gcloud storage buckets add-iam-policy-binding을 사용하여 버킷의 서비스 계정에 storage.objectAdmin IAM 역할을 부여합니다.
    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
      --member=serviceAccount:SERVICE-ACCOUNT \
      --role=roles/storage.objectAdmin
      
    IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  6. 데이터베이스를 가져옵니다.
    gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \
    --database=DATABASE_NAME
    

    import sql 명령어 사용에 대한 자세한 내용은 sql import sql 명령어 참조 페이지를 확인하세요.

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

  7. 이전에 설정한 IAM 권한을 유지할 필요가 없으면 gcloud storage buckets remove-iam-policy-binding을 사용하여 삭제합니다.

REST v1

  1. SQL 덤프 파일을 만듭니다. 링크된 안내에서는 덤프 파일이 Cloud SQL과 호환되도록 하는 특정 플래그를 설정합니다.

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

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

  4. 인스턴스에 버킷의 legacyBucketWriterobjectViewer IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  5. 덤프 파일을 가져옵니다.

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

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID
    • bucket_name: Cloud Storage 버킷 이름
    • path_to_sql_file: SQL 파일 경로
    • database_name: Cloud SQL 인스턴스 내 데이터베이스의 이름

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    JSON 요청 본문:

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

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

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

    이 요청을 위한 매개변수의 전체 목록은 instances:import 페이지를 참조하세요.
  6. 이전에 설정한 IAM 권한을 유지할 필요가 없으면 지금 삭제합니다.

REST v1beta4

  1. SQL 덤프 파일을 만듭니다. 링크된 안내에서는 덤프 파일이 Cloud SQL과 호환되도록 하는 특정 플래그를 설정합니다.

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

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

  4. 인스턴스에 버킷의 storage.objectAdmin IAM 역할을 제공합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  5. 덤프 파일을 가져옵니다.

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

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID
    • bucket_name: Cloud Storage 버킷 이름
    • path_to_sql_file: SQL 파일 경로
    • database_name: Cloud SQL 인스턴스 내 데이터베이스의 이름

    HTTP 메서드 및 URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    JSON 요청 본문:

    {
     "importContext":
       {
          "fileType": "SQL",
          "uri": "gs://bucket_name/path_to_sql_file",
          "database": "database_name"
        }
    }
    
    

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

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

    이 요청을 위한 매개변수의 전체 목록은 instances:import 페이지를 참조하세요.
  6. 이전에 설정한 IAM 권한을 유지할 필요가 없으면 지금 삭제합니다.

다음 단계