point-in-time recovery(PITR) 사용

이 페이지에서는 PITR(point-in-time recovery)을 사용하여 기본 Cloud SQL 인스턴스를 복원하는 방법을 설명합니다.

PITR에 대한 자세한 내용은 PITR(point-in-time recovery)을 참조하세요.

PITR의 로그 스토리지

2024년 5월 31일 PITR의 트랜잭션 로그 저장 기능이 Cloud Storage에 출시되었습니다. 이 출시 이후에는 다음 조건이 적용됩니다.

  • 이 날짜 이전에 PITR이 사용 설정된 상태로 만든 모든 Cloud SQL 인스턴스는 PITR에 사용되는 트랜잭션 로그를 디스크에 저장합니다.

  • 이 날짜 또는 이후에 PITR을 사용 설정하여 생성된 모든 Cloud SQL 인스턴스는 다음과 같은 로그를 Cloud Storage에 저장합니다.

트랜잭션 로그는 정기적으로 업데이트되고 저장공간을 사용합니다. Cloud SQL은 연결된 자동 백업이 있는 트랜잭션 로그를 자동으로 삭제합니다. 이 작업은 transactionLogRetentionDays 매개변수에 설정된 값이 충족된 후에 발생합니다. 이 매개변수에 대한 자세한 내용은 로그 및 디스크 사용량을 참조하세요.

디스크에만 트랜잭션 로그를 저장하는 인스턴스의 경우 먼저 PITR을 비활성화한 다음 다시 사용 설정하여 로그를 Cloud Storage에 저장하도록 Cloud SQL을 구성할 수 있습니다. 로그를 Cloud Storage에서 디스크로 다시 이동할 수 없습니다.

인스턴스에 대한 로그가 디스크 대신 Cloud Storage에 저장되도록 하려면 다음 작업을 완료합니다.

로그 및 디스크 사용량

트랜잭션 로그가 Cloud Storage에 저장된 인스턴스의 경우 로그가 기본 인스턴스와 동일한 리전에 저장됩니다. 이 로그 스토리지(Cloud SQL Enterprise Plus 버전의 경우 최대 35일, Cloud SQL Enterprise 버전의 경우 7일, PITR(point-in-time recovery) 최대 길이)에서는 인스턴스당 추가 비용이 발생하지 않습니다.

Cloud SQL은 정기적으로 트랜잭션 로그를 생성하며 이러한 로그는 저장공간을 사용합니다. Cloud SQL은 연결된 자동 백업과 함께 트랜잭션 로그를 자동으로 삭제합니다. 이 작업은 transactionLogRetentionDays 파라미터에 설정된 값이 충족되면 발생합니다. 이 파라미터는 Cloud SQL이 트랜잭션 로그를 보관하는 일수를 지정합니다. Cloud SQL Enterprise Plus 버전의 경우 트랜잭션 로그 보관 일수를 1~35일로 설정할 수 있고 Cloud SQL Enterprise 버전의 경우 이 값을 1~7일로 설정할 수 있습니다.

트랜잭션 로그에서 사용하는 디스크 양을 확인하려면 인스턴스의 bytes_used_by_data_type 측정항목을 확인합니다. 데이터 유형의 값은 디스크의 트랜잭션 로그 크기를 반환합니다. PITR에 사용되는 트랜잭션 로그를 디스크에 저장하는 인스턴스의 경우 Cloud SQL은 자동 백업 보관에 설명된 대로 transactionLogRetentionDays PITR 설정을 충족하도록 디스크의 데이터를 매일 삭제합니다.

인스턴스에 PITR이 사용 설정되어 있고 디스크의 트랜잭션 로그 크기로 인해 인스턴스에 문제가 발생하는 경우 다음을 수행합니다.

  • PITR을 비활성화하고 다시 사용 설정하면 인스턴스와 동일한 리전의 Cloud Storage에 로그가 저장되도록 할 수 있습니다. 그러나 기존 로그는 모두 삭제되므로 PITR을 다시 사용 설정한 시간 이전에 특정 시점 복원을 수행할 수 없습니다.
  • 인스턴스 스토리지 크기를 늘리면 됩니다. 하지만 트랜잭션 로그 크기에 따른 디스크 사용량 증가가 일시적인 것일 수도 있습니다.
  • 예기치 않은 스토리지 문제를 막으려면 스토리지 용량 자동 증가를 사용 설정하는 것이 좋습니다. 이 권장사항은 인스턴스에 PITR이 사용 설정되어 있고 로그가 디스크에 저장된 경우에만 적용됩니다.
  • 로그를 삭제하고 스토리지를 복구하려면 PITR을 다시 사용 설정하지 않고 중지하면 됩니다. 하지만 사용되는 저장용량을 줄여도 인스턴스에 프로비저닝된 디스크의 크기는 줄어들지 않습니다.
  • 로그는 매일 한 번씩 영구 삭제되며, 지속적으로 진행되지 않습니다. 로그 보관 기간을 2일로 설정하면 최소 2일 동안의 로그 및 최대 3일 동안의 로그가 보관됩니다. 백업 수를 로그 보관 일수보다 2 이상으로 설정하는 것이 좋습니다.

    예를 들어 transactionLogRetentionDays 매개변의 값을 7로 설정하면 backupRetentionSettings 매개변수의 retainedBackups 수를 8로 설정합니다.

