읽기 복제본 만들기

이 페이지에서는 Cloud SQL 인스턴스의 읽기 복제본을 만드는 방법을 설명합니다.

읽기 복제본은 일반적인 상황에서 거의 실시간으로 기본 인스턴스의 변경사항을 반영하는 기본 인스턴스의 사본입니다. 읽기 복제본을 사용하여 기본 인스턴스의 읽기 요청이나 분석 트래픽을 오프로드합니다.

또한 재해 복구를 위해 리전 마이그레이션을 수행할 수 있습니다. 복제본이 리전 간 복제본인 경우 다른 리전으로 장애 조치를 수행할 수 있습니다. 특히 복제본을 독립형 인스턴스로 승격할 수 있습니다(이 경우 기존 복제본은 해당 인스턴스를 기본 인스턴스로 간주하지 않음).

복제 작동 방식에 대한 자세한 내용은 Cloud SQL의 복제를 참조하세요.

시작하기 전에

이 인스턴스의 첫 번째 복제본을 만드는 경우 인스턴스가 기본 인스턴스의 요구사항을 충족하는지 확인합니다. 자세히 알아보기

읽기 복제본 만들기

읽기 복제본을 만드는 단계는 아래와 같습니다.

Console

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

    Cloud SQL 인스턴스로 이동

  2. 복제본을 만들 인스턴스를 찾은 후 등록정보의 맨 오른쪽에 있는 more actions 메뉴를 엽니다.
  3. 읽기 복제본 만들기를 선택합니다.

    해당 선택 옵션이 표시되지 않으면 인스턴스가 복제본인 것입니다. 복제본의 복제본을 만들 수 없습니다.

  4. 인스턴스의 백업 및 바이너리 로깅이 사용 설정된 경우 다음 단계를 진행합니다. 그렇지 않으면 백업 자동화바이너리 로깅 사용 설정을 선택하고 계속을 클릭한 후 저장 및 다시 시작을 클릭하여 인스턴스를 다시 시작합니다.

    바이너리 로깅을 사용 설정하면 인스턴스가 다시 시작됩니다.

  5. 페이지의 인스턴스 맞춤설정 섹션에서 복제본의 설정을 업데이트합니다. 구성 옵션 표시를 클릭하여 설정 그룹을 표시합니다. 그런 다음 원하는 그룹을 펼쳐 설정을 검토하고 맞춤설정합니다. 선택한 모든 옵션의 요약이 오른쪽에 표시됩니다. 이 설정을 맞춤설정하는 것은 선택사항입니다. 맞춤설정이 수행되지 않는 모든 경우에 기본값이 할당됩니다.

    각 설정에 대한 자세한 내용은 인스턴스 설정 정보 페이지를 참조하세요.

    예를 들어 BigQuery와 같은 다른 Google Cloud 서비스가 Cloud SQL의 데이터에 액세스하고 내부 연결을 통해 이 데이터에 대해 쿼리하도록 허용하려면 연결 그룹을 확장한 후 공개 IP 체크박스를 선택 해제합니다.

  6. 복제본 만들기를 클릭합니다.

    Cloud SQL이 백업을 만들고, 필요한 경우 복제본을 만듭니다. 기본 인스턴스에 대한 인스턴스 페이지로 돌아갑니다.

