데이터 가져오기 및 내보내기 권장사항

이 페이지에서는 Cloud SQL에서 데이터를 가져오고 내보낼 때의 권장사항을 제공합니다. Cloud SQL로 데이터를 가져오는 방법에 대한 단계별 안내는 데이터 가져오기를 참조하세요.

관리하는 MySQL 인스턴스에서 사용할 데이터를 Cloud SQL에서 내보내려면 SQL 덤프 파일을 사용하여 내보내기 및 가져오기 또는 CSV 파일을 사용하여 내보내기 및 가져오기를 참조하세요.

가져오기 및 내보내기 권장사항

다음은 데이터를 가져오고 내보낼 때 고려해야 할 권장사항입니다.

가져오기와 내보내기에 동일한 SQL 모드 사용

SQL 모드 설정은 Cloud SQL이 SQL 쿼리를 해석하는 방법에 영향을 줍니다. 예를 들어 Strict SQL을 사용 설정하지 않고 데이터베이스에서 내보낸 다음 Cloud SQL(기본적으로 Strict SQL이 사용 설정됨)로 가져오기를 시도하는 경우 가져오기가 실패할 수 있습니다. 권장사항은 내보내기에 사용한 것과 동일한 SQL 모드를 가져오기에 사용하는 것입니다.

원본 데이터베이스와 대상 데이터베이스의 SQL 모드를 검토하여 호환성을 확인합니다. 특히 Strict SQL 모드를 사용 설정하는 플래그에 주의합니다. Strict SQL이 데이터베이스에 설정되지 않은 경우 Cloud SQL에서 제거하는 것이 좋습니다. Strict SQL을 제거하는 경우 다른 플래그를 설정해야 합니다.

Cloud SQL 인스턴스에 원하는 모드가 설정되어 있는지 확인하려면 SELECT @@GLOBAL.sql_mode;를 실행합니다.

Cloud Storage 요청자 지불 버킷 사용 금지

Cloud SQL에서 가져오기와 내보내기에 요청자 지불이 사용 설정된 Cloud Storage 버킷을 사용할 수 없습니다.

내보내기가 성능에 미치는 영향 최소화

Cloud SQL에서 표준 내보내기의 경우 내보내기는 데이터베이스가 온라인 상태일 때 실행됩니다. 내보내는 데이터 양이 적을수록 미치는 영향이 최소화될 가능성이 높습니다. 그러나 대규모 데이터베이스가 있거나 데이터베이스에 BLOB와 같은 대형 객체가 있으면 내보내기로 인해 데이터베이스 성능이 저하될 수 있습니다. 이로 인해 데이터베이스에 대한 데이터베이스 쿼리와 작업을 수행하는 데 걸리는 시간도 영향을 받을 수 있습니다. 내보내기를 시작한 후에는 데이터베이스가 느리게 응답하더라도 중지할 수 없습니다.

내보내기 중에 응답이 느려지지 않도록 하려면 다음을 수행하면 됩니다.

  1. 읽기 복제본에서 내보내기를 수행합니다. 자주(매일 또는 더 자주) 내보내기를 수행하지만 내보내는 데이터 양이 적은 경우 이 옵션이 적합할 수 있습니다. 읽기 복제본에서 내보내기를 수행하려면 읽기 복제본 인스턴스에서 Google Cloud 콘솔, gcloud, REST API 내보내기 기능을 사용합니다. 읽기 복제본을 만들고 관리하는 방법에 대한 자세한 내용은 읽기 복제본 만들기를 참조하세요.

  2. 서버리스 내보내기를 사용합니다. 서버리스 내보내기를 사용하면 Cloud SQL에서 내보내기 작업을 오프로드할 별도의 임시 인스턴스를 만듭니다. 내보내기 작업을 오프로드하면 기본 인스턴스의 데이터베이스가 계속 쿼리를 처리하고 일반 성능 속도로 작업을 수행할 수 있습니다. 데이터 내보내기가 완료되면 임시 인스턴스가 자동으로 삭제됩니다. 대규모 데이터베이스의 일회성 내보내기를 수행하는 경우 이 옵션이 적합할 수 있습니다. Google Cloud 콘솔, gcloud, REST API 내보내기 기능offload 플래그와 함께 사용하여 서버리스 내보내기 작업을 수행합니다.

    서버리스 내보내기 작업 중에 인스턴스 수정, 가져오기, 장애 조치와 같은 일부 다른 작업을 실행할 수 있습니다. 그러나 delete를 선택하면 인스턴스를 삭제한 후 내보내기 작업이 잠시 중지되고 데이터를 내보낼 수 없습니다.

    서버리스 내보내기 작업이 실행되는 동안 차단될 수 있는 작업은 다음 표를 참조하세요.
    현재 작업 새 작업 차단 여부
    모든 작업 서버리스 내보내기
    서버리스 내보내기 서버리스 내보내기를 제외한 모든 작업 아니요
    서버리스 내보내기를 제외한 모든 작업 서버리스 내보내기를 제외한 모든 작업

    서버리스 내보내기는 임시 인스턴스를 만드는 시간으로 인해 표준 내보내기보다 시간이 오래 걸립니다. 최소한 5분 이상 소요되지만 대규모 데이터베이스의 경우에는 더 오래 걸릴 수 있습니다. 사용할 내보내기 유형을 결정하기 전에 시간, 성능, 비용에 미치는 영향을 고려하세요.

