PITR (point-in-time recovery) 구성

Google Cloud 콘솔에서 새 인스턴스를 만들면 자동 백업PITR (point-in-time recovery)이 모두 자동으로 사용 설정됩니다. 다음과 같이 기존 인스턴스에 PITR을 구성할 수 있습니다.

PITR 사용 설정

Google Cloud 콘솔에서 새 인스턴스를 만들면 자동 백업PITR(point-in-time recovery) 사용 설정이 모두 자동으로 사용 설정됩니다.

다음 절차는 기존의 기본 인스턴스에서 PITR을 사용 설정합니다.

콘솔

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

    Cloud SQL 인스턴스로 이동

  2. PITR을 사용 설정할 인스턴스의 추가 작업 메뉴(추가 작업 아이콘)를 열고 수정을 클릭합니다.
  3. 인스턴스 맞춤설정에서 데이터 보호 섹션을 펼칩니다.
  4. point-in-time recovery 사용 설정 체크박스를 선택합니다.
  5. 로그 일수 필드에 로그를 보관할 일수(Cloud SQL Enterprise Plus 버전의 경우 1~35, Cloud SQL Enterprise 버전의 경우 1~7)를 입력합니다.
  6. 저장을 클릭합니다.

gcloud

  1. 인스턴스 개요를 표시합니다.
    gcloud sql instances describe INSTANCE_NAME
  2. backupConfiguration 섹션에 enabled: false가 표시되면 예약된 백업을 사용 설정합니다.
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM

    UTC±00 시간대의 24시간제를 사용하여 backup-start-time 파라미터를 지정합니다.

  3. PITR을 사용 설정합니다.
    gcloud sql instances patch INSTANCE_NAME \
    --enable-bin-log

    기본 인스턴스에서 PITR을 사용 설정하면 다음 파라미터를 추가하여 트랜잭션 로그 보관 일수를 구성할 수도 있습니다.

    --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
  4. 변경사항을 확인합니다.
    gcloud sql instances describe INSTANCE_NAME

    변경이 성공하면 backupConfiguration 섹션에 binaryLogEnabled: true가 표시됩니다.

Terraform

PITR을 사용 설정하려면 Terraform 리소스를 사용합니다.

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance-pitr"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"
  settings {
    tier = "db-f1-micro"
    backup_configuration {
      enabled                        = true
      binary_log_enabled             = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
}

변경사항 적용

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

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

  • 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 응답이 표시됩니다.

REST v1beta4

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

  • 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 응답이 표시됩니다.

PITR 사용 중지

콘솔

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

    Cloud SQL 인스턴스로 이동

  2. 비활성화할 인스턴스의 추가 작업 메뉴 추가 작업 아이콘를 열고 수정을 선택합니다.
  3. 인스턴스 맞춤설정에서 데이터 보호 섹션을 펼칩니다.
  4. point-in-time recovery 사용 설정을 선택 해제합니다.
  5. 저장을 클릭합니다.

gcloud

  1. PITR(point-in-time recovery) 비활성화:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-bin-log
  2. 변경사항을 확인합니다.
    gcloud sql instances describe INSTANCE_NAME

    변경이 성공하면 backupConfiguration 섹션에 binaryLogEnabled: false가 표시됩니다.

REST v1

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

  • project-id: 프로젝트 ID
  • instance-id: 인스턴스 ID

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "binaryLogEnabled": false
    }
  }
}

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

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

REST v1beta4

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

  • project-id: 프로젝트 ID
  • instance-id: 인스턴스 ID

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "binaryLogEnabled": false
    }
  }
}

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

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

트랜잭션 로그 보관 설정

바이너리 로그를 보관할 일수를 설정하려면 다음 단계를 따르세요.

