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

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

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

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

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

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 を実行する

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: インスタンスを復元するポイントインタイム

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

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

次のステップ