セルフサービス メンテナンス

このページでは、定期メンテナンスの通常のフローの範囲外でインスタンスのメンテナンス更新を受け入れることができるセルフサービス メンテナンスについて説明します。

概要

Cloud SQL は、既知の脆弱性に対するパッチなどのソフトウェアの改善を、新しいメンテナンス バージョンを通じて定期的にリリースしています。Cloud SQL は、メンテナンス更新を数か月ごとにスケジュールして、最新のメンテナンス バージョンを確実にお届けしますが、次の場合はセルフサービス メンテナンスを使用することをおすすめします。

  • 次回の定期メンテナンス イベントよりも前に更新が必要な場合。
  • 直近の定期メンテナンス イベントをスキップした後、最新のメンテナンス バージョンを使用する必要がある場合。

最新バージョンに手動で更新する必要はありません。次回の定期メンテナンス イベント中に、Cloud SQL でメンテナンス バージョンが自動的に更新されます。

プライマリ インスタンスのすべてのリードレプリカのメンテナンスを管理する

リードレプリカがあるプライマリ インスタンスでセルフサービス メンテナンスを実行すると、Cloud SQL はすべてのリードレプリカに自動的にメンテナンス更新を適用します。リードレプリカ インスタンスが 3 個を超える場合、インスタンスはグループに分割され、並列で更新されます。最後のステップとして、メンテナンス更新がプライマリ インスタンスに適用されます。

必要に応じて、単一のリードレプリカでセルフサービス メンテナンスを実行できます。ただし、すべてのリードレプリカ インスタンスとプライマリ インスタンスが同じメンテナンス バージョンで動作するように、プライマリ インスタンスのすべてのリードレプリカに対してセルフサービス メンテナンスを同時に実行することをおすすめします。

単一のリードレプリカ インスタンスを更新するには、セルフサービス メンテナンスを実行するときに、そのリードレプリカ インスタンスを指定します。

始める前に

セルフサービス メンテナンスを行う前に、現在のメンテナンス バージョンをまず確認してください。その後、更新するターゲット メンテナンス バージョンを決定し、そのバージョンにインスタンスを更新します。リードレプリカを使用する場合は、プライマリ インスタンスのすべてのリードレプリカをそのバージョンに更新します。

インスタンスの現在のメンテナンス バージョンを確認するには、次の手順を実施します。

gcloud

次の gcloud コマンドを実行する前に、次のように置き換えます。

  • INSTANCE_ID: クエリを実行するインスタンス
gcloud sql instances describe INSTANCE_ID
  

インスタンスにインストールされているメンテナンス バージョンは、maintenanceVersion 属性の横に表示されます。

REST v1

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

  • PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
  • INSTANCE_NAME: 高可用性構成を行うインスタンスの名前

HTTP メソッドと URL:

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

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

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "MYSQL_8_0"
}

レスポンスの DatabaseInstance セクションで maintenanceVersion 項目を探します。

REST v1beta4

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

  • PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
  • INSTANCE_NAME: 高可用性構成を行うインスタンスの名前

HTTP メソッドと URL:

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

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

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "MYSQL_8_0"
}

レスポンスの DatabaseInstance セクションで maintenanceVersion 項目を探します。

ターゲット メンテナンス バージョンを決定する

次の方法で、ターゲットとして選択できるメンテナンス バージョンを確認します。現在のメンテナンス バージョンより前のバージョンに更新することはできません。

gcloud

次の gcloud コマンドを実行する前に、次のように置き換えます。

  • INSTANCE_ID: クエリを実行するインスタンス
gcloud sql instances describe INSTANCE_ID
  

使用可能なメンテナンス バージョンは、availableMaintenanceVersions 属性の横に表示されます。

REST v1

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

  • PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
  • INSTANCE_NAME: 高可用性構成を行うインスタンスの名前

HTTP メソッドと URL:

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

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

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "MYSQL_8_0"
}

レスポンスの DatabaseInstance セクションで availableMaintenanceVersions 項目を探します。

REST v1beta4

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

  • PROJECT_ID: インスタンスが含まれている Google Cloud プロジェクトの ID またはプロジェクト番号
  • INSTANCE_NAME: 高可用性構成を行うインスタンスの名前

HTTP メソッドと URL:

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

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

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "MYSQL_8_0"
}

レスポンスの DatabaseInstance セクションで availableMaintenanceVersions 項目を探します。

プライマリ インスタンスのすべてのリードレプリカをターゲット メンテナンス バージョンに更新する

プライマリ インスタンスのすべてのリードレプリカ インスタンスでメンテナンス更新を実行するには、次の手順を実施します。

gcloud

次の gcloud コマンドを使用する前に、次のように置き換えます。

  • PRIMARY_INSTANCE_ID: プライマリ インスタンスの ID
  • MAINTENANCE_VERSION: 適用する Cloud SQL メンテナンス バージョン
gcloud sql instances patch PRIMARY_INSTANCE_ID \
   --maintenance-version=MAINTENANCE_VERSION
  

確認を求めるプロンプトが表示されたら、続行するには「Y」、キャンセルするには「N」と入力します。