콘솔

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

    Cloud SQL 인스턴스로 이동

  2. 트랜잭션 로그를 설정할 인스턴스의 추가 작업 메뉴 추가 작업 아이콘를 열고 수정을 선택합니다.
  3. 인스턴스 맞춤설정에서 데이터 보호 섹션을 펼칩니다.
  4. point-in-time recovery 사용 설정 섹션에서 고급 옵션을 확장합니다.
  5. 로그를 보관할 일수(Cloud SQL Enterprise Plus 버전의 경우 1~35, Cloud SQL Enterprise 버전의 경우 1~7)를 입력합니다.
  6. 저장을 클릭합니다.

gcloud

인스턴스를 수정하여 바이너리 로그를 보관할 일수를 설정합니다.

다음을 바꿉니다.

  • INSTANCE_NAME: 트랜잭션 로그를 설정할 인스턴스의 이름
  • DAYS_TO_RETAIN: 트랜잭션 로그 보관 일수. Cloud SQL Enterprise Plus 버전의 경우 유효 범위는 1~35일이며 기본값은 14일입니다. Cloud SQL Enterprise 버전의 경우 유효 범위는 1~7일이며 기본값은 7일입니다.

    값을 지정하지 않으면 Cloud SQL에서 기본값을 사용합니다. PITR이 사용 설정된 경우에만 유효합니다. 트랜잭션 로그 보관 일수를 늘리려면 더 큰 스토리지 크기가 필요합니다.

  gcloud sql instances patch INSTANCE_NAME 
--retained-transaction-log-days=DAYS_TO_RETAIN

REST v1

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

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 인스턴스 ID
  • DAYS_TO_RETAIN: 트랜잭션 로그 보관 일수. Cloud SQL Enterprise Plus 버전의 경우 유효 범위는 1~35일이며 기본값은 14일입니다. Cloud SQL Enterprise 버전의 경우 유효 범위는 1~7일이며 기본값은 7일입니다.

    값을 지정하지 않으면 기본값이 사용됩니다. PITR이 사용 설정된 경우에만 유효합니다. 트랜잭션 로그 보관 일수를 늘리려면 더 큰 스토리지 크기가 필요합니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "DAYS_TO_RETAIN"
    }
  }
}

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

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

REST v1beta4

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

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 인스턴스 ID
  • DAYS_TO_RETAIN: 트랜잭션 로그 보관 일수. Cloud SQL Enterprise Plus 버전의 경우 유효 범위는 1~35일이며 기본값은 14일입니다. Cloud SQL Enterprise 버전의 경우 유효 범위는 1~7일이며 기본값은 7일입니다.

    값을 지정하지 않으면 기본값이 사용됩니다. PITR이 사용 설정된 경우에만 유효합니다. 트랜잭션 로그 보관 일수를 늘리려면 더 큰 스토리지 크기가 필요합니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "DAYS_TO_RETAIN"
    }
  }
}

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

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

PITR에 사용되는 트랜잭션 로그의 스토리지 위치 확인

Cloud SQL 인스턴스가 PITR에 사용되는 트랜잭션 로그를 저장하는 위치를 확인할 수 있습니다.

gcloud

인스턴스가 PITR 로그를 디스크 또는 Cloud Storage에 저장하는지 확인하려면 다음 명령어를 사용합니다.

   gcloud sql instances describe INSTANCE_NAME
   

INSTANCE_NAME을 인스턴스 이름으로 바꿉니다.

동일한 프로젝트에 있는 여러 인스턴스의 경우 트랜잭션 로그의 스토리지 위치를 확인할 수도 있습니다. 여러 인스턴스 위치를 확인하려면 다음 명령어를 사용합니다.

   gcloud sql instances list --show-transactional-log-storage-state
   

응답 예:

NAME  DATABASE_VERSION LOCATION       TRANSACTIONAL_LOG_STORAGE_STATE
my_01 MYSQL_8_0        us-central-1     DISK
my_02 MYSQL_8_0        us-central-1     CLOUD_STORAGE
...
   

