ポイントインタイム リカバリ(PITR)を構成する

Google Cloud コンソールで新しいインスタンスを作成すると、自動バックアップポイントインタイム リカバリ(PITR)の両方が自動的に有効になります。既存のインスタンスに対して PITR を構成するには、次の操作を行います。

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 が表示されます。

Terraform

PITR を有効にするには、Terraform リソースを使用します。

resource "google_sql_database_instance" "postgres_instance_pitr" {
  name             = ""
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

変更を適用する

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    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 を初期化します。これは、ディレクトリごとに 1 回だけ行います。
    terraform init

    最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行します。プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。

  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,
      "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. [インスタンスのカスタマイズ] で、[データ保護] セクションを開きます。
  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 レスポンスが返されます。

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

write-ahead log を保持する日数を設定するには:

コンソール

  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 日です。

    値を指定しない場合、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 に使用されるトランザクション ログの保存場所を確認する

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 POSTGRES_12      us-central-1     DISK
my_02 POSTGRES_12      us-central-1     CLOUD_STORAGE
...
   

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

  • 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 で Cloud Storage のトランザクション ログが PITR に使用されます。

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 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. Cloud SQL for MySQL インスタンスまたは Cloud SQL for PostgreSQL インスタンスで gcloud CLI コマンドを実行していること、または API リクエストを実行していることを確認します。Cloud SQL for SQL Server では、gcloud CLI または Cloud SQL Admin API を使用してトランザクション ログの保存場所を切り替えることはできません。
PostgreSQL transactional logging is not enabled on this instance. PostgreSQL では、ポイントインタイム リカバリ(PITR)用のトランザクション ログとして write-ahead log 書き込みが使用されます。PITR をサポートするには、PostgreSQL のインスタンスで write-ahead log 書き込みを有効にする必要があります。write-ahead log 書き込みを有効にする方法の詳細については、PITR を有効にするをご覧ください。
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 に使用されるトランザクション ログの保存場所を確認するのコマンドを実行します。

次のステップ