ポイントインタイム リカバリ(PITR)を実行する

ポイントインタイム リカバリ(PITR)を使用すると、インスタンスが稼働中であるか削除されているかにかかわらず、プライマリ Cloud SQL インスタンスを復元できます。PITR を使用すると、インスタンスを特定の時点に復元できます。削除されたインスタンスの場合は、インスタンスを特定の時点に復元して、新しいインスタンスまたは既存のインスタンスに復元できます。

Cloud SQL には、PITR を使用してインスタンスを復元するための次のオプションが用意されています。

使用できないインスタンスまたは削除されたインスタンスで PITR を実行するには、最新の復元時刻と最も古い復元時刻を見つける必要があります。

PITR を実行する

コンソール

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

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

  2. 復元するインスタンスの [その他の操作] メニュー その他の操作アイコン を開き、[クローンを作成] をクリックします。
  3. 必要に応じて、[クローンの作成] ページで新しいクローンの ID を更新します。
  4. [過去の時点からクローンを作成] を選択します。
  5. PITR の時間を入力します。
  6. [クローンを作成] をクリックします。

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: 復元の終点となるポイントインタイム

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: 復元の終点となるポイントインタイム

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 レスポンスが返されます。

Backup Vault を使用して PITR を実行する

Cloud SQL インスタンスで拡張バックアップの使用が有効になっている場合は、Backup Vault を使用してインスタンスのポイントインタイム リカバリを実行できます。

コンソール

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

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

  2. 復元するインスタンスの [その他の操作] メニュー その他アイコン を開き、[クローンの作成] をクリックします。

  3. [過去の時点からクローンを作成] を選択します。

  4. PITR の時間を入力します。

  5. [クローンを作成] をクリックします。

gcloud

Backup Vault のインスタンスで PITR を実行するには、PITR を実行する時刻に最も近いバックアップの data-source を見つける必要があります。バックアップを見つけるには、インスタンスの Backup Vault 内のすべてのバックアップを表示するをご覧ください。バックアップを特定したら、次のコマンドを実行して PITR を実行します。

gcloud sql instances point-in-time-restore DATA_SOURCE
PITR_TIMESTAMP
--project=TARGET_PROJECT

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

  • DATA_SOURCE: 復元する PITR のタイムスタンプに最も近いバックアップの data-source のパス。
  • PITR_TIMESTAMP: インスタンスの復元先となるソース インスタンスの PITR ログの UTC タイムスタンプ(RFC 3339 形式)。例: 2012-11-15T16:19:00.094Z
  • TARGET_PROJECT: Cloud SQL インスタンスのプロジェクト ID。

REST v1

REST v1beta4

使用不能なインスタンスで PITR を実行する

コンソール

次の理由により、使用不能なインスタンスを別のゾーンに復元する必要がある場合があります。

  • インスタンスが構成されているゾーンにアクセスできない。このインスタンスの状態は FAILED になります。
  • インスタンスがメンテナンス中である。このインスタンスの状態は MAINTENANCE になります。

使用不能なインスタンスを復元するには、次の手順を実行します。

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

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

  2. クローンを作成するインスタンスの行を見つけます。
  3. [アクション] 列で、 [その他の操作] メニューをクリックします。
  4. [クローンを作成] をクリックします。
  5. [クローンを作成] ページで、次の操作を行います。
    1. [インスタンス ID] フィールドで、必要に応じてインスタンス ID を更新します。
    2. [過去の時点からクローンを作成] を選択します。
    3. [ポイントインタイム] フィールドで、データのクローンを作成する日時を選択します。これにより、その時点のインスタンスの状態が復元されます。
    4. [クローンを作成] をクリックします。
  6. クローンの初期化中に、インスタンスの一覧ページに戻ります。

gcloud

使用不能なインスタンスを別のゾーンに復元する必要がある場合があります。これは、インスタンスが構成されているゾーンにアクセスできないためです。

gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--point-in-time DATE_AND_TIME_STAMP \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME

gcloud sql instances clone コマンドを実行しているユーザーまたはサービス アカウントには、cloudsql.instances.clone 権限が必要です。gcloud CLI コマンドを実行するために必要な権限の詳細については、Cloud SQL の権限をご覧ください。

REST v1