PITR에 대한 자세한 내용은 PITR(point-in-time recovery)을 참고하세요.

PITR의 데이터베이스 복구 모델

인스턴스에서 PITR을 사용 설정하면 Cloud SQL에서 자동으로 기존 및 후속 데이터베이스의 복구 모델을 전체 복구 모델로 설정합니다.

SQL Server 복구 모델에 대한 자세한 내용은 Microsoft 문서를 참조하세요.

PITR 사용 설정

Google Cloud 콘솔에서 새 인스턴스를 만들면 자동 백업 설정이 자동으로 사용 설정됩니다.

다음 절차는 기존의 기본 인스턴스에서 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-point-in-time-recovery

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

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

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

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,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

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

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

REST v1beta4

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

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

HTTP 메서드 및 URL:

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

JSON 요청 본문:

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

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

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

PITR 수행

콘솔

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

    Cloud SQL 인스턴스로 이동

  2. 복구할 인스턴스의 추가 작업 메뉴(추가 작업 아이콘)를 열고 클론 만들기를 클릭합니다.
  3. 필요한 경우 클론 만들기 페이지에서 새 클론의 ID를 업데이트합니다.
  4. 이전 시점에서 클론을 선택합니다.
  5. PITR 시간을 입력합니다.
  6. 모든 데이터베이스를 선택하거나 데이터베이스 이름을 지정합니다.
    데이터베이스 이름을 지정하는 경우 하나만 선택할 수 있습니다. 기본적으로 PITR은 모든 데이터베이스에서 사용됩니다.
  7. 클론 만들기를 클릭합니다.

gcloud

PITR을 사용하여 클론을 만듭니다.

다음을 바꿉니다.

  • SOURCE_INSTANCE_NAME - 복원할 인스턴스의 이름입니다.
  • NEW_INSTANCE_NAME - 클론 이름입니다.
  • TIMESTAMP - RFC 3339 형식의 소스 인스턴스 UTC 시간대입니다. 예를 들면 2012-11-15T16:19:00.094Z입니다.
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time 'TIMESTAMP'

REST v1

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

  • project-id: 프로젝트 ID
  • target-instance-id: 대상 인스턴스 ID
  • source-instance-id: 소스 인스턴스 ID
  • restore-timestamp 복원할 특정 시점

JSON 요청에서 최대 1개의 특정 데이터베이스 이름을 "databaseNames": "my-database"로 지정할 수 있습니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

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

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

REST v1beta4

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

  • project-id: 프로젝트 ID
  • target-instance-id: 대상 인스턴스 ID
  • source-instance-id: 소스 인스턴스 ID
  • restore-timestamp 복원할 특정 시점

JSON 요청에서 최대 1개의 특정 데이터베이스 이름을 "databaseNames": "my-database"로 지정할 수 있습니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

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

다음과 비슷한 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-point-in-time-recovery
  2. 변경사항을 확인합니다.
    gcloud sql instances describe INSTANCE_NAME

    변경이 성공하면 backupConfiguration 섹션에 pointInTimeRecoveryEnabled: 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,
      "pointInTimeRecoveryEnabled": 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,
      "pointInTimeRecoveryEnabled": false
    }
  }
}

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

다음과 비슷한 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 SQLSERVER_2019_STANDARD  us-central-1   DISK
my_02 SQLSERVER_2019_STANDARD  us-central-1   CLOUD_STORAGE
...
   

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

  • DISK: 인스턴스가 PITR에 사용되는 트랜잭션 로그를 디스크에 저장합니다.
  • CLOUD_STORAGE: 인스턴스가 PITR에 사용되는 트랜잭션 로그를 Cloud Storage에 저장합니다.

트랜잭션 로그 보관 설정

트랜잭션 로그를 보관할 일수를 설정하려면 다음 안내를 따르세요.

콘솔

  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일입니다.

    값을 지정하지 않으면 기본값이 사용됩니다. 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 응답이 표시됩니다.

문제 해결

문제 문제 해결

argument --point-in-time: Failed to parse date/time:
Unknown string format: 2021-0928T30:54:03.094;
received: 2021-0928T30:54:03.094Z

또는

Invalid value at 'body.clone_context.point_in_time'
(type.googleapis.com/google.protobuf.Timestamp), Field 'pointInTime',
Invalid time format: Failed to parse input,

입력한 타임스탬프가 잘못되었습니다.

HTTP Error 400: Successful backup required for carrying out the operation was not found.

또는

Successful backup required for carrying out the operation was not found. or Time where no backups can be found.

입력한 타임스탬프는 백업 또는 바이너리 좌표를 찾을 수 없는 경우의 시간입니다.

다음 단계