외부 서버에서 복제하도록 Cloud SQL 구성

이 페이지에서는 Cloud SQL로 복제하기 위해 외부 서버를 구성하고, Cloud SQL에서 소스 표현 인스턴스를 만드는 방법과 Cloud SQL로 복제하는 옵션에 대해 설명합니다. 선택한 옵션의 복제 단계를 진행하려면 먼저 이 페이지의 모든 단계를 완료해야 합니다.

이 페이지에 설명된 단계 대신 Database Migration Service는 외부 서버에서 Cloud SQL로 지속적 복제 또는 일회성 데이터베이스 마이그레이션을 제공합니다.

시작하기 전에

용어

  • 외부 서버. 데이터를 복제할 Cloud SQL 외부의 MySQL 서버입니다. 소스 데이터베이스 또는 외부 데이터베이스 서버라고도 합니다.

  • 소스 표현 인스턴스. Cloud SQL 복제본에 대한 외부 서버를 나타내는 모의 Cloud SQL 인스턴스입니다. Google Cloud Console에 표시되며 정규 Cloud SQL 인스턴스와 동일하게 나타납니다. 하지만 데이터를 포함하지 않으며 구성 또는 유지보수가 필요하지 않고 결제에 영향을 미치지 않습니다. 외부 서버 구성을 포함합니다.

  • Cloud SQL 복제본. 외부 서버에서 복제하는 Cloud SQL 인스턴스. 외부 기본 읽기 복제본이라고도 합니다.

  • 복제 사용자 계정. 외부 서버와 Cloud SQL 복제본 간의 복제를 허용할 권한이 충분한 외부 서버의 MySQL 사용자 계정.

  • 관리형 가져오기. 외부 서버에서 Cloud SQL 복제본으로 직접 데이터를 가져오는 프로세스입니다. 이 경우 Cloud SQL은 복제 사용자 계정을 사용하여 외부 서버에 연결하고 외부 서버에서 직접 mysqldump를 실행하여 Cloud SQL 복제본으로 데이터를 가져옵니다.

Google Cloud 프로젝트 설정

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Cloud SQL Admin API를 사용 설정합니다.

    API 사용 설정

  5. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  6. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  7. Cloud SQL Admin API를 사용 설정합니다.

    API 사용 설정

  8. 사용자 계정에 Cloud SQL 관리자, 스토리지 관리자, Compute 뷰어 역할이 있는지 확인합니다.

    IAM 페이지로 이동

  9. Cloud SQL Admin API를 사용 설정합니다.

    API 사용 설정

Google Cloud SDK 설치

복제를 구성하려면 외부 서버에 Google Cloud SDK를 설치합니다. 이 파일이 이미 다른 곳에 설치되어 있지 않은 경우 외부 서버에 설치할 수 있습니다.

복제용 외부 서버 설정

외부 서버 체크리스트

  • MySQL 5.5, 5.6, 5.7, 8.0이 외부 서버에 설치되어 있는지 확인합니다. MySQL Community Edition, MySQL용 Cloud SQL, Amazon Relational Database Service(RDS)가 지원됩니다.

    • Cloud SQL 복제본에서 외부 서버에서 실행되는 MySQL 버전과 같거나 더 높은 주 버전의 MySQL을 사용해야 합니다.
    • MySQL 5.5가 외부 서버에 설치된 경우 GTID가 지원되지 않습니다.
  • 바이너리 로그가 사용 설정되어 있는지와 다음을 확인합니다.

  • 외부 서버에 GTID가 사용 설정되었는지 확인합니다. 그러면 복제를 설정하는 데 필요한 단계가 영향을 받습니다.

  • 외부 서버에 전역 읽기 잠금 권한이 있는지 확인합니다. 그러면 복제를 설정하는 데 필요한 단계가 영향을 받습니다.

  • Cloud SQL 복제본이 비공개 IP를 사용할 경우 외부 서버의 방화벽은 Cloud SQL 복제본이 해당 ipConfiguration 설정privateNetwork 필드에 사용할 VPC 네트워크의 비공개 서비스 액세스에 대해 할당된 전체 내부 IP 범위를 허용하도록 구성되어야 합니다.

    • 콘솔에서 내부 IP 범위를 찾으려면 다음 안내를 따르세요.
  • 외부 서버에 DEFINER 절(뷰, 이벤트, 트리거 또는 저장 프로시져)이 포함된 경우 이러한 문이 실행되는 순서에 따라 복제가 실패할 수 있습니다. Cloud SQL의 DEFINER 사용 및 가능한 해결 방법에 대해 자세히 알아보세요.