SQL 덤프 파일을 만들 때 올바른 플래그 사용

데이터를 SQL 덤프 파일로 내보낼 때 올바른 플래그를 사용하지 않을 경우 가져오기가 실패할 수 있습니다. Cloud SQL로 가져올 SQL 덤프 파일 만들기에 대한 자세한 내용은 SQL 덤프 파일 만들기를 참조하세요.

데이터를 압축하여 비용 절감

Cloud SQL에서는 압축된 파일과 압축되지 않은 파일을 모두 가져오고 내보낼 수 있습니다. 특히 대규모 인스턴스를 내보낼 때 파일을 압축하면 Cloud Storage에서 차지하는 저장공간 및 스토리지 비용을 상당 부분 절약할 수 있습니다.

SQL 덤프 파일 또는 CSV 파일을 내보낼 때 .gz 파일 확장자를 사용하여 데이터를 압축하세요. 파일 확장자가 .gz인 파일을 가져오면 자동으로 압축이 풀립니다.

장기 실행 가져오기 및 내보내기 프로세스 줄이기

Cloud SQL로 가져오고 Cloud SQL에서 내보내는 작업은 처리 중인 데이터의 크기에 따라 완료하는 데 많은 시간이 걸릴 수 있습니다. 이에 따른 영향은 다음과 같습니다.

  • 장기 실행 Cloud SQL 인스턴스 작업을 중지할 수 없습니다.
  • 각 인스턴스에 대해 한 번에 하나씩만 가져오기 또는 내보내기 작업을 수행할 수 있고 가져오기 또는 내보내기를 장기간 실행하면 일일 자동 백업과 같은 다른 작업이 차단됩니다. 서버리스 내보내기를 사용하면 인스턴스 수정, 가져오기, 장애 조치, 일일 자동 백업 차단 해제를 비롯한 다른 작업을 실행할 수 있습니다.

더 작은 데이터 배치로 Cloud SQL 가져오기 또는 내보내기 기능을 사용하여 각 작업을 완료하는 데 걸리는 시간을 단축시킬 수 있습니다.

내보내기의 경우 읽기 복제본에서 내보내기를 수행하거나 서버리스 내보내기를 사용하여 내보내기가 실행되는 동안 데이터베이스 성능에 미치는 영향을 최소화하고 인스턴스에서 다른 작업이 실행되도록 허용할 수 있습니다.

자세한 팁은 Cloud SQL 인스턴스 문제 진단을 참조하세요.

InnoDB 사용

InnoDB는 MySQL 인스턴스에 지원되는 유일한 스토리지 엔진입니다.

다음과 같이 sed 스크립트를 통해 mysqldump 출력을 파이핑하여 테이블을 MyISAM에서 InnoDB로 변환할 수 있습니다.

mysqldump --databases [DATABASE_NAME] \
-h [INSTANCE_IP] -u [USERNAME] -p [PASSWORD] \
--hex-blob --default-character-set=utf8mb4 | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/g' > [DATABASE_FILE].sql

DEFINER 절이 있는 메타데이터가 포함된 MySQL 가져오기 및 마이그레이션 작업

MySQL 가져오기 또는 마이그레이션 작업은 사용자 데이터를 마이그레이션하지 않으므로 사용자가 DEFINER 절로 정의한 메타데이터가 포함된 소스 및 덤프 파일은 사용자가 아직 그곳에 존재하지 않으므로 가져오기나 마이그레이션에 실패하게 됩니다.

메타데이터에 어느 DEFINER 절이 존재하는지 식별하려면 다음 쿼리를 사용하거나 덤프 파일에서 검색하여 대상 인스턴스에 존재하지 않는 사용자나 root%localhost 항목이 있는지 확인하세요.

SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.EVENTS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.ROUTINES;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.TRIGGERS;
SELECT DISTINCT DEFINER FROM INFORMATION_SCHEMA.VIEWS;

이러한 메타데이터가 포함된 소스에서 가져오기 또는 마이그레이션 작업을 실행하려면 다음 중 하나를 수행하면 됩니다.

  • 가져오기 또는 마이그레이션 작업을 시작하기 전에 대상 Cloud SQL 인스턴스에서 사용자를 만듭니다.
  • 가져오기 또는 마이그레이션 작업을 시작하기 전에 DEFINER 절을 소스 MySQL 인스턴스 또는 덤프 파일에서 INVOKER로 업데이트합니다.

가져온 데이터베이스 확인

가져오기 작업이 완료된 후 데이터베이스에 연결하고 적절한 데이터베이스 명령어를 실행하여 콘텐츠가 올바른지 확인합니다. 예를 들어 데이터베이스, 테이블, 특정 항목을 연결하고 나열합니다.

