View and set maintenance windows

MySQL  |  PostgreSQL  |  SQL Server

This page has procedures for finding and setting maintenance windows forCloud SQL instances. To learn more about how and why Cloud SQLperforms maintenance, seeMaintenance updates on Cloud SQL instances.

If you'veopted in to receive maintenance notifications,then Cloud SQL sends you an email notification when amaintenance update is available for your Cloud SQLinstance. Cloud SQL sends a notification before themaintenance rollout and then proceeds to apply the update togroups of instances on a weekly schedule. You can control howmuch advance notification you receive before your instancereceives the maintenance update by selecting the maintenancetiming for your instance.

You have the following options for scheduling the timing of your maintenance update:

  • If you selectAny or don't configure this setting, then the maintenance update can happen at any time, but typically happens within the first week of the rollout.
  • If you selectWeek 1 (also referred to aspreview andcanary), then the maintenance update happens 7 to 14 days after the maintenance notification is sent out.
  • If you selectWeek 2 (also referred to asproduction andstable), then the maintenance update happens 15 to 21 days after the notification is sent out.
  • If you selectWeek 5, then the maintenance update happens 35 to 42 days after the notification is sent out.

If you make changes to your maintenance window setting while the instance is already undergoingmaintenance or isscheduled for maintenance, then the changes don't take effect immediately.These changes are reflected in future maintenance events.

Before you begin

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.create permission.Learn how to grant roles.
    Note: If you don't plan to keep the resources that you create in this procedure, create a project instead of selecting an existing project. After you finish these steps, you can delete the project, removing all resources associated with the project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install thegcloud CLI.

  5. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  6. Toinitialize the gcloud CLI, run the following command:

    gcloudinit
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.create permission.Learn how to grant roles.
    Note: If you don't plan to keep the resources that you create in this procedure, create a project instead of selecting an existing project. After you finish these steps, you can delete the project, removing all resources associated with the project.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install thegcloud CLI.

  10. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  11. Toinitialize the gcloud CLI, run the following command:

    gcloudinit

Set a maintenance window on an instance

Console

  1. In the Google Cloud console, go to theCloud SQL Instances page.

    Go to Cloud SQL Instances

  2. To open theOverview page of an instance, click the instance name.
  3. In theMaintenance section, clickEdit maintenance preferences.
  4. In theConfiguration options section, openMaintenance.
  5. Configure the following options:
    • Maintenance timing. Select the week to apply the automatic maintenance update. You have the following options:
      • Any: the maintenance update can happen at any time, but typically happens withinWeek 1.
      • Week 1: the maintenance happens 7 to 14 days after the maintenance notification is sent out.
      • Week 2: the maintenance update happens 15 to 21 days after the notification is sent out.
      • Week 5: the maintenance update happens 35 to 42 days after the notification is sent out.
    • Maintenance window. Select a preferred day of the week and time window. Options include the following:
      • Any window: the default maintenance window. The maintenance update is not restricted to any specific day of the week or time of day.
      • Day of the week: select a day for your maintenance windowSaturday,Sunday,Monday,Tuesday,Wednesday,Thursday, orFriday.
      • Time of day: if you select a day of the week, then you can also choose a time of day. Select a one hour interval in your local time zone.

gcloud

To configure a maintenance window and maintenance timing on a Cloud SQL instance, run the following command:

gcloudsqlinstancespatchINSTANCE_ID\--maintenance-window-day=DAY\--maintenance-window-hour=HOUR\--maintenance-release-channel=MAINTENANCE_TIMING

Replace the following variables:

  • INSTANCE_ID: the instance ID, which can be a read replica instance.
  • DAY: the day of the week when you want maintenance to occur. Set toMONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY, orSUNDAY. Specify in the UTC time zone.
  • HOUR: the hour of day,0 -23, for the maintenance window. Specify in the UTC time zone.
  • MAINTENANCE_TIMING: the week of the maintenance rollout period that you want the maintenance update to be applied. Options include:
    • preview: This translates toWeek 1 after the maintenance notification is sent out. The maintenance update is scheduled between 7 to 14 days after the notification.
    • production: This translates toWeek 2 after the maintenance notification is sent out. The maintenance update is scheduled between 15 to 21 days after the notification.
    • week5: The maintenance update is scheduled 35 to 42 days after the maintenance notification is sent out.

For reference information, seegcloud sql instances patch.

REST v1