명령어 출력의 transactionalLogStorageState 필드나 TRANSACTIONAL_LOG_STORAGE_STATE 열은 PITR의 트랜잭션 로그가 인스턴스에 대해 저장되는 위치에 대한 정보를 제공합니다. 가능한 트랜잭션 로그 스토리지 상태는 다음과 같습니다.

  • DISK: 인스턴스가 PITR에 사용되는 트랜잭션 로그를 디스크에 저장합니다. Cloud SQL Enterprise 버전 인스턴스를 Cloud SQL Enterprise Plus 버전으로 업그레이드하는 경우 업그레이드 프로세스에서 로그 스토리지 위치를 자동으로 Cloud Storage로 전환합니다. 자세한 내용은 인플레이스 업그레이드를 사용하여 인스턴스를 Cloud SQL Enterprise Plus 버전으로 업그레이드를 참조하세요. 인스턴스 버전 업그레이드 및 다운타임 없이 gcloud CLI 또는 Cloud SQL Admin API를 사용하여 스토리지 위치를 전환할 수도 있습니다. 자세한 내용은 트랜잭션 로그 스토리지를 Cloud Storage로 전환을 참조하세요.
  • SWITCHING_TO_CLOUD_STORAGE: 인스턴스가 PITR 트랜잭션 로그의 스토리지 위치를 Cloud Storage로 전환하고 있습니다.
  • SWITCHED_TO_CLOUD_STORAGE: 인스턴스가 PITR 트랜잭션 로그의 스토리지 위치를 디스크에서 Cloud Storage로 전환하는 작업을 완료하였습니다.
  • CLOUD_STORAGE: 인스턴스가 PITR에 사용되는 트랜잭션 로그를 Cloud Storage에 저장합니다.

트랜잭션 로그 스토리지를 Cloud Storage로 전환

인스턴스에서 PITR에 사용되는 트랜잭션 로그를 디스크에 저장하는 경우 다운타임 없이 스토리지 위치를 Cloud Storage로 전환할 수 있습니다. 스토리지 위치 전환 전체 프로세스가 완료되는 데 트랜잭션 로그 보관 기간(일)과 비슷한 시간이 소요됩니다. 전환을 시작하자마자 Cloud Storage에 트랜잭션 로그가 누적되기 시작합니다. 작업 중에 PITR에 사용되는 트랜잭션 로그의 스토리지 위치 확인에서 명령어를 사용하여 전체 프로세스 상태를 확인할 수 있습니다.

Cloud Storage로 전환 전체 프로세스가 완료되면 Cloud SQL은 PITR에 Cloud Storage의 트랜잭션 로그를 사용합니다.

gcloud

스토리지 위치를 Cloud Storage로 전환하려면 다음 명령어를 사용합니다.

   gcloud sql instances patch INSTANCE_NAME \
      --switch-transaction-logs-to-cloud-storage
   

INSTANCE_NAME을 인스턴스 이름으로 바꿉니다. 인스턴스는 복제본 인스턴스가 아닌 기본 인스턴스여야 합니다. 응답은 다음 예시와 유사합니다.

The following message is used for the patch API method.
{"name": "INSTANCE_NAME", "project": "PROJECT_NAME", "switchTransactionalLogsToCloudStorageEnabled": "true"}

Patching Cloud SQL instance...done.
Updated
[https://sqladmin.prod.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME].
   

명령어에서 오류를 반환하는 경우 다음 단계는 Cloud Storage로의 전환 문제 해결을 참조하세요.

REST v1

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

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 인스턴스 ID입니다. 인스턴스는 복제본 인스턴스가 아닌 기본 인스턴스여야 합니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

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

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

요청에서 오류를 반환하는 경우 다음 단계는 Cloud Storage로의 전환 문제 해결을 참조하세요.

REST v1beta4

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

  • PROJECT_ID: 프로젝트 ID
  • INSTANCE_ID: 인스턴스 ID입니다. 인스턴스는 복제본 인스턴스가 아닌 기본 인스턴스여야 합니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
   "switchTransactionLogsToCloudStorageEnabled": true
}

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

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