바이너리 로그 보관 구성

최소 24시간 동안 바이너리 로그를 유지하도록 외부 서버를 구성해야 합니다.

MySQL 커뮤니티

외부 서버가 MySQL Community Edition을 사용하는 경우 이러한 MySQL 명령어를 사용하여 바이너리 로그 보관 설정을 업데이트할 수 있습니다.

MySQL용 Cloud SQL

외부 서버에서 MySQL용 Cloud SQL을 사용하는 경우 기본적으로 바이너리 로그는 7일 동안 보관됩니다. 이 설정은 변경할 수 있습니다.

Amazon RDS

외부 서버가 Amazon RDS 인스턴스인 경우 다음 명령어를 사용하여 바이너리 로그 보관 설정을 업데이트할 수 있습니다.

call mysql.rds_set_configuration('binlog retention ', HOURS);
속성 설명
시간 RDS 인스턴스가 보관할 바이너리 로그의 총 시간입니다.

자세한 내용은 mysql.rds_set_configuration을 참조하세요.

복제 사용자 계정 만들기

Cloud SQL 복제본에 대한 복제 관리 전용 MySQL 사용자 계정은 외부 서버에 있어야 합니다. 이 사용자 계정은 복제를 관리하는 데만 사용해야 합니다. 사용하는 마이그레이션 방법에 따라 나중에 사용자에게 권한을 부여해야 할 수 있습니다.

복제 사용자 계정을 추가하려면 외부 서버에서 터미널을 열고 다음 MySQL 명령어를 입력합니다.

MySQL

      CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD';
      GRANT SELECT, SHOW VIEW ON *.* TO 'USERNAME'@'HOST';
      FLUSH PRIVILEGES;

예시

CREATE USER 'replicationUser'@'%' IDENTIFIED BY '8*&fwwd';
GRANT SELECT, SHOW VIEW ON *.* TO 'replicationUser'@'%';
FLUSH PRIVILEGES;
속성 설명
USERNAME 외부 서버의 복제 사용자 계정입니다.
PASSWORD 복제 사용자 계정의 비밀번호입니다.
HOST 모든 호스트 연결을 허용하려면 %로 설정합니다. 이후 단계에서 Cloud SQL 복제본의 연결만 수락하도록 변경됩니다.

소스 표현 인스턴스 설정

소스 표현 인스턴스는 외부 서버를 참조합니다. 외부 서버의 요청 데이터만 포함됩니다. 이 단계에서는 요청 데이터를 만들고 Cloud SQL에서 소스 표현 인스턴스를 만드는 curl 명령어에 사용합니다.

요청 데이터 만들기

요청 데이터에는 JSON 형식의 외부 서버에 대한 기본 정보가 포함됩니다. 요청 데이터는 공개 또는 비공개 네트워크의 Cloud SQL 복제본에 대해 구성될 수 있으며 다음 정보를 포함해야 합니다.

source.json

    {
      "name": "SOURCE_NAME",
      "region": "REGION",
      "databaseVersion": "MYSQL_VERSION",
      "onPremisesConfiguration": {
        "hostPort": "SOURCE_HOST",
        "username": "USERNAME",
        "password": "PASSWORD",
        "dumpFilePath": "gs://BUCKET/DUMP_FILE",
        "caCertificate": "SOURCE_CERT",
        "clientCertificate": "CLIENT_CERT",
        "clientKey": "CLIENT_KEY"
      }
    }

관리형 가져오기 예시

// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - does not use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}

덤프 파일 예시

