Cloud SQL에서 데이터 내보내기

이 페이지에서는 Cloud SQL 인스턴스 또는 Cloud SQL에서 관리하지 않는 데이터베이스 서버에서 데이터를 내보내는 방법을 설명합니다.

내보내기는 데이터베이스 리소스를 사용하지만 인스턴스가 프로비저닝되지 않는 한 일반적인 데이터베이스 작업에 지장을 주지 않습니다.

데이터 내보내기 권장사항은 데이터 가져오기 및 내보내기 권장사항을 참조하세요.

CSV 및 mysqldump 내보내기는 다른 MySQL 데이터베이스에서 내보낸 것과 동일하게 Cloud SQL에서 동작합니다.

시작하기 전에

필요한 역할과 권한을 구성했는지 확인합니다. Cloud Storage로 데이터를 내보내려면 인스턴스의 서비스 계정 또는 사용자에게 다음이 있어야 합니다.

  • Cloud SQL 편집자 역할 또는 cloudsql.instances.export 권한이 포함된 커스텀 역할
  • roles/storage.legacyBucketWriter IAM 역할
  • 서비스 계정 또는 사용자가 가져오기 작업도 수행하는 경우 cloudsql.instances.import 권한과 roles/storage.legacyObjectReader IAM 역할을 부여합니다.

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

인스턴스의 **개요** 페이지에 있는 Google Cloud Console에서 인스턴스의 서비스 계정 이름을 확인할 수 있습니다. gsutil 도구로 버킷을 검사하여 Cloud Storage 버킷의 역할을 확인할 수 있습니다.

gsutil iam get gs://[BUCKET_NAME]

버킷에 IAM을 사용하는 방법을 자세히 알아보세요.

Cloud SQL에서 Cloud Storage의 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 Console의 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스 페이지로 이동

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

gcloud

  1. Cloud Storage 버킷을 아직 만들지 않았으면 만듭니다.

    버킷 만들기는 스토리지 버킷 만들기를 참조하세요.

  2. 파일을 버킷에 업로드합니다.

    버킷에 파일 업로드는 객체 업로드를 참조하세요.

  3. 어떤 인스턴스에서 내보낼지 설명합니다.
      gcloud sql instances describe [INSTANCE_NAME]
      
  4. serviceAccountEmailAddress 필드를 복사합니다.
  5. gsutil iam을 사용하여 버킷의 서비스 계정에 storage.objectAdmin IAM 역할을 부여합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  6. 데이터베이스를 내보냅니다.
      gcloud sql export sql [INSTANCE_NAME] gs://[BUCKET_NAME]/sqldumpfile.gz \
                                  --database=[DATABASE_NAME] --offload
      

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

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

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

REST v1beta4

  1. 내보내기에 사용할 버킷을 만듭니다.
    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_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 인스턴스 내 데이터베이스의 이름
    • offload: 서버리스 내보내기를 사용 설정합니다. 서버리스 내보내기를 사용하기 위해 true로 설정합니다.

    HTTP 메서드 및 URL:

    POST https://www.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 응답이 표시됩니다.

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

Cloud SQL에서 Cloud Storage의 CSV 파일로 데이터 내보내기

다른 도구와 환경에서 사용할 수 있는 CSV 형식으로 데이터를 내보낼 수 있습니다. 내보내기는 데이터베이스 수준에서 발생합니다. CSV 내보내기 도중에 내보낼 스키마를 지정할 수 있습니다. 데이터베이스 수준의 모든 스키마는 내보낼 수 있습니다.

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