Before using any of the request data, make the following replacements:

  • PROJECT_ID: the ID or project number of the Google Cloud project.
  • INSTANCE_ID: the instance ID, which can't be a read replica instance.
  • HOUR: the hour of day,0 -23, for the maintenance window. Specify in the UTC time zone.
  • DAY: the day of the week for the maintenance update to occur. SpecifyMONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY, orSUNDAY. Specify in the UTC time zone.
  • MAINTENANCE_TIMING: the week of the maintenance rollout period that you want the maintenance update to be applied. Options include:
    • canary: This translates toWeek 1 after the maintenance notification is sent out. The maintenance update is scheduled between 7 to 14 days after the notification.
    • stable: This translates toWeek 2 after the maintenance notification is sent out. The maintenance update is scheduled between 15 to 21 days after the notification.
    • week5: The maintenance update is scheduled 35 to 42 days after the maintenance notification is sent out.

HTTP method and URL:

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

Request JSON body:

{  "settings": {    "maintenanceWindow": {        "hour": "HOUR",        "day": "DAY",        "updateTrack": "MAINTENANCE_TIMING"    }  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "kind": "sql#operation",  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",  "status": "PENDING",  "user": "user@example.com",  "insertTime": "2024-04-01T21:30:35.667Z",  "operationType": "UPDATE",  "name": "OPERATION_ID",  "targetId": "INSTANCE_ID",  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",  "targetProject": "PROJECT_ID"}

REST v1beta4

Before using any of the request data, make the following replacements:

  • PROJECT_ID: the ID or project number of the Google Cloud project.
  • INSTANCE_ID: the instance ID, which can't be a read replica instance.
  • HOUR: the hour of day,0 -23, for the maintenance window. Specify in the UTC time zone.
  • DAY: the day of the week when you want the maintenance update to occur. SpecifyMONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY, orSUNDAY. Specify in the UTC time zone.
  • MAINTENANCE_TIMING: the week of the maintenance rollout period that you want the maintenance update to be applied. Options include:
    • canary: This translates toWeek 1 after the maintenance notification is sent out. The maintenance update is scheduled between 7 to 14 days after the notification.
    • stable: This translates toWeek 2 after the maintenance notification is sent out. The maintenance update is scheduled between 15 to 21 days after the notification.
    • week5: The maintenance update is scheduled 35 to 42 days after the maintenance notification is sent out.

HTTP method and URL:

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

Request JSON body:

{  "settings": {    "maintenanceWindow": {        "hour": "HOUR",        "day": "DAY",        "updateTrack": "MAINTENANCE_TIMING"    }  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "kind": "sql#operation",  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",  "status": "PENDING",  "user": "user@example.com",  "insertTime": "2024-04-01T21:30:35.667Z",  "operationType": "UPDATE",  "name": "OPERATION_ID",  "targetId": "INSTANCE_ID",  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",  "targetProject": "PROJECT_ID"}

Opt in to maintenance notifications

Before you opt-in to receive maintenance notifications, you mustset a maintenance window on an instance

  1. Go to theCommunication page.Go to Communication
  2. In the row forCloud SQL,Maintenance window, select the radiobutton underEmail to turn itON.

Each user that needs to receive notifications must opt in separately.

Find maintenance notifications in the Google Cloud console

You can view maintenance notifications in a few places in the Google Cloud console:

  • On theLogs explorer page in the Google Cloud console.Use theAll logs name drop-down to search formaintenance-events, thenclickApply. If maintenance is scheduled for an instance, then thelog shows the name of the instance and its scheduled maintenance start time.

  • When an instance is scheduled for maintenance, the date for maintenance islisted on theInstances page in theMaintenance column. TheMaintenance column is usually hidden, but it displays automatically whenmaintenance is scheduled. You can also selectMaintenance from theColumn display options(Column display options icon is three lines)if you want theMaintenance column to always show up.

  • Alternatively, you can select an instance to goto theInstance details page. If the instance is scheduled formaintenance, you will see a message in theMaintenance pane.
    Go to Cloud SQL instances

Find scheduled maintenance using the API

gcloud

To check for upcoming scheduled maintenance, use the following command:

gcloudsqlinstancesdescribeINSTANCE_ID

Replace the following variable:

  • INSTANCE_ID: The instance to check for scheduled maintenance.

In the response, look for thescheduledMaintenance section.

REST v1

Before using any of the request data, make the following replacements:

  • PROJECT_ID: the ID orproject number of the Google Cloud project that contains the instance
  • INSTANCE_NAME: the name of the instance that you're configuring for high availability

HTTP method and URL:

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

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Execute the following command:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

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

In the response, look for thescheduledMaintenance section.

REST v1beta4

Before using any of the request data, make the following replacements:

  • PROJECT_ID: the ID orproject number of the Google Cloud project that contains the instance
  • INSTANCE_NAME: the name of the instance that you're configuring for high availability

HTTP method and URL:

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

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Execute the following command:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

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

In the response, look for thescheduledMaintenance section.

Reschedule planned maintenance

You can reschedule maintenance by using the Google Cloud console,thegcloud CLI, or theCloud SQL Admin API.

If you set the maintenance timing of your instance to Week 1 orWeek 2, then you can reschedule maintenance by up to 28 days.

If you set the maintenance timing of your instance to Week 5,then you can reschedule maintenance by up to 7 days. You mustreschedule maintenance within this time period to ensure thatthe instance receives the maintenance update before the nextquarterly maintenance rollout begins.

Console

  1. In the Google Cloud console, go to theCloud SQL Instances page.

    Go to Cloud SQL Instances

  2. Filter for the termMaintenance to list all instances scheduled for maintenance.
  3. In theMaintenance column, clickReschedule.
  4. In theReschedule dialog, choose whether to apply maintenance immediately, reschedule it to happen at a specific time within the allowed deferral period as defined inrescheduled planned maintenance, or defer to the next available maintenance window.

gcloud

To reschedule maintenance on a Cloud SQL instance, run the following command:

gcloudsqlreschedule-maintenanceINSTANCE_ID\--reschedule-type=RESCHEDULE_TYPE\[--schedule-time=RESCHEDULE_TIME]

Replace the following variables:

  • INSTANCE_ID: The instance to reschedule.
  • RESCHEDULE_TYPE: Use one ofIMMEDIATE,NEXT_AVAILABLE_WINDOW, orSPECIFIC_TIME.

    If you chooseNEXT_AVAILABLE_WINDOW, maintenance is rescheduled to the next available maintenance window following the current scheduled time.

  • RESCHEDULE_TIME: If you specifySPECIFIC_TIME forRESCHEDULE_TYPE, then you also need to set the--schedule-time flag to specify the new day and time for maintenance to occur. Uses ISO 8601 format. For example, 2020-01-16T16:56:00.000Z

For reference information, seegcloud sql reschedule-maintenance.

If you want to reschedule maintenance for up to 28 days, then check the version number ofgcloud. If the version number is below390.0.0_RC00, then reinstallgcloud.

REST v1

Before using any of the request data, make the following replacements:

  • PROJECT_ID: The project ID
  • INSTANCE_ID: The instance ID
  • RESCHEDULE_TYPE: Use one ofIMMEDIATE,NEXT_AVAILABLE_WINDOW, orSPECIFIC_TIME.

    If you chooseNEXT_AVAILABLE_WINDOW, then maintenance is rescheduled to the next available maintenance window.

HTTP method and URL:

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

Request JSON body:

{  "reschedule": {    "reschedule_type": "RESCHEDULE_TYPE"  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rescheduleMaintenance"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/rescheduleMaintenance" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "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": RESCHEDULE_MAINTENANCE,  "name": "OPERATION_ID",  "targetId": "INSTANCE_ID",  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",  "targetProject": "PROJECT_ID"}

REST v1beta4

Before using any of the request data, make the following replacements:

  • PROJECT_ID: The project ID
  • INSTANCE_ID: The instance ID
  • RESCHEDULE_TYPE: Use one ofIMMEDIATE,NEXT_AVAILABLE_WINDOW, orSPECIFIC_TIME.

    If you chooseNEXT_AVAILABLE_WINDOW, then maintenance is rescheduled to the next available maintenance window.

HTTP method and URL:

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

Request JSON body:

{  "reschedule": {    "reschedule_type": "RESCHEDULE_TYPE"  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rescheduleMaintenance"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/rescheduleMaintenance" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "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": RESCHEDULE_MAINTENANCE,  "name": "OPERATION_ID",  "targetId": "INSTANCE_ID",  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",  "targetProject": "PROJECT_ID"}

To see how theunderlying REST API requestis constructed for this task, see theAPIs Explorer on the instances:post page.

Note: If you reschedule maintenance for an instance atthe same time as an existing deny maintenance period, then the deny maintenanceperiod takes precedence and the maintenance event is skipped.

Configure a deny maintenance period

You can configure a maximum of one deny maintenance period on a Cloud SQLinstance at any given time. The deny maintenance period takes precedence overany scheduled maintenance window. If there's a conflict between the timing of amaintenance window and the deny maintenance period, the deny maintenance periodoverrides the maintenance window.

Caution: Starting on August 15, 2025, you can't set a deny maintenance period foran instance if its maintenance version is older than 12 months. Any instancethat uses a maintenance version older than 12 months must receive an update.To update the instance,perform self-service maintenanceor wait for the automatic update during thenext maintenance window.After you update the instance, then you can set a deny maintenance period.

You can manually remove a deny maintenance period, whether it has alreadyoccurred or not.

To configure a deny maintenance period, set its start date, end date, and thetime of day the interval begins and ends. A deny maintenance period can spanfrom one to 90 days.

For start date and end date, there are two formats:

  • yyyy-mm-dd: indicates a specific date
  • mm-dd: indicates a date recurring every year

The start date and end date are UTC. To set the timezone, use the time field toadjust the start time. For example, the start date = 2020-10-10 and the time = 07:00:00indicate the start time 2020-10-10 07:00:00 UTC (2020-10-10 00:00:00 PST)

For time, the format is:HH:mm:SS.

  • Hours are between 0 and 23 (inclusive).
  • Minutes and seconds are between 0 and 59 (inclusive).

Console

  1. In the Google Cloud console, go to theCloud SQL Instances page.

    Go to Cloud SQL Instances

  2. To open theOverview page of an instance, click the instance name.
  3. In theMaintenance section, clickEdit maintenance preferences.
  4. In theDeny maintenance period section, set the start and end dates.
  5. In theAdvanced options section, optionally selectRepeat every year.
  6. ClickSave.

gcloud

To configure a deny maintenance period on a Cloud SQL instance, run the following command:

gcloudsqlinstancespatchINSTANCE_ID\--deny-maintenance-period-start-date=START_DATE\--deny-maintenance-period-end-date=END_DATE\--deny-maintenance-period-time=TIME

Replace the following variables:

  • INSTANCE_ID: Cloud SQL instance ID
  • START_DATE: date when the interval begins. For example, 2021-11-29
  • END_DATE: date when the interval ends. For example, 2021-12-02
  • TIME: time of day for interval to start and end. For example, 00:00:00

REST v1

Before using any of the request data, make the following replacements:

  • project-id: The project ID
  • instance-id: The instance ID
  • start-date: The start date (yyyy-mm-dd) or (mm-dd) for annual recurrence
  • end-date: The end date (yyyy-mm-dd) or (mm-dd) for annual recurrence
  • time: The start and end time (HH:mm:SS)

HTTP method and URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Request JSON body:

{  "settings":  {    "denyMaintenancePeriods": [{      "start_date": "start-date",      "end_date": "end-date"      "time": "time"    }]  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "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": MAINTENANCE_DENY_PERIOD,  "name": "operation-id",  "targetId": "instance-id",  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",  "targetProject": "project-id"}

REST v1beta4

Before using any of the request data, make the following replacements:

  • project-id: The project ID
  • instance-id: The instance ID
  • start-date: The start date (yyyy-mm-dd) or (mm-dd) for annual recurrence
  • end-date: The end date (yyyy-mm-dd) or (mm-dd) for annual recurrence
  • time: The start and end time (HH:mm:SS)

HTTP method and URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Request JSON body:

{  "settings":  {    "denyMaintenancePeriods": [{      "start_date": "start-date",      "end_date": "end-date"      "time": "time"    }]  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "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": MAINTENANCE_DENY_PERIOD,  "name": "operation-id",  "targetId": "instance-id",  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",  "targetProject": "project-id"}

Remove a deny maintenance period

Console

  1. In the Google Cloud console, go to theCloud SQL Instances page.

    Go to Cloud SQL Instances

  2. To open theOverview page of an instance, click the instance name.
  3. In theMaintenance section, clickEdit maintenance preferences.
  4. In theDeny maintenance period section, clickClear.
  5. ClickSave.

gcloud

To remove a deny maintenance period from a Cloud SQL instance, run the following command:

gcloudsqlinstancespatchINSTANCE_ID\--remove-deny-maintenance-period

Replace the following variables:

  • INSTANCE_ID: Cloud SQL instance ID

REST v1

Before using any of the request data, make the following replacements:

  • project-id: The project ID
  • instance-id: The instance ID

HTTP method and URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Request JSON body:

{  "settings":  {    "denyMaintenancePeriods": []  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "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": MAINTENANCE_DENY_PERIOD,  "name": "operation-id",  "targetId": "instance-id",  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",  "targetProject": "project-id"}

REST v1beta4

Before using any of the request data, make the following replacements:

  • project-id: The project ID
  • instance-id: The instance ID

HTTP method and URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Request JSON body:

{  "settings":  {    "denyMaintenancePeriods": []  }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{  "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": MAINTENANCE_DENY_PERIOD,  "name": "operation-id",  "targetId": "instance-id",  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",  "targetProject": "project-id"}

Deny maintenance period notifications

Maintenance window notifications aren't sent when the planned maintenance timefalls within the deny maintenance period and are forbidden by maintenancedeny period settings.

If you change the deny maintenance period settings to prevent maintenance at apreviously scheduled time, then the Cloud SQL instance skips maintenance andsends a notification about canceling the maintenance. Cloud SQL sendsthis cancellation notice whenever the instance is scheduled for an update.

Notifications of planned maintenance are sent during the deny maintenanceperiod, as long as such maintenance is scheduled to occur outside of thatperiod.

What's next

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-12-15 UTC.