gcloud

  1. 기본 인스턴스의 상태를 확인합니다.
    gcloud sql instances describe PRIMARY_INSTANCE_NAME
          

    databaseReplicationEnabled 속성이 true인 경우 인스턴스는 복제본입니다. 복제본의 복제본은 만들 수 없습니다.

  2. backupConfiguration 아래의 enabled 속성이 false이면 기본 인스턴스에 백업을 사용 설정합니다.
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --backup-start-time=>HH:MM
          
    backup-start-time 매개변수는 UTC±00 시간대의 24시간 형식으로 지정되며 백업 기간(4시간)의 시작 시간을 지정합니다. 백업 기간에는 언제든지 백업이 시작될 수 있습니다.
  3. binaryLogEnabled 속성이 false이면 기본 인스턴스에 바이너리 로그를 사용 설정합니다.
    gcloud sql instances patch PRIMARY_INSTANCE_NAME \
    --enable-bin-log
    
    바이너리 로그를 사용 설정하면 인스턴스가 다시 시작됩니다.
  4. 복제본을 만듭니다.
    gcloud sql instances create REPLICA_NAME \
    --master-instance-name=PRIMARY_INSTANCE_NAME
    

    필요한 경우 --tier 매개변수를 사용하여 다른 등급 크기를 지정할 수 있습니다.

    --region 매개변수를 사용하여 다른 리전을 지정할 수 있습니다.

    다른 인스턴스 설정에 매개변수를 더 추가할 수 있습니다. 자세한 내용은 gcloud sql instances create를 참조하세요.

    기본 인스턴스에 내부 IP 주소만 포함되었고 BigQuery와 같은 다른 Google Cloud 서비스가 Cloud SQL의 데이터에 액세스하고 내부 연결을 통해 이 데이터에 대해 쿼리하도록 허용하려면 명령어에 --enable-google-private-path 매개변수를 추가합니다.

    복제본은 기본 인스턴스와 동일한 VPC 네트워크에 만들어야 합니다. 또한 해당 VPC 네트워크에 allocated-ip-range-name을 지정할 수 있습니다. 범위가 지정되지 않으면 복제본이 무작위 범위로 생성됩니다.

  • 바이너리 로깅은 읽기 복제본 인스턴스에서 지원됩니다(MySQL 5.7 및 8.0만 해당. 기존 HA 장애 조치 복제본에서는 지원되지 않음). 기본 인스턴스 이름 대신 복제본의 인스턴스 이름을 사용하여 동일한 gcloud CLI 명령어로 복제본에 바이너리 로깅을 사용 설정합니다.
    gcloud sql instances patch REPLICA_INSTANCE_NAME \
    --enable-bin-log
        

    복제본 인스턴스(기본 인스턴스 아님)의 바이너리 로깅 내구성은 MySQL 서버가 바이너리 로그를 디스크에 동기화하는 빈도를 관리하는 sync_binlog 플래그를 사용하여 설정할 수 있습니다.

    복제본 인스턴스에서 백업을 사용 설정할 수 없지만 기본 인스턴스와 달리 백업을 사용하지 않는 경우에도 복제본에서 바이너리 로깅을 사용 설정할 수 있습니다.

    복제본 인스턴스의 binlog 보관 기간은 기본 인스턴스의 7일과 달리 1일로 자동 설정됩니다.

Terraform

읽기 복제본을 만들려면 Terraform 리소스를 사용합니다.