Console

  1. Google Cloud Console의 Cloud SQL 인스턴스 페이지로 이동합니다.

    Cloud SQL 인스턴스 페이지로 이동

  2. 인스턴스를 클릭하여 개요 페이지를 엽니다.
  3. 내보내기를 클릭합니다.
  4. Cloud Storage 내보내기 위치에서 내보낼 Cloud Storage 버킷이나 폴더를 선택합니다.
  5. 이름 필드에 내보내기 파일 이름을 입력하고 선택을 클릭합니다.

    파일 확장자 .gz를 사용하여 내보내기 파일을 압축할 수 있습니다.

  6. 형식CSV로 설정합니다.
  7. 고급 옵션 표시를 클릭합니다.
  8. 데이터베이스 아래의 드롭다운 메뉴에서 데이터베이스의 이름을 선택합니다.
  9. SQL 쿼리에서 데이터를 내보낼 테이블을 지정하는 SQL 쿼리를 입력합니다.

    예를 들어 guestbook 데이터베이스에서 entries 테이블의 전체 콘텐츠를 내보내려면 다음 명령어를 입력합니다.

    SELECT * FROM guestbook.entries;
    데이터베이스 전체를 CSV 형식으로 내보낼 수는 없으므로 쿼리를 통해 지정한 데이터베이스에서 테이블을 지정해야 합니다.

  10. 내보내기를 클릭하여 시작합니다.
  11. 데이터베이스를 내보낼까요? 대화상자가 열리고 크기가 큰 데이터베이스의 경우 내보내기 프로세스가 1시간 이상 걸릴 수 있다는 메시지가 표시됩니다. 내보내기 작업 중에는 인스턴스에서 정보 보기만 가능합니다. 내보내기를 시작하면 중지할 수 없습니다. 내보내기를 시작해도 좋으면 내보내기를 클릭합니다. 그렇지 않으면 취소를 클릭합니다.

gcloud

  1. Cloud Storage 버킷을 아직 만들지 않았으면 만듭니다.

    버킷 만들기는 스토리지 버킷 만들기를 참조하세요.

  2. 파일을 버킷에 업로드합니다.

    버킷에 파일 업로드는 객체 업로드를 참조하세요.

  3. 어떤 인스턴스에서 내보낼지 설명합니다.
    gcloud sql instances describe [INSTANCE_NAME]
    
  4. gsutil iam을 사용하여 버킷의 서비스 계정에 storage.objectAdmin IAM 역할을 부여합니다. IAM 권한 설정에 대한 도움말은 IAM 권한 사용을 참조하세요.
  5. 데이터베이스를 내보냅니다.
    gcloud sql export csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \
                                --database=[DATABASE_NAME] \
                                --offload \
                                --query=[SELECT_QUERY]
    

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

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

REST v1beta4

  1. 내보내기에 사용할 버킷을 만듭니다.
    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    

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

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

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

    • project-id: 프로젝트 ID
    • instance-id: 인스턴스 ID
    • bucket_name: Cloud Storage 버킷 이름
    • path_to_csv_file: CSV 파일의 경로
    • database_name: Cloud SQL 인스턴스 내 데이터베이스의 이름
    • offload: 서버리스 내보내기를 사용 설정합니다. 서버리스 내보내기를 사용하기 위해 true로 설정합니다.
    • select_query: 내보낼 SQL 쿼리

    HTTP 메서드 및 URL:

    POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    JSON 요청 본문:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": ["database_name"],
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery":"select_query"
           }
       }
    }
    

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

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

    select 쿼리가 데이터베이스를 지정하는 경우 databases 속성이 재정의됩니다.

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

CSV 형식으로 내보내기는 다음 SQL 문을 실행하는 것과 같습니다.

      SELECT [QUERY] INTO OUTFILE ... CHARACTER SET 'utf8mb4'
            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
            ESCAPED BY '\"' LINES TERMINATED BY '\n'

이 요청에 대한 전체 매개변수 목록은 instances:export 페이지를 참조하세요.

로컬 MySQL 서버에서 CSV 파일로 데이터 내보내기

Cloud SQL에서 관리하지 않는 MySQL 데이터베이스를 나중에 Cloud SQL로 가져올 수 있도록 CSV 파일로 내보내려면 다음 명령어를 사용합니다.

mysql --host=[INSTANCE_IP] --user=[USER_NAME] --password [DATABASE] \
-e " SELECT * FROM [TABLE] INTO OUTFILE '[FILE_NAME]' CHARACTER SET 'utf8mb4'
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' "

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 참조를 확인하세요.

외부 복제

외부 서버 구성에 사용할 덤프 파일을 만들려면 외부 서버에서 복제를 참조하세요.