요청에서 오류를 반환하는 경우 다음 단계는 Cloud Storage로의 전환 문제 해결을 참조하세요.

전환 후 트랜잭션 로그 스토리지 및 구성

Cloud SQL은 복제 목적으로 바이너리 로그 사본을 디스크에 계속 보관합니다.

mysqlbinlog 유틸리티로 바이너리 로그를 탐색하려는 경우 디스크에 바이너리 로그를 저장하는 것이 유용합니다.

전환 전에 인스턴스에서 expire_logs_days 또는 binlog_expire_logs_seconds 플래그를 구성한 경우 구성된 값은 그대로 유지됩니다.

전환 후에는 PITR을 수행하는 데 사용되는 바이너리 로그가 Cloud Storage에 저장되므로 플래그 값이 예상 디스크에 트랜잭션 로그 보관을 반영하는지 확인합니다. Cloud SQL은 다음 중 하나의 최솟값에 대한 로그를 디스크에만 보관합니다.

  • 전환 전 transactionLogRetentionDays PITR 구성 설정 이 설정의 기본값은 7일입니다.
  • 인스턴스에 수동으로 설정된 expire_logs_days 또는 binlog_expire_logs_seconds 플래그

디스크 공간을 절약하려면 전환 프로세스가 완료된 후에 expire_logs_days 또는 binlog_expire_logs_seconds 플래그의 값을 1일로 구성하여 할당된 디스크 크기와 디스크 스토리지 비용을 줄이세요. 트랜잭션 로그 스토리지와 PITR에 대한 자세한 내용은 PITR의 로그 스토리지를 참조하세요.

디스크 사용량을 확인하는 방법에 대한 자세한 내용은 로그 및 디스크 사용량을 참고하세요.

Cloud Storage로 전환 문제 해결

다음 표에는 트랜잭션 로그의 스토리지 위치를 디스크에서 Cloud Storage로 전환할 때 INVALID REQUEST 코드와 함께 반환될 수 있는 오류가 나와 있습니다.

문제 문제 해결
Switching the storage location of the transaction logs used for PITR is not supported for instances with database type %s. MySQL용 Cloud SQL 또는 PostgreSQL용 Cloud SQL 인스턴스에서 gcloud CLI 명령어를 실행하거나 API 요청을 보내고 있는지 확인합니다. SQL Server용 Cloud SQL에서는 gcloud CLI 또는 Cloud SQL Admin API를 사용하여 트랜잭션 로그의 스토리지 위치를 전환할 수 없습니다.
MySQL transactional logging is not enabled on this instance. MySQL은 PITR(point-in-time recovery)의 트랜잭션 로그로 바이너리 로깅을 사용합니다. PITR을 지원하려면 MySQL에서 인스턴스에 바이너리 로깅을 사용 설정해야 합니다. 바이너리 로깅을 사용 설정하는 방법에 대한 자세한 내용은 PITR 사용 설정을 참조하세요.
This command is not supported on replica instances. Run the command on the primary instance instead. 명령어를 실행하거나 API 요청을 보낼 때 기본 인스턴스를 지정해야 합니다.
This instance is already storing transaction logs used for PITR in Cloud Storage 트랜잭션 로그의 스토리지 위치를 확인하려면 PITR에 사용되는 트랜잭션 로그의 스토리지 위치 확인에서 명령어를 실행합니다.
The instance is already switching transaction logs used for PITR from disk to Cloud Storage.

전환 작업이 완료될 때까지 기다립니다.

작업 상태와 트랜잭션 로그의 스토리지 위치를 확인하려면 PITR에 사용되는 트랜잭션 로그의 스토리지 위치 확인에서 명령어를 실행합니다.

다음 단계