使用不能なインスタンスを別のゾーンに復元する必要がある場合があります。これは、インスタンスが構成されているゾーンにアクセスできないためです。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • SOURCE_INSTANCE_NAME: ソース インスタンスの名前。
  • TARGET_INSTANCE_NAME: ターゲット(クローン)インスタンスの名前。
  • DATE_AND_TIME_STAMP: UTC タイムゾーンRFC 3339 形式(例:
    2012-11-15T16:19:00.094Z)のソース インスタンスの日付と時刻のスタンプ。
  • ZONE_NAME: 省略可。ターゲット インスタンスのプライマリ ゾーンの名前。これは、クローンを作成する Cloud SQL インスタンスに別のプライマリ ゾーンを指定するために使用されます。リージョン インスタンスの場合、プライマリ ゾーンはこのゾーンに置き換わりますが、セカンダリ ゾーンはインスタンスと同じままです。
  • SECONDARY_ZONE_NAME: 省略可。ターゲット インスタンスのセカンダリ ゾーンの名前。これは、クローンを作成するリージョン Cloud SQL インスタンスに別のセカンダリ ゾーンを指定するために使用されます。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

instances.clone API メソッドを使用するユーザーまたはサービス アカウントには、cloudsql.instances.clone 権限が必要です。API メソッドの使用に必要な権限の詳細については、Cloud SQL の権限をご覧ください。

REST v1beta4

使用不能なインスタンスを別のゾーンに復元する必要がある場合があります。これは、インスタンスが構成されているゾーンにアクセスできないためです。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • SOURCE_INSTANCE_NAME: ソース インスタンスの名前。
  • TARGET_INSTANCE_NAME: ターゲット(クローン)インスタンスの名前。
  • DATE_AND_TIME_STAMP: UTC タイムゾーンRFC 3339 形式(例:
    2012-11-15T16:19:00.094Z)のソース インスタンスの日付と時刻のスタンプ。
  • ZONE_NAME: 省略可。ターゲット インスタンスのプライマリ ゾーンの名前。これは、クローンを作成する Cloud SQL インスタンスに別のプライマリ ゾーンを指定するために使用されます。リージョン インスタンスの場合、プライマリ ゾーンはこのゾーンに置き換わりますが、セカンダリ ゾーンはインスタンスと同じままです。
  • SECONDARY_ZONE_NAME: 省略可。ターゲット インスタンスのセカンダリ ゾーンの名前。これは、クローンを作成するリージョン Cloud SQL インスタンスに別のセカンダリ ゾーンを指定するために使用されます。

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

リクエストの本文(JSON):

