ポイントインタイム リカバリ(PITR)を使用する

このページでは、ポイントインタイム リカバリ(PITR)を使用してプライマリ Cloud SQL インスタンスを復元する方法について説明します。

PITR の詳細については、ポイントインタイム リカバリ(PITR)をご覧ください。

PITR 用のログストレージ

2024 年 5 月 31 日、Google は、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 日間、PRTR の最大時間)では、インスタンスごとの追加コストは発生しません。

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 を無効にして、再度有効にしないことができます。ただし、使用されるストレージを減らしても、インスタンスにプロビジョニングされたディスクのサイズは縮小しません。
  • ログは継続的にではなく、1 日 1 回削除されます。ログの保持期間を 2 日に設定すると、少なくとも 2 日間、最大で 3 日間のログが保持されます。バックアップの日数は、ログの保持期間よりも 1 日長く設定することをおすすめします。

    たとえば、transactionLogRetentionDays パラメータの値に 7 を指定した場合、backupRetentionSettings パラメータの retainedBackups の値を 8 に設定します。

PITR の詳細については、ポイントインタイム リカバリ(PITR)をご覧ください。

PITR 用のデータベース復旧モデル

インスタンスで PITR を有効にすると、Cloud SQL は既存のデータベースと後続のデータベースの復旧モデルを自動的に完全復旧モデルに設定します。

SQL Server の復旧モデルの詳細については、Microsoft のドキュメントをご覧ください。

PITR を有効にする

Google Cloud コンソールで新しいインスタンスを作成すると、[自動バックアップ] の設定が自動的に有効になります。

次の手順では、既存のプライマリ インスタンスで PITR を有効にします。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. PITR を有効にするインスタンスの [その他の操作] メニュー その他の操作アイコン を開き、[編集] をクリックします。
  3. [インスタンスのカスタマイズ] で、[データ保護] セクションを開きます。
  4. [ポイントインタイム リカバリを有効にする] チェックボックスをオンにします。
  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

    backup-start-time パラメータは、UTC±00 タイムゾーンの 24 時間形式で指定されます。

  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. [すべてのデータベース] を選択するか、データベース名を指定します。
    データベース名を指定すると、1 つのみ選択されます。デフォルトでは、PITR はすべてのデータベースに適用されます。
  7. [クローンを作成] をクリックします。

gcloud

PITR を使用してクローンを作成します。

次のように置き換えます。

  • SOURCE_INSTANCE_NAME - 復元元のインスタンスの名前。
  • NEW_INSTANCE_NAME - クローンの名前。
  • TIMESTAMP - ソース インスタンスの UTC タイムゾーン(RFC 3339 形式)。例: 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. [ポイントインタイム リカバリを有効にする] をクリアします。
  5. [保存] をクリックします。

gcloud

  1. ポイントインタイム リカバリを無効にします。
    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 に使用されるトランザクション ログの保存場所を確認する

PITR に使用されるトランザクション ログが、Cloud SQL インスタンスによってどこに保存されるのかを確認できます。

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
...
   

コマンドの出力で、そのインスタンスでの PITR のトランザクション ログが保存されている場所に関する情報が、transactionalLogStorageState フィールドまたは TRANSACTIONAL_LOG_STORAGE_STATE 列に示されます。トランザクション ログの保存状態には、次のようなものがあります。

  • DISK: インスタンスは、PITR に使用されるトランザクション ログをディスクに保存します。
  • CLOUD_STORAGE: インスタンスは、PITR に使用されるトランザクション ログを Cloud Storage に保存します。

トランザクション ログの保持を設定する

トランザクション ログの保持日数を設定するには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. トランザクション ログを設定するインスタンスの [その他の操作] メニュー その他の操作アイコン を開き、[編集] を選択します。
  3. [インスタンスのカスタマイズ] で、[データ保護] セクションを開きます。
  4. [ポイントインタイム リカバリを有効にする] セクションで、[詳細オプション] を開きます。
  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.

指定したタイムスタンプは、バックアップの時間または binlog 座標を発見できなかった時間です。

次のステップ