// example of source.json for external server that
// - initiates replication from a file
// - uses SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@",
    "dumpFilePath": "gs://replica-bucket/source-database.sql.gz",
    "caCertificate": "content of your certificate",
    "clientCertificate": "content of your certificate",
    "clientKey": "content of your client key"
  }
}

커스텀 가져오기 예시

// example of source.json for external server that
// - initiates replication from a Cloud SQL custom import
// - does not use SSL/TSL

{
  "name": "cloudsql-source-instance",
  "region": "us-central1",
  "databaseVersion": "MYSQL_5_7",
  "onPremisesConfiguration": {
    "hostPort": "192.0.2.0:3306",
    "username": "replicationUser",
    "password": "486#@%*@"
  }
}
선택 필드 참고
dumpFilePath Cloud SQL 버킷에 있는 덤프 파일로 복제를 설정하는 경우에만 포함합니다.
caCertificate 외부 서버에서 SSL/TLS가 사용되는 경우에만 포함합니다.
clientCertificate 외부 서버에서 SSL/TLS가 사용되는 경우에만 포함합니다.
clientKey 외부 서버에서 SSL/TLS가 사용되는 경우에만 포함합니다.
속성 설명
SOURCE_NAME 생성할 소스 표현 인스턴스의 이름입니다.
REGION 소스 표현 인스턴스를 배치할 리전입니다.
MYSQL_VERSION 외부 서버에서 실행되는 MySQL 버전입니다. MYSQL_5_5, MYSQL_5_6, MYSQL_5_7, MYSQL_8_0 중에서 선택할 수 있습니다.
SOURCE HOST 외부 서버의 IPv4 주소 및 포트 또는 외부 서버의 DNS 주소입니다. DNS 주소를 사용하는 경우 최대 60자까지 포함할 수 있습니다. 외부 서버가 Cloud SQL에서 호스팅되는 경우 포트는 3306입니다.
USERNAME 외부 서버의 복제 사용자 계정입니다.
PASSWORD 복제 사용자 계정의 비밀번호입니다.
BUCKET 덤프 파일이 포함된 버킷의 이름입니다.
DUMP_FILE 외부 서버의 데이터가 포함된 버킷의 파일입니다.
CLIENT_CA_CERT 외부 서버의 CA 인증서입니다.
CLIENT_CERT 외부 서버의 클라이언트 인증서. 서버-클라이언트 인증에만 필요합니다.
CLIENT_KEY 외부 서버에 있는 클라이언트 인증서의 비공개 키 파일입니다. 서버-클라이언트 인증에만 필요합니다.

소스 표현 인스턴스 만들기

이 단계를 완료하기 전에 소스 요청 데이터가 포함된 JSON 파일이 있어야 합니다.

터미널을 열고 다음 명령어를 사용하여 Cloud SQL에서 소스 표현 인스턴스를 만듭니다.

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

예시

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data @./source.json \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
속성 설명
PROJECT_ID Google Cloud의 프로젝트 ID입니다.
JSON_PATH 외부 서버에 대한 요청 데이터가 포함된 JSON 파일의 경로입니다.

Cloud SQL 복제본 설정

Cloud SQL 복제본에는 외부 서버의 데이터가 포함됩니다. 이 단계에서는 요청 데이터를 만들고 Cloud SQL에서 Cloud SQL 복제본을 만드는 curl 명령어에 사용합니다.

요청 데이터 만들기

요청 데이터에는 외부 서버 및 Cloud SQL 복제본에 대한 기본 정보가 JSON 형식으로 포함됩니다. 요청 데이터는 공개 또는 비공개 네트워크의 Cloud SQL 복제본에 대해 구성될 수 있으며 다음 정보를 포함해야 합니다.

replica.json

    {
        "settings": {
            "tier": "TIER",
            "dataDiskSizeGb": "DISK_SIZE",
            "ipConfiguration": {
                "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME"
             }
        },
        "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME",
        "region": "SOURCE_REGION",
        "databaseVersion": "MYSQL_VERSION",
        "name": "REPLICA_NAME"
    }

예시

    {
        "settings": {
            "tier": "db-custom-4-15360",
            "dataDiskSizeGb": "100"
        },
        "masterInstanceName": "source-instance",
        "region": "us-central1",
        "databaseVersion": "MYSQL_5_7",
        "name": "replica-instance"
    }