{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

instances.clone API メソッドを使用するユーザーまたはサービス アカウントには、cloudsql.instances.clone 権限が必要です。API メソッドの使用に必要な権限の詳細については、Cloud SQL の権限をご覧ください。

最新の復元可能時間より後の時点で PITR クローンを作成しようとすると、次のエラー メッセージが表示されます。

The timestamp for point-in-time recovery is after the latest recovery time of
Timestamp of latest recovery time. Clone the instance with a time
that's earlier than this recovery time.

削除されたインスタンスで PITR を実行する

PITR を使用して削除されたインスタンスを復元するには、以下が必要になります。

  • インスタンスを復元する PITR タイムスタンプ(timestamp
  • ターゲット インスタンス名
  • ソース インスタンスが削除された時刻(source-instance-deletion-time

削除されたインスタンスで PITR を使用できるのは、gcloud CLI または Cloud SQL API を使用する場合のみです。詳細については、PITR を使用して削除されたインスタンスを復元するをご覧ください。

gcloud

PITR 期間を確認する

削除したインスタンスの PITR 期間を確認するには、インスタンスの最も早い復元時刻と最も遅い復元時刻を取得します。この期間内で任意の時刻のタイムスタンプを選択して、PITR を実行できます。

ソース インスタンスの削除時刻とログの保持日数を確認する

削除されたインスタンスの source-instance-deletion-timelog-retention-days は、削除後にインスタンスの保持されたバックアップとともに保存されます。削除したインスタンスのこれらの値を確認するには、保持されたバックアップを一覧表示するをご覧ください。

PITR を使用して復元する

PITR を使用して削除したインスタンスを復元するには、次のコマンドを実行します。

gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time='PITR_TIMESTAMP' \
--source-instance-deletion-time=SOURCE_INSTANCE_DELETION_TIMESTAMP

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

  • SOURCE_INSTANCE_NAME: 復元するソース インスタンスの名前。
  • NEW_INSTANCE_NAME: 新しいインスタンスの名前。
  • PITR_TIMESTAMP: インスタンスの復元先となるソース インスタンスの PITR ログの UTC タイムスタンプ(RFC 3339 形式)。例: 2012-11-15T16:19:00.094Z
  • SOURCE_INSTANCE_DELETION_TIMESTAMP: ソース インスタンスが削除された時刻の UTC タイムスタンプ(RFC 3339 形式)。例: 2012-11-15T16:19:00.094Z

REST v1

PITR 期間を確認する

削除したインスタンスの PITR 期間を確認するには、インスタンスの最も早い復元時刻と最も遅い復元時刻を取得します。この期間内で任意の時刻のタイムスタンプを選択して、PITR を実行できます。

ソース インスタンスの削除時刻とログの保持日数を確認する

削除されたインスタンスの source-instance-deletion-timelog-retention-days は、削除後にインスタンスの保持されたバックアップとともに保存されます。削除したインスタンスのこれらの値を確認するには、保持されたバックアップを一覧表示するをご覧ください。

PITR を使用して復元する

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID
  • target-instance-id: ターゲット インスタンス ID
  • source-instance-id: ソース インスタンス ID
  • source-instance-deletion-time: ソース インスタンスの削除時刻
  • restore-timestamp: インスタンスを復元するポイントインタイム

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",
    "sourceInstanceDeletionTime: "source-instance-deletion-time",
    "pointInTime": "restore-timestamp"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

PITR 期間を確認する

削除したインスタンスの PITR 期間を確認するには、インスタンスの最も早い復元時刻と最も遅い復元時刻を取得します。この期間内で任意の時刻のタイムスタンプを選択して、PITR を実行できます。

ソース インスタンスの削除時刻とログの保持日数を確認する

削除されたインスタンスの source-instance-deletion-timelog-retention-days は、削除後にインスタンスの保持されたバックアップとともに保存されます。削除したインスタンスのこれらの値を確認するには、保持されたバックアップを一覧表示するをご覧ください。

PITR を使用して復元する

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: プロジェクト ID
  • target-instance-id: ターゲット インスタンス ID
  • source-instance-id: ソース インスタンス ID
  • source-instance-deletion-time: ソース インスタンスの削除時刻
  • restore-timestamp: インスタンスを復元するポイントインタイム

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",
    "sourceInstanceDeletionTime: "source-instance-deletion-time",
    "pointInTime": "restore-timestamp"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

最短と最長の復旧までの時間を取得する

使用可能なインスタンスについては、インスタンスの PITR 期間内の任意のタイムスタンプまでの PITR を実行できます。PITR 期間は、最も早い復元時刻から始まり、最も遅い復元時刻で終わります。インスタンスが使用不能になり、インスタンス ログが Cloud Storage に保存されている場合、またはインスタンスが削除され、PITR 保持が有効になっていた場合は、最も古い復元時刻と最も新しい復元時刻を取得して、その期間内の任意のタイムスタンプまでの PITR を実行できます。どのケースでも、優先ゾーンの値を指定してインスタンスを別のプライマリ ゾーンまたはセカンダリ ゾーンに復元できます。

gcloud

利用不可のインスタンス

使用不能な Cloud SQL インスタンスを復元できる最も早い時刻と最も遅い時刻を取得するには、次のコマンドを実行します。

gcloud sql instances get-latest-recovery-time INSTANCE_NAME

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

  • INSTANCE_NAME: 最新の復元時刻を取得するインスタンスの名前。

削除されたインスタンス

Cloud SQL の削除済みインスタンスを復元できる最も早い時刻と最も遅い時刻を取得するには、次のコマンドを実行します。

gcloud sql instances get-latest-recovery-time INSTANCE_NAME
--source-instance-deletion-time='SOURCE_INSTANCE_DELETION_TIMESTAMP'

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

  • INSTANCE_NAME: 最新の復元時刻を取得するインスタンスの名前。
  • SOURCE_INSTANCE_DELETION_TIMESTAMP: ソース インスタンスが削除された時刻の UTC タイムスタンプ(RFC 3339 形式)。例: 2012-11-15T16:19:00.094Z

REST v1

利用不可のインスタンス

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_NAME: 最新の復元時間をクエリするインスタンスの名前

HTTP メソッドと URL:

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

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

削除されたインスタンス

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_NAME: 最新の復元時刻をクエリするソース インスタンスの名前
  • SOURCE_INSTANCE_DELETION_TIME: ソース インスタンスが削除された時刻

HTTP メソッドと URL:

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

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

REST v1beta4

利用不可のインスタンス

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_NAME: 最新の復元時間をクエリするインスタンスの名前

HTTP メソッドと URL:

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

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

削除されたインスタンス

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_NAME: 最新の復元時刻をクエリするソース インスタンスの名前
  • SOURCE_INSTANCE_DELETION_TIME: ソース インスタンスが削除された時刻

HTTP メソッドと URL:

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

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

トラブルシューティング

問題 トラブルシューティング

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.

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

次のステップ