resource "google_sql_database_instance" "read_replica" {
  name                 = "mysql-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "MYSQL_8_0"

  replica_configuration {
    failover_target = false
  }

  settings {
    tier              = "db-n1-standard-2"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

변경사항 적용

Google Cloud 프로젝트에 Terraform 구성을 적용하려면 다음 섹션의 단계를 완료하세요.

Cloud Shell 준비

  1. Cloud Shell을 실행합니다.
  2. Terraform 구성을 적용할 기본 Google Cloud 프로젝트를 설정합니다.

    이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서도 실행할 수 있습니다.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.

디렉터리 준비

각 Terraform 구성 파일에는 자체 디렉터리(루트 모듈이라고도 함)가 있어야 합니다.

  1. Cloud Shell에서 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만드세요. 파일 이름에는 .tf 확장자가 있어야 합니다(예: main.tf). 이 튜토리얼에서는 파일을 main.tf라고 합니다.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 튜토리얼을 따라 하는 경우 각 섹션이나 단계에서 샘플 코드를 복사할 수 있습니다.

    샘플 코드를 새로 만든 main.tf에 복사합니다.

    필요한 경우 GitHub에서 코드를 복사합니다. 이는 Terraform 스니펫이 엔드 투 엔드 솔루션의 일부인 경우에 권장됩니다.

  3. 환경에 적용할 샘플 매개변수를 검토하고 수정합니다.
  4. 변경사항을 저장합니다.
  5. Terraform을 초기화합니다. 이 작업은 디렉터리당 한 번만 수행하면 됩니다.
    terraform init

    원하는 경우 최신 Google 공급업체 버전을 사용하려면 -upgrade 옵션을 포함합니다.

    terraform init -upgrade

변경사항 적용

  1. 구성을 검토하고 Terraform에서 만들거나 업데이트할 리소스가 예상과 일치하는지 확인합니다.
    terraform plan

    필요에 따라 구성을 수정합니다.

  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 Terraform 구성을 적용합니다.
    terraform apply

    Terraform에 '적용 완료' 메시지가 표시될 때까지 기다립니다.

  3. 결과를 보려면 Google Cloud 프로젝트를 엽니다. Google Cloud 콘솔에서 UI의 리소스로 이동하여 Terraform이 리소스를 만들었거나 업데이트했는지 확인합니다.

변경사항 삭제

변경사항을 삭제하려면 다음 단계를 따르세요.

  1. Terraform 구성 파일에서 삭제 보호를 사용 중지하려면 deletion_protection 인수를 false로 설정합니다.
    deletion_protection =  "false"
  2. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 업데이트된 Terraform 구성을 적용합니다.
    terraform apply
  1. 다음 명령어를 실행하고 프롬프트에 yes를 입력하여 이전에 Terraform 구성에 적용된 리소스를 삭제합니다.

    terraform destroy

REST v1

  1. 현재 백업 구성 확인

    인스턴스 리소스의 get 메서드를 사용하여 데이터베이스 버전과 기본 인스턴스의 현재 백업 구성을 반환합니다.

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

    • project-id: 프로젝트 ID
    • primary-instance-name: 기본 인스턴스 이름

    HTTP 메서드 및 URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/primary-instance-name

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

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

  2. 복제 필드가 설정되었는지 확인

    enabled 또는 pointInTimeEnabledfalse이면 인스턴스 리소스의 patch 메서드를 사용하여 둘 다 사용 설정합니다. 요청에서 변경하려는 백업 구성의 모든 속성을 지정합니다.

    백업을 사용 설정하려면 enabledtrue로, startTimeHH:MM 형식의 시간으로 설정합니다. startTime 매개변수는 UTC±00 시간대의 24시간 형식으로 지정되며 백업 기간(4시간)의 시작 시간을 지정합니다. 백업 기간에는 언제든지 백업이 시작될 수 있습니다.

    point-in-time recovery를 사용 설정하려면 pointInTimeEnabledtrue로 설정합니다.

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

    • PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호
    • INSTANCE_NAME: 고가용성으로 구성하려는 기본 또는 읽기 복제본 인스턴스의 이름
    • START_TIME: 시간(시간 및 분)

    HTTP 메서드 및 URL:

    PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    JSON 요청 본문:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "START_TIME",
          "enabled": true,
          "binaryLogEnabled": true
        }
      }
    }
    

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

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

  3. 읽기 복제본 만들기

    인스턴스 리소스의 insert 메서드를 사용하여 읽기 복제본을 만듭니다. databaseVersion 속성은 기본 인스턴스와 동일해야 합니다. 기본 인스턴스에서 내부 IP 주소를 사용하는 경우 기본 인스턴스를 만들 때와 동일한 방식으로 allocatedIpRange를 지정할 수 있습니다. 범위가 지정되지 않으면 복제본이 무작위 범위로 생성됩니다. 리전 간 읽기 복제본의 경우 기본 인스턴스의 리전이 아닌 다른 리전을 지정합니다.

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

    • project-id: 프로젝트 ID
    • database-version: Enum 버전 문자열(예: MYSQL_8_0)
    • primary-instance-name: 기본 인스턴스 이름
    • primary-instance-region: 기본 인스턴스의 리전
    • replica-region: 복제본 인스턴스의 리전
    • replica-name: 복제본 인스턴스의 이름
    • machine-type: 머신 유형의 열거형 문자열 (예: 'db-custom-1-3840')
    • private-network: 비공개 연결을 만들기 위해 추가하거나 선택하는 네트워크

    HTTP 메서드 및 URL:

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

    JSON 요청 본문:

    {
      "masterInstanceName": "primary-instance-name",
      "project": "project-id",
      "databaseVersion": "database-version",
      "name": "replica-name",
      "region": "replica-region",
      "settings":
      {
        "tier": "machine-type",
        "settingsVersion": 0,
        "ipConfiguration": {
        object (IpConfiguration)
      },
      {
      "ipv4Enabled": false,
      "privateNetwork": private-network,
      "requireSsl": boolean,
      "authorizedNetworks": [
        {
          object (AclEntry)
        }
      ],
      "allocatedIpRange": string
        }
      }
    }
    

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

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