알려진 제한사항

알려진 제한사항 목록은 데이터 가져오기 및 내보내기 문제를 참조하세요.

내보내기 작업 자동화

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

문제 해결

가져오기 작업 문제 해결

문제 문제 해결
HTTP Error 409: Operation failed because another operation was already in progress. 인스턴스에 대기 중인 작업이 이미 있습니다. 한 번에 하나의 작업만 허용됩니다. 현재 작업이 완료된 후 요청을 시도하세요.
가져오기 작업이 너무 오래 걸립니다. 활성 연결이 너무 많으면 가져오기 작업을 방해할 수 있습니다.

사용하지 않는 작업을 종료합니다. Cloud SQL 인스턴스의 CPU 및 메모리 사용량을 확인하여 사용 가능한 리소스가 충분한지 확인합니다. 가져오기에 최대 리소스를 보장하는 가장 좋은 방법은 작업을 시작하기 전에 인스턴스를 다시 시작하는 것입니다.

다시 시작하면 다음과 같은 결과가 발생합니다.

  • 모든 연결이 끊깁니다.
  • 리소스를 소비할 수 있는 모든 태스크가 종료됩니다.
덤프 파일에 참조된 하나 이상의 사용자가 없으면 가져오기 작업이 실패할 수 있습니다. 덤프 파일을 가져오기 전에 객체를 소유하거나 덤프된 데이터베이스의 객체에 대한 권한이 부여된 모든 데이터베이스 사용자가 대상 데이터베이스에 있어야 합니다. 그렇지 않으면 가져오기 작업이 원래 소유권이나 권한으로 객체를 다시 만들지 못합니다.

가져오기 전에 데이터베이스 사용자를 만듭니다.

테이블이 존재하지 않는다는 오류와 함께 가져오기 작업이 실패합니다. 테이블은 다른 테이블의 외래 키 종속 항목을 가질 수 있으며, 작업 순서에 따라 이러한 테이블 중 하나 이상이 가져오기 작업 도중에는 아직 존재하지 않을 수 있습니다.

해결 방법:

덤프 파일의 시작 부분에 다음 줄을 추가합니다.

SET FOREIGN_KEY_CHECKS=0;
  

또한 덤프 파일의 끝 부분에 다음 줄을 추가합니다.

SET FOREIGN_KEY_CHECKS=1;
  

이러한 설정은 가져오기 작업이 진행되는 동안 데이터 무결성 검사를 비활성화하고 데이터가 로드된 후 다시 활성화합니다. 덤프 파일을 만드는 동안 데이터가 이미 검증되었으므로 데이터베이스의 데이터 무결성에는 영향이 없습니다.

내보내기 작업 문제 해결

문제 문제 해결
HTTP Error 409: Operation failed because another operation was already in progress. 인스턴스에 대기 중인 작업이 이미 있습니다. 한 번에 하나의 작업만 허용됩니다. 현재 작업이 완료된 후 요청을 시도하세요.
HTTP Error 403: The service account does not have the required permissions for the bucket. 버킷이 있고 내보내기를 수행하는 Cloud SQL 인스턴스의 서비스 계정에 버킷으로 내보낼 수 있는 Storage Object Creator 역할(roles/storage.objectCreator)이 있는지 확인합니다. Cloud Storage에 대한 IAM 역할을 참조하세요.
CSV 내보내기에 성공했지만 SQL 내보내기에 실패했습니다. CSV 형식과 SQL 형식은 내보내기 방식이 서로 다릅니다. SQL 형식은 전체 데이터베이스를 내보내며 완료하는 데 더 오래 걸릴 수 있습니다. CSV 형식은 내보내기에 포함할 데이터베이스 요소를 정의할 수 있습니다.

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

내보내기가 너무 오래 걸림 Cloud SQL은 동시 동기 작업을 지원하지 않습니다.

내보내기 오프로딩을 사용합니다. 상위 수준의 내보내기 오프로드에서 Cloud SQL은 소스 인스턴스에서 내보내기를 실행하는 대신 오프로드 인스턴스를 가동하여 내보내기를 수행합니다. 내보내기 오프로드를 사용하면 소스 인스턴스의 성능을 향상하고 내보내기를 실행하는 중에 관리 작업 차단을 해제할 수 있는 등 여러 가지 이점이 있습니다. 내보내기 오프로드를 사용하면 오프로드 인스턴스를 불러오는 데 걸리는 시간에 따라 총 지연 시간이 늘어날 수 있습니다. 일반적으로 적절한 크기의 내보내기에서는 지연 시간이 중요하지 않습니다. 그러나 내보내기가 충분히 작으면 지연 시간이 증가될 수 있습니다.

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

백업 자동화에 대한 이 문서와 마찬가지로 Cloud Scheduler, Pub/Sub, Cloud Run 함수와 같은 Google Cloud 제품을 사용하여 자체 자동 내보내기 시스템을 빌드할 수 있습니다.

다음 단계