선택 필드 참고
ipConfiguration Cloud SQL 복제본이 비공개 네트워크에 있는 경우에만 이를 포함합니다.
속성 설명
TIER 복제본 인스턴스를 호스팅할 머신 유형 사용할 머신 유형을 모르는 경우 db-custom-2-7680로 시작합니다. 필요한 경우 나중에 크기 및 기타 지원되는 값을 변경할 수 있습니다.
DISK_SIZE Cloud SQL 복제본의 스토리지 크기(GB)입니다.
PROJECT_ID Google Cloud의 프로젝트 ID입니다.
NETWORK_NAME Cloud SQL 복제본에 사용할 비공개 네트워크의 이름입니다.
SOURCE_REPRESENTATION_INSTANCE_NAME 소스 표현 인스턴스의 이름입니다.
SOURCE_REGION 소스 표현 인스턴스에 할당된 리전입니다.
MYSQL_VERSION Cloud SQL 복제본에서 사용할 MySQL 버전입니다. MYSQL_5_6, MYSQL_5_7, MYSQL_8_0 중에서 선택할 수 있습니다. 이는 외부 서버에서 실행 중인 MySQL 버전과 일치할 수도 있고 최대 한 버전 높을 수도 있습니다. 예를 들어 외부 서버에서 MySQL 5.5를 사용하는 경우 Cloud SQL 복제본과 MySQL 5.6을 사용할 수 있습니다.
REPLICA_NAME 생성할 Cloud SQL 복제본의 이름입니다.

Cloud SQL 복제본 만들기

이 단계를 완료하기 전에 복제본 요청 데이터가 포함된 JSON 파일을 생성해야 합니다. 그런 다음 Cloud Shell 터미널을 열고 다음 명령어를 사용하여 Cloud SQL에서 Cloud SQL 복제본을 만듭니다.

curl

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @JSON_PATH \
         -X POST \
         https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances

예시

    gcloud auth login
    ACCESS_TOKEN="$(gcloud auth print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @./replica.json \
         -X POST \
속성 설명
JSON_PATH Cloud SQL 복제본에 대한 요청 데이터가 포함된 JSON 파일의 경로입니다.
PROJECT_ID Google Cloud의 프로젝트 ID로 소스 인스턴스와 동일해야 합니다.

완료 시 유의사항

인스턴스가 올바르게 설정되었는지 확인하려면 Cloud SQL 인스턴스 페이지로 이동합니다.

소스 표현 인스턴스와 Cloud SQL 복제본이 표시됩니다. 다음과 유사합니다.

인스턴스 ID 유형 공개 IP
(-) source-representation-instance MySQL 외부 기본 10.68.48.3:3306
복제 인스턴스 MySQL 읽기 복제본 34.66.48.59

Cloud SQL 복제본에 사용자 추가

외부 서버에서 MySQL 사용자 계정을 가져올 수 없지만 Cloud SQL 복제본 인스턴스에서 만들 수 있습니다. 외부 서버에서 복제하기 전에 이 작업을 수행합니다.

Cloud SQL 복제본의 발신 IP 주소 확인

Cloud SQL 복제본의 발신 IP 주소를 사용하여 외부 서버와 Cloud SQL 복제본 간의 보안 연결을 만들 수 있습니다.

복제본의 발신 IP 주소를 가져오려면 다음과 안내를 따르세요.

Console

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

    Cloud SQL 인스턴스로 이동

  2. Cloud SQL 복제본의 공개 IP 주소 옆에 있는 추가 정보 도움말 위에 마우스 포인터를 올려놓고 발신 IP 주소를 검색합니다. 발신 IP 주소는 Cloud Console에서 복제본의 주요 목록에 표시되는 IP 주소가 아닙니다.

gcloud

gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
속성 설명
REPLICA_NAME 가져오려는
발신 공개 IP 주소를 가진 Cloud SQL 복제본
이름입니다.

외부 서버에서 들어오는 연결 허용