내보내기 작업 자동화

Cloud SQL은 데이터베이스 내보내기를 자동화하는 기본 제공 방법을 제공하지 않지만 여러 Google Cloud 구성요소를 사용하여 자체 자동화 도구를 빌드할 수 있습니다. 자세한 내용은 이 가이드를 참조하세요.

문제 해결

자세한 내용을 보려면 표의 링크를 클릭하세요.

문제 설명 문제 원인 해결 방법
작업 상태를 볼 수 없음 사용자 인터페이스에 성공 또는 실패만 표시됩니다. 이 데이터베이스 명령어를 사용하여 자세히 알아보세요.
내보내기 도중 408 Error (Timeout) 발생 데이터베이스 크기와 내보내기 콘텐츠에 따라 SQL 내보내기가 오래 걸릴 수 있습니다. 여러 CSV 내보내기를 사용하여 각 작업의 크기를 줄입니다.
CSV 내보내기에 성공했지만 SQL 내보내기에 실패했습니다. SQL 내보내기는 Cloud SQL과의 호환성 문제가 발생할 가능성이 높습니다. CSV 내보내기를 사용하여 필요한 항목만 내보냅니다.
내보내기가 너무 오래 걸림 Cloud SQL은 동시 동기 작업을 지원하지 않습니다. 내보내기 오프로딩을 사용합니다. 자세히 알아보기
Error 1412: Table definition has changed. 내보내기 중에 테이블이 변경되었습니다. 덤프 작업에서 테이블 변경 문을 삭제합니다.
내보내기 작업 중에 연결이 종료되었습니다. 쿼리는 처음 7분 이내에 데이터를 생성해야 합니다. 쿼리를 수동으로 테스트합니다. 자세히 알아보기
내보내는 중에 알 수 없는 오류 발생 대역폭 문제일 수 있습니다. 인스턴스와 Cloud Storage 버킷이 동일한 리전에 있는지 확인합니다.
내보내기를 자동화하려고 합니다. Cloud SQL은 내보내기를 자동화하는 방법을 제공하지 않습니다. 이 기능을 수행하려면 자체 파이프라인을 빌드하세요. 자세히 알아보기
오류 메시지: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. 덤프 파일에서 super user@localhost(예: root@localhost)를 사용하는 이벤트, 뷰, 함수, 프로시저가 있을 수 있습니다. 이는 Cloud SQL에서는 지원되지 않습니다. Cloud SQL의 DEFINER 사용량과 우회적 해결 방법에 대해 자세히 알아보세요.

작업 상태를 볼 수 없음

진행 중인 작업의 상태를 볼 수 없습니다.

문제 원인

Google Cloud Console은 완료 시에만 성공 또는 실패를 보고하며, 경고를 반환하도록 설계되지 않았습니다.

해결 방법

데이터베이스에 연결하고 SHOW WARNINGS를 실행합니다.


내보내기 중 408 오류(시간 초과) 발생

Cloud SQL에서 내보내기 작업을 수행하는 동안 408 Error (Timeout) 오류 메시지가 표시됩니다.

문제 원인

CSV 형식과 SQL 형식은 내보내기 방식이 서로 다릅니다. SQL 형식은 전체 데이터베이스를 내보내며 완료하는 데 더 오래 걸릴 수 있습니다. CSV 형식은 내보내기에 포함할 데이터베이스 요소를 정의할 수 있습니다.

해결 방법

CSV 형식을 사용하고 여러 개의 작은 내보내기 작업을 실행하여 각 작업의 크기와 길이를 줄입니다.


CSV 내보내기에 성공했지만 SQL 내보내기에 실패

CSV 내보내기에 성공했지만 SQL 내보내기에 실패했습니다.

문제 원인

CSV 형식과 SQL 형식은 내보내기 방식이 서로 다릅니다. SQL 형식은 전체 데이터베이스를 내보내며 완료하는 데 더 오래 걸릴 수 있습니다. CSV 형식은 내보내기에 포함할 데이터베이스 요소를 정의할 수 있습니다.

해결 방법

CSV 내보내기를 사용하여 필요한 항목만 내보냅니다.