REST v1beta4

  1. 현재 백업 구성 확인

    인스턴스 리소스의 get 메서드를 사용하여 데이터베이스 버전과 마스터의 현재 백업 구성을 반환합니다.

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

    • project-id: 프로젝트 ID
    • primary-instance-name: 기본 인스턴스 이름

    HTTP 메서드 및 URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/primary-instance-name

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

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

  2. 복제 필드가 설정되었는지 확인

    기본 인스턴스에서 enabled 또는 binaryLogEnabledfalse이면 인스턴스 리소스의 patch 메서드를 사용하여 둘 다 사용 설정합니다. 요청에서 변경하려는 백업 구성의 속성을 지정합니다.

    백업을 사용 설정하려면 enabledtrue로, startTimeHH:MM 형식의 시간으로 설정합니다. startTime 매개변수는 UTC±00 시간대의 24시간 형식으로 지정되며 백업 기간(4시간)의 시작 시간을 지정합니다. 백업 기간에는 언제든지 백업이 시작될 수 있습니다.

    point-in-time recovery를 사용 설정하려면 기본 인스턴스에서 binaryLogEnabledtrue로 설정합니다.

    바이너리 로깅은 읽기 복제본 인스턴스에서 지원됩니다(MySQL 5.7 및 8.0만 해당). 기본 인스턴스 ID 대신 복제본의 인스턴스 ID를 사용하여 동일한 API로 복제본에 바이너리 로깅을 사용 설정합니다.

    복제본 인스턴스(기본 인스턴스 아님)의 바이너리 로깅 내구성은 MySQL 서버가 바이너리 로그를 디스크에 동기화하는 빈도를 관리하는 sync_binlog 플래그를 사용하여 설정할 수 있습니다.

    복제본 인스턴스에서 백업을 사용 설정할 수 없지만 기본 인스턴스와 달리 백업을 사용하지 않는 경우에도 복제본에서 바이너리 로깅을 사용 설정할 수 있습니다.

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

    • PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호
    • INSTANCE_NAME: 고가용성으로 구성하려는 기본 또는 읽기 복제본 인스턴스의 이름
    • START_TIME: 시간(시간 및 분)

    HTTP 메서드 및 URL:

    PATCH https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

    JSON 요청 본문:

    {
      "settings":
      {
        "backupConfiguration":
        {
          "startTime": "START_TIME",
          "enabled": true,
          "binaryLogEnabled": true
        }
      }
    }
    

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

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

  3. 읽기 복제본 만들기

    인스턴스 리소스의 insert 메서드를 사용하여 읽기 복제본을 만듭니다. databaseVersion 속성은 기본 인스턴스와 동일해야 합니다. 기본 인스턴스에서 내부 IP 주소를 사용하는 경우 기본 인스턴스를 만들 때와 동일한 방식으로 allocatedIpRange를 지정할 수 있습니다. 리전 간 읽기 복제본의 경우 기본 인스턴스의 리전이 아닌 다른 리전을 지정합니다.

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

    • project-id: 프로젝트 ID
    • database-version: Enum 버전 문자열(예: MYSQL_8_0)
    • primary-instance-name: 기본 인스턴스 이름
    • primary-instance-region: 기본 인스턴스의 리전
    • replica-region: 복제본 인스턴스의 리전
    • replica-name: 복제본 인스턴스의 이름
    • machine-type: 머신 유형의 열거형 문자열 (예: 'db-custom-1-3840')
    • private-network: 비공개 연결을 만들기 위해 추가하거나 선택하는 네트워크

    HTTP 메서드 및 URL:

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

    JSON 요청 본문:

    {
      "masterInstanceName": "primary-instance-name",
      "project": "project-id",
      "databaseVersion": "database-version",
      "name": "replica-name",
      "region": "replica-region",
      "settings":
      {
        "tier": "machine-type",
        "settingsVersion": 0,
    
        "ipConfiguration": {
        object (IpConfiguration)
      },
      {
      "ipv4Enabled": false,
      "privateNetwork": private-network,
      "requireSsl": boolean,
      "authorizedNetworks": [
        {
          object (AclEntry)
        }
      ],
      "allocatedIpRange": string
        }
    
      }
    }
    

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

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