복제가 성공하려면 Cloud SQL 복제본이 외부 서버에 연결되어야 합니다. 다음 조건이 적용되는 경우 외부 서버가 Cloud SQL 복제본의 발신 IP 주소의 연결을 수락하도록 네트워크 방화벽을 구성해야 합니다.

  • 외부 서버가 방화벽 뒤에 있거나 일부 다른 네트워크 제한이 적용됩니다.
  • Cloud SQL 복제본이 공개 IP를 사용합니다.

Cloud SQL 복제본에 연결하려면 복제본의 기본 IP 주소를 사용합니다. 이 IP 주소는 Cloud Console에 표시됩니다.

Cloud SQL 복제본으로 복제할 수 있도록 소스 표현 인스턴스 업데이트

Cloud SQL 복제본의 소스 표현 인스턴스를 설정한 후에는 소스 표현 인스턴스를 업데이트해야 할 수 있습니다. 예를 들어 다음과 같은 경우 구성을 업데이트해야 합니다.

  • 외부 서버의 호스트, 포트 또는 IP가 변경된 경우
  • 다른 MySQL 복제 사용자를 사용하려는 경우
  • MySQL 복제 사용자의 비밀번호가 변경된 경우
  • 외부 서버에 안전하게 연결하는 데 사용되는 SSL 인증서가 변경된 경우

초기 데이터 로드 및 Cloud SQL로 복제 설정

외부 서버에서 Cloud SQL 복제본으로 데이터 초기 로드를 수행하기 위한 세 가지 옵션이 있습니다.

  • 관리형 가져오기는 외부 서버에서 데이터를 추출하여 Cloud SQL 인스턴스로 직접 가져오는 서비스를 사용합니다. 이 옵션은 전역 트랜잭션 식별자(GTID) 복제에 권장됩니다. 외부 서버가 RDS에 있고 RDS가 GTID 또는 binlog 복제를 사용하는 경우 이 옵션이 권장됩니다. 자세한 내용은 관리형 가져오기를 사용하여 외부 데이터베이스에서 복제 설정을 참조하세요.
  • 덤프 파일을 사용하려면 외부 서버의 덤프 파일을 만들고 Cloud Storage 버킷으로 이동한 다음 Cloud SQL로 가져와야 합니다. 서버가 RDS에 있고 GTID가 사용 중지된 경우 이 옵션을 사용할 수 없습니다. 자세한 내용은 덤프 파일을 사용하여 외부 데이터베이스에서 복제 설정을 참조하세요.
  • 커스텀 가져오기를 사용하려면 Cloud SQL 기본 인스턴스를 만들고, 원하는 도구를 사용하여 커스텀 데이터 가져오기를 수행하고, Cloud SQL 복제본으로 강등한 후 외부 서버 복제를 설정해야 합니다. 초대형 데이터베이스에 가장 적합합니다. 자세한 내용은 커스텀 가져오기를 사용하여 대규모 외부 데이터베이스에서 복제 설정을 참조하세요.

복제 모니터링

복제 상태 확인

Cloud SQL 복제본은 초기 데이터 로드를 완료하면 외부 서버에 연결하고 내보내기 작업 후 실행된 모든 업데이트를 적용합니다. 다음 단계에 따라 복제 상태를 확인합니다.

복제본을 독립 실행형 인스턴스로 승격하기 전에 복제 상태를 확인하는 것이 중요합니다. 복제 프로세스가 완료되지 않고 성공하는 경우, 승격된 복제본에 외부 서버의 일부 변경사항이 없는 것입니다.

복제 지연이 0에 가깝지 않은 경우 이를 해결하기 위한 단계를 수행합니다.

마이그레이션 완료

복제본 승격 및 고가용성과 읽기 복제본 추가

이 단계에서는 프로덕션을 위한 인스턴스를 준비합니다.

  1. 복제본을 기본 인스턴스로 승격. GTID 및 바이너리 로그가 사용 설정되고 승격된 복제본에 예약된 백업이 사용 설정됩니다.
  2. 인스턴스에 읽기 복제본 추가
  3. 고가용성 인스턴스 구성

다음 단계