내보내기가 너무 오래 걸림

내보내기 시간이 너무 오래 걸려 다른 작업이 차단됩니다.

문제 원인

Cloud SQL은 동시 동기 작업을 지원하지 않습니다.

해결 방법

한 번에 내보내는 데이터 세트 크기를 줄여 보세요.


mysqldump: 오류 1412: 테이블 정의가 변경됨

mysqldump: Error 1412: Table definition has changed, retry transaction when dumping the table 오류 메시지가 표시됩니다.

문제 원인

내보내기 프로세스 중에 테이블이 변경되었습니다.

해결 방법

내보내기 작업 중에 다음 문을 사용하면 덤프 트랜잭션이 실패할 수 있습니다.

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
덤프 작업에서 이러한 문을 삭제합니다.


내보내기 작업 중에 연결이 종료됨

내보내기 작업 중에 연결이 종료되었습니다.

문제 원인

내보내기에서 실행되는 쿼리가 내보내기 시작 후 처음 7분 이내에 데이터를 생성하지 않아서 Cloud Storage 연결이 시간 초과될 수 있습니다.

해결 방법

클라이언트에서 연결하고 아래 명령어로 쿼리 출력을 STDOUT에 전송하여 쿼리를 수동으로 테스트합니다.

COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' )

내보내기가 시작되면 클라이언트가 즉시 데이터 전송을 시작할 것으로 예상되므로 이는 예상된 문제입니다. 전송 데이터가 없는 연결을 유지하면 연결이 끊기고 결국 내보내기에 실패하여 작업이 불확실한 상태가 됩니다. gcloud의 오류 메시지 또한 다음 메시지를 통해 이런 내용을 전달하고자 합니다.

operation is taking longer than expected


내보내는 중에 알 수 없는 오류 발생

데이터베이스를 Cloud Storage 버킷으로 내보내려고 할 때 Unknown error 오류 메시지가 표시됩니다.

문제 원인

대역폭 문제로 인해 전송이 실패할 수 있습니다.

해결 방법

Cloud SQL 인스턴스가 Cloud Storage 버킷과 다른 리전에 있을 수 있습니다. 한 대륙에서 데이터를 읽어 다른 대륙에 쓰려면 많은 네트워크 사용량이 필요하며, 이러한 간헐적인 문제를 일으킬 수 있습니다. 인스턴스와 버킷의 리전을 확인합니다.


내보내기를 자동화하려는 경우

내보내기를 자동화하려고 합니다.

문제 원인

Cloud SQL은 내보내기를 자동화하는 방법을 제공하지 않습니다.

해결 방법

Google Cloud 제품(Cloud Scheduler, Pub/Sub, Cloud Functions)을 사용하여 자체 자동 내보내기 시스템을 빌드할 수 있습니다.


ERROR_RDBMS 시스템 오류 발생

[ERROR_RDBMS] system error occurred 오류 메시지가 표시됩니다.

문제 원인

  • 사용자에게 필요한 일부 Cloud Storage 권한이 없을 수 있습니다.
  • 데이터베이스 테이블이 없을 수 있습니다.

해결 방법

  1. 최소한 버킷에 대한 WRITER 권한과 내보내기 파일에 대한 READER 권한이 있는지 확인합니다. Cloud Storage에서 액세스 제어를 구성하는 방법에 대한 자세한 내용은 액세스제어 목록 만들기 및 관리를 참조하세요.
  2. 테이블이 있는지 확인합니다. 테이블이 있다면 버킷에 대한 올바른 권한이 있는지 확인합니다.

액세스 거부됨. 이 작업에 대한 SUPER 권한(하나 이상)이 필요합니다.

Access denied; you need (at least one of) the SUPER privilege(s) for this operation 오류가 표시됩니다.

문제 원인

덤프 파일에서 super user@localhost(예: root@localhost)를 사용하는 이벤트, 뷰, 함수, 프로시저가 있을 수 있습니다. 이는 Cloud SQL에서는 지원되지 않습니다.

해결 방법

DEFINER 절이 있는 데이터베이스 가져오기에 대한 상세 정보는 이 문서를 참조하세요.

다음 단계