Private Service Connect가 사용 설정된 인스턴스에 읽기 복제본 만들기

Private Service Connect가 사용 설정된 인스턴스에 읽기 복제본을 만드려면 gcloud CLI 또는 API를 사용합니다. 이 복제본은 기본 인스턴스와 같은 리전 또는 다른 리전(리전 간 읽기 복제본)에 만들 수 있습니다.

다른 연결 유형의 인스턴스에서 읽기 복제본을 복제할 수 없습니다. 예를 들어 Private Service Connect가 사용 설정된 인스턴스는 다른 Private Service Connect 인스턴스에서만 복제할 수 있습니다. 또한 외부 IP 연결을 지원하는 인스턴스 또는 비공개 서비스 액세스로 구성된 인스턴스에서 복제할 수 없습니다.

gcloud

인스턴스의 읽기 복제본을 만들려면 gcloud sql instances create 명령어를 사용합니다.

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip

다음을 바꿉니다.

  • REPLICA_INSTANCE_NAME: 복제본 인스턴스의 이름입니다.
  • PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
  • PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호입니다.
  • REGION_NAME: 복제본 인스턴스의 리전 이름입니다.
  • ALLOWED_PROJECTS: 허용되는 프로젝트 ID 또는 숫자의 목록(쉼표로 구분)입니다. 프로젝트가 이 목록에 포함되지 않은 경우 이를 사용하여 인스턴스를 만들고 Private Service Connect를 사용 설정할 수 없습니다.

    Cloud SQL은 기본 인스턴스에 허용되는 프로젝트를 복제본으로 복사하지 않습니다. 복제본마다 Private Service Connect 엔드포인트를 만들어야 합니다. Cloud SQL 인증 프록시 또는 Cloud SQL 언어 커넥터를 사용하는 경우 복제본에 DNS 영역DNS 레코드를 만들어야 합니다.

  • AVAILABILITY_TYPE: 인스턴스에 고가용성을 사용 설정합니다. 이 매개변수에 대해 다음 값 중 하나를 지정합니다.
    • REGIONAL: 고가용성을 사용 설정하며, 프로덕션 인스턴스에 권장됩니다. 인스턴스는 선택한 리전 내의 다른 영역으로 장애 조치됩니다.
    • ZONAL: 장애 조치 기능을 제공하지 않습니다. 이 설정이 기본 설정입니다.

    인스턴스의 고가용성 설정 및 삭제에 대한 자세한 내용은 기존 인스턴스를 고가용성으로 구성인스턴스의 고가용성 비활성화를 참조하세요.