Y を選択すると、更新プロセスはプライマリ インスタンスを更新する前に、指定されたメンテナンス バージョンをすべてのリードレプリカに適用します。ターゲット メンテナンス バージョンにすでに更新されているリードレプリカ インスタンスはスキップされます。

N を選択すると、インスタンスは更新されません。

リードレプリカとプライマリ インスタンスの更新が完了すると、次のようなメッセージが表示されます。

  Patching Cloud SQL instance....done.
  Patching Cloud SQL instance....done.
  Patching Cloud SQL instance....done.
  Updated [https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_ID]
  

Terraform

インスタンスを作成するには、Terraform リソースを使用します。

resource "google_sql_database_instance" "mysql_ssm_instance_name" {
  name                = "mysql-ssm-instance-name"
  region              = "asia-northeast1"
  database_version    = "MYSQL_5_7"
  maintenance_version = "MYSQL_5_7_38.R20220809.02_00"
  settings {
    tier = "db-f1-micro"
  }
  # 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: プロジェクト ID
  • PROJECT_ID: プライマリ インスタンスのインスタンス ID
  • MAINTENANCE_VERSION: 適用する Cloud SQL ソフトウェアのメンテナンス バージョン

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

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

{
  "maintenanceVersion": "MAINTENANCE_VERSION"
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "08:00",
  "endTime": "08:01",
  "operationType": UPDATE,
  "name": "OPERATION_ID",
  "targetId": "PRIMARY_INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

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

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_ID: プライマリ インスタンスのインスタンス ID
  • MAINTENANCE_VERSION: 適用する Cloud SQL ソフトウェアのメンテナンス バージョン

HTTP メソッドと URL:

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

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

{
  "maintenanceVersion": "MAINTENANCE_VERSION"
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "08:00",
  "endTime": "08:01",
  "operationType": UPDATE,
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

単一のインスタンスをターゲット メンテナンス バージョンに更新する

単一インスタンスでメンテナンス更新を実行するには、次の手順を実施します。必要に応じて、この手順を使用して単一のリードレプリカ インスタンスを更新できます。

gcloud

次の gcloud コマンドを使用する前に、次のように置き換えます。

  • INSTANCE_ID: インスタンスの ID。このインスタンスはリードレプリカ インスタンスとすることができます。
  • MAINTENANCE_VERSION: 適用する Cloud SQL メンテナンス バージョン
  gcloud sql instances patch INSTANCE_ID \
     --maintenance-version=MAINTENANCE_VERSION
  

リードレプリカを指定すると、確認を求めるプロンプトが表示されます。続行するには「Y」、キャンセルするには「N」と入力します。

  • Y を選択すると、更新プロセスは指定されたリードレプリカにのみ、指定されたメンテナンス バージョンを適用します。
  • N を選択すると、インスタンスは更新されません。

インスタンスの更新が完了すると、次のようなメッセージが表示されます。

  Patching Cloud SQL instance....done.
  Updated [https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID]
  

Terraform

インスタンスを作成するには、Terraform リソースを使用します。

resource "google_sql_database_instance" "mysql_ssm_instance_name" {
  name                = "mysql-ssm-instance-name"
  region              = "asia-northeast1"
  database_version    = "MYSQL_5_7"
  maintenance_version = "MYSQL_5_7_38.R20220809.02_00"
  settings {
    tier = "db-f1-micro"
  }
  # 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: プロジェクト ID
  • PROJECT_ID: インスタンス ID。リードレプリカ インスタンスとすることができます
  • MAINTENANCE_VERSION: 適用する Cloud SQL ソフトウェアのメンテナンス バージョン

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

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

{
  "maintenanceVersion": "MAINTENANCE_VERSION"
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "08:00",
  "endTime": "08:01",
  "operationType": UPDATE,
  "name": "OPERATION_ID",
  "targetId": "PRIMARY_INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

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

  • PROJECT_ID: プロジェクト ID
  • INSTANCE_ID: インスタンス ID。リードレプリカ インスタンスとすることができます
  • MAINTENANCE_VERSION: 適用する Cloud SQL ソフトウェアのメンテナンス バージョン

HTTP メソッドと URL:

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

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

{
  "maintenanceVersion": "MAINTENANCE_VERSION"
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "08:00",
  "endTime": "08:01",
  "operationType": UPDATE,
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

トラブルシューティング

問題 トラブルシューティング
停止中のインスタンスにメンテナンス更新を適用できません。 解決するには、セルフサービス メンテナンス更新を実行する前にインスタンスを起動します。
データベースのメジャー バージョンの違いにより、メンテナンス更新に失敗しました。

セルフサービス メンテナンスを使用して、インスタンスのデータベースのメジャー バージョンをアップグレードすることはできません。

インスタンスのメジャー バージョンをアップグレードするには、次のいずれかの手順を実施します。

データベースのマイナー バージョンの違いにより、メンテナンス更新が失敗しました。

セルフサービス メンテナンスを使用して、インスタンスのデータベースのマイナー バージョンをアップグレードすることはできません。

インスタンスのマイナー バージョンをアップグレードするには、データベースのマイナー バージョンをアップグレードするの手順に沿って操作します。

次のステップ