REST v1

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

  • PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
  • PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호입니다.
  • REPLICA_INSTANCE_NAME: 복제본 인스턴스의 이름입니다.
  • REGION_NAME: 복제본 인스턴스의 리전 이름입니다.
  • MACHINE_TYPE: 인스턴스의 머신 유형입니다.
  • AVAILABILITY_TYPE: 인스턴스에 고가용성을 사용 설정합니다. 이 매개변수에 대해 다음 값 중 하나를 지정합니다.
    • REGIONAL: 고가용성을 사용 설정하며, 프로덕션 인스턴스에 권장됩니다. 인스턴스는 선택한 리전 내의 다른 영역으로 장애 조치됩니다.
    • ZONAL: 장애 조치 기능을 제공하지 않습니다. 이 설정이 기본 설정입니다.

    인스턴스의 고가용성 설정 및 삭제에 대한 자세한 내용은 기존 인스턴스를 고가용성으로 구성인스턴스의 고가용성 비활성화를 참조하세요.

  • ALLOWED_PROJECTS: 허용되는 프로젝트 ID 또는 숫자의 목록(쉼표로 구분)입니다. 프로젝트가 이 목록에 포함되지 않은 경우 이를 사용하여 인스턴스를 만들고 Private Service Connect를 사용 설정할 수 없습니다.

    Cloud SQL은 기본 인스턴스에 허용되는 프로젝트를 복제본으로 복사하지 않습니다. 복제본마다 Private Service Connect 엔드포인트를 만들어야 합니다. Cloud SQL 인증 프록시 또는 Cloud SQL 언어 커넥터를 사용하는 경우 복제본에 DNS 영역DNS 레코드를 만들어야 합니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "MYSQL_8_0",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

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

  • PRIMARY_INSTANCE_NAME: 기본 인스턴스 이름입니다.
  • PROJECT_ID: 인스턴스가 포함된 Google Cloud 프로젝트의 ID 또는 프로젝트 번호입니다.
  • REPLICA_INSTANCE_NAME: 복제본 인스턴스의 이름입니다.
  • REGION_NAME: 복제본 인스턴스의 리전 이름입니다.
  • MACHINE_TYPE: 인스턴스의 머신 유형입니다.
  • AVAILABILITY_TYPE: 인스턴스에 고가용성을 사용 설정합니다. 이 매개변수에 대해 다음 값 중 하나를 지정합니다.
    • REGIONAL: 고가용성을 사용 설정하며, 프로덕션 인스턴스에 권장됩니다. 인스턴스는 선택한 리전 내의 다른 영역으로 장애 조치됩니다.
    • ZONAL: 장애 조치 기능을 제공하지 않습니다. 이 설정이 기본 설정입니다.

    인스턴스의 고가용성 설정 및 삭제에 대한 자세한 내용은 기존 인스턴스를 고가용성으로 구성인스턴스의 고가용성 비활성화를 참조하세요.

  • ALLOWED_PROJECTS: 허용되는 프로젝트 ID 또는 숫자의 목록(쉼표로 구분)입니다. 프로젝트가 이 목록에 포함되지 않은 경우 이를 사용하여 인스턴스를 만들고 Private Service Connect를 사용 설정할 수 없습니다.

    Cloud SQL은 기본 인스턴스에 허용되는 프로젝트를 복제본으로 복사하지 않습니다. 복제본마다 Private Service Connect 엔드포인트를 만들어야 합니다. Cloud SQL 인증 프록시 또는 Cloud SQL 언어 커넥터를 사용하는 경우 복제본에 DNS 영역DNS 레코드를 만들어야 합니다.

HTTP 메서드 및 URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances

JSON 요청 본문:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "MYSQL_8_0",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

IAM 데이터베이스 인증을 위한 읽기 복제본 구성

읽기 복제본이 기본 인스턴스에서 사용 설정된 경우 읽기 복제본에 자동으로 cloudsql_iam_authentication 플래그가 사용 설정되지 않습니다.

IAM 데이터베이스 인증을 위한 읽기 복제본을 구성하려면 다음 안내를 따르세요.

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

    Cloud SQL 인스턴스로 이동

  2. 인스턴스의 개요 페이지를 열려면 인스턴스 이름을 클릭합니다.
  3. 구성 타일에서 cloudsql_iam_authentication 플래그를 찾습니다. 플래그가 목록에 없으면 읽기 복제본에서 플래그를 사용 설정할 필요가 없습니다. 플래그가 목록에 있으면 읽기 복제본에 플래그를 사용 설정해야 합니다. 읽기 복제본에서 플래그를 사용 설정해야 하는 경우 다음 단계를 계속 진행합니다.
  4. SQL 탐색 메뉴에서 복제본을 선택합니다.
  5. 수정할 복제본의 이름을 클릭합니다.
  6. 수정을 클릭합니다.
  7. 구성 옵션 섹션에서 플래그를 펼칩니다.
  8. + 추가 항목을 선택합니다.
  9. 플래그 이름으로 cloudsql_iam_authentication을 입력합니다. 이 플래그에 켜기가 선택되어 있는지 확인합니다.
  10. 저장을 클릭합니다.

연쇄 복제본 만들기

이 섹션에서는 연쇄 복제본을 만들고 관리하는 방법을 설명합니다. 연쇄 복제본 작동 방식에 대한 자세한 내용은 연쇄 복제본을 참조하세요.

시작하기 전에

기본 인스턴스에는 읽기 복제본이 있어야 합니다. 기본 인스턴스 만들기에 대한 자세한 내용은 읽기 복제본 만들기를 참조하세요.

연쇄 복제본 만들기 단계

콘솔

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

    Cloud SQL 인스턴스로 이동

  2. MySQL 5.7 이상인 경우 복제를 사용 설정합니다.
  3. 만들려는 복제본의 상위 역할을 수행할 복제본의 복제본 탭을 클릭합니다.
  4. 복제본 만들기를 클릭합니다.
  5. 읽기 복제본 만들기 페이지에서 인스턴스 ID를 비롯해 이름, 리전, 영역 등의 기타 구성 옵션을 업데이트합니다.
  6. 만들기를 클릭합니다.

    Cloud SQL은 복제본을 만듭니다. 상위 복제본의 인스턴스 페이지가 다시 표시됩니다.

  7. 만들려는 새 연쇄 복제본마다 4~6단계를 수행합니다.

gcloud

  1. MySQL 버전 5.7 이상을 사용하는 경우 새 복제본의 기본 인스턴스에 대해 binlog를 사용 설정합니다.
    gcloud sql instances patch --enable-bin-log PARENT_REPLICA_NAME
    
    PARENT_REPLICA_NAME을 상위 복제본의 이름으로 바꿉니다.
  2. --master-instance-name 플래그를 사용하여 기본 복제본을 기본 인스턴스로 지정해 새 복제본을 생성합니다.

    gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    
    다음을 바꿉니다.
    • REPLICA_NAME: 만들려는 복제본의 고유 ID
    • PARENT_REPLICA_NAME: 상위 복제본의 이름
  3. 복제본이 생성되면 기본 인스턴스의 변경사항이 연쇄 복제본 체인의 모든 복제본을 통해 복제되는 것을 확인할 수 있습니다.

curl

  1. MySQL 버전 5.7 이상을 사용하는 경우 바이너리 로깅을 사용 설정합니다.

    바이너리 로깅을 사용 설정하려면 request.JSON이라는 파일에 다음 JSON을 저장한 다음 curl 명령어를 호출하여 바이너리 로깅을 사용 설정합니다.
    {
      "settings":
      {
        "backupConfiguration":
        {
          "enabled": false,
          "binaryLogEnabled": true
        }
      }
    }
    

  2. 상위 복제본 아래에 복제본을 만들려면 다음 JSON 코드 샘플을 수정하고 request.json 파일에 저장합니다.

    {
      "masterInstanceName": "PARENT_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
    
  3. 다음 명령어를 실행합니다.
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
    

문제 해결

문제 문제 해결
생성 시 읽기 복제본이 복제를 시작하지 않음 로그 파일에 더 구체적인 오류가 있을 수 있습니다. Cloud Logging의 로그를 검사하여 실제 오류를 찾으세요.
읽기 복제본을 만들 수 없음 - invalidFlagValue 오류 요청의 플래그 중 하나가 잘못되었습니다. 명시적으로 제공한 플래그 또는 기본값으로 설정된 플래그일 수 있습니다.

먼저 max_connections 플래그의 값이 기본 값보다 크거나 같은지 확인하세요.

max_connections 플래그가 적절하게 설정된 경우 Cloud Logging에서 로그를 검사하여 실제 오류를 확인하세요.

읽기 복제본을 만들 수 없음 - 알 수 없는 오류 로그 파일에 더 구체적인 오류가 있을 수 있습니다. Cloud Logging의 로그를 검사하여 실제 오류를 찾으세요.

오류가 set Service Networking service account as servicenetworking.serviceAgent role on consumer project이면 Service Networking API를 사용 중지했다가 다시 사용 설정합니다. 이렇게 하면 프로세스를 계속 진행하는 데 필요한 서비스 계정이 생성됩니다.

디스크가 가득 참 복제본을 만드는 동안 기본 인스턴스 디스크 크기가 가득 찰 수 있습니다. 기본 인스턴스를 수정하여 더 큰 디스크 크기로 업그레이드합니다.
복제본 인스턴스가 너무 많은 메모리를 사용하고 있습니다. 복제본은 임시 메모리를 사용하여 자주 요청되는 읽기 작업을 캐시하므로 기본 인스턴스보다 더 많은 메모리를 사용할 수 있습니다.

복제본 인스턴스를 다시 시작하여 임시 메모리 공간을 회수합니다.

복제가 중지됨 최대 스토리지 한도에 도달했고 스토리지 자동 증가가 사용 설정되지 않았습니다.

인스턴스를 수정하여 automatic storage increase를 사용 설정합니다.

긴 복제 지연 시간이 지속적으로 발생함 쓰기 부하가 너무 높아 복제본이 처리할 수 없습니다. 복제본의 SQL 스레드가 IO 스레드를 따라잡을 수 없는 경우 복제 지연이 발생합니다. 일부 쿼리 또는 워크로드로 인해 특정 스키마에서 일시적이거나 영구적인 복제 지연이 발생할 수 있습니다. 복제 지연이 발생하는 일반적인 원인은 다음과 같습니다.
  • 복제본에 대한 쿼리의 속도가 느립니다. 문제를 찾아 수정하세요.
  • 모든 테이블에 고유/기본 키가 있어야 합니다. 테이블에 고유/기본 키가 없으면 업데이트할 때마다 복제본에서 전체 테이블 검사를 수행해야 합니다.
  • DELETE ... WHERE field < 50000000과 같은 쿼리의 경우 복제본에 다수의 업데이트가 쌓이게 되므로 행 기준 복제에서 복제 지연이 발생합니다.

가능한 솔루션은 다음과 같습니다.

  • 병렬 복제 구성
  • 읽기 복제본의 innodb_flush_log_at_trx_commit 플래그를 2로 설정합니다.

    이 플래그에 대한 자세한 내용은 플래그 사용 팁을 참조하세요.

  • 인스턴스를 수정하여 복제본 크기를 늘립니다.
  • 데이터베이스의 부하를 줄입니다.
  • 읽기 트래픽을 읽기 복제본으로 보냅니다.
  • 테이블 색인을 생성합니다.
  • 느린 쓰기 쿼리를 식별하고 수정합니다.
  • 복제본을 다시 만듭니다.
복제 지연 시간이 갑자기 증가합니다. 장기 실행 트랜잭션으로 인해 발생합니다. 트랜잭션(단일 문 또는 다중 문)이 소스 인스턴스에서 커밋되면 트랜잭션의 시작 시간이 바이너리 로그에 기록됩니다. 복제본에 이 binlog 이벤트가 수신되면 타임스탬프를 현재 타임스탬프와 비교해서 복제 지연 시간을 계산합니다. 따라서 소스에 장기 실행 트랜잭션이 있을 경우 복제본에서 즉각적인 큰 복제 지연을 일으킬 수 있습니다. 트랜잭션에서 행이 변경되는 정도가 크면 복제본에서도 이를 수행하기 위해 긴 시간이 소비됩니다. 이 기간 동안 복제 지연이 증가합니다. 복제본에서 이 트랜잭션이 완료된 다음의 캐치업 기간은 소스의 쓰기 워크로드 및 복제본의 처리 속도에 따라 달라집니다.

트랜잭션이 길어지는 것을 방지하기 위해 몇 가지 가능한 해결 방법이 있습니다.

  • 트랜잭션을 여러 개의 작은 트랜잭션으로 분할
  • 하나의 큰 쓰기 쿼리를 작은 배치로 분할
  • 긴 SELECT 쿼리를 DML이 혼합된 트랜잭션에서 분리하기
병렬 복제 플래그를 변경하면 오류가 발생합니다. 이러한 플래그 중 하나 이상에 잘못된 값이 설정되었습니다.

오류 메시지를 표시하는 기본 인스턴스에서 다음과 같이 병렬 복제 플래그를 설정합니다.

  1. binlog_transaction_dependency_trackingtransaction_write_set_extraction 플래그를 수정합니다.
    • binlog_transaction_dependency_tracking=COMMIT_ORDER
    • transaction_write_set_extraction=OFF
  2. slave_pending_jobs_size_max 플래그를 추가합니다.

    slave_pending_jobs_size_max=33554432

  3. transaction_write_set_extraction 플래그를 수정합니다.

    transaction_write_set_extraction=XXHASH64

  4. binlog_transaction_dependency_tracking 플래그를 수정합니다.

    binlog_transaction_dependency_tracking=WRITESET

제한 시간으로 인해 복제본을 만들지 못했습니다. 기본 인스턴스에서 커밋되지 않은 장기 실행 트랜잭션으로 인해 읽기 복제본을 만들지 못할 수 있습니다.

실행 중인 모든 쿼리를 중지한 후 복제본을 다시 만듭니다.

다음 단계