This page describes how to create a Cloud SQL for MySQL instance.
For detailed information about all instance settings, see Instance settings .
A newly-created instance has four system databases:
-
information_schema
: Provides access to database metadata, information about the MySQL server. -
mysql
: The system schema. It contains tables that store information required by the MySQL server as it runs. -
performance_schema
: A feature for monitoring MySQL Server execution at a low level. -
sys
: Contains a set of objects that helps DBAs and developers interpret data collected by the performance schema.
The maximum number of instances you can have in a single project depends on the network architecture of those instances:
- New SQL network architecture: You can have up to 1000 instances per project.
- Old SQL network architecture: You can have up to 100 instances per project.
- Using both architectures: Your limit will be somewhere between 100 and 1000, depending on the distribution of your instances across the two architectures.
File a support case to request an increase. Read replicas are counted as instances.
Before you begin
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project .
-
Install the gcloud CLI .
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity .
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project .
-
Install the gcloud CLI .
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity .
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Make sure you have the Cloud SQL Admin and Compute Viewer roles on
your user account.
Learn more about roles and permissions.
Create a MySQL instance
Console
-
In the Google Cloud console, go to the Cloud SQL Instances page.
- Click Create instance .
- On the Choose your database engine panel of the Create an instance page, click Choose MySQL .
-
In the Choose a Cloud SQL edition section of the Create a SQL Server instance page, select the Cloud SQL edition for your instance:
Enterprise
orEnterprise Plus
.For more information about Cloud SQL editions, see Introduction to Cloud SQL editions .
- Select the edition preset for your instance. To see the available presets, click the Edition preset menu.
- In the Instance info
section, select the database version for your
instance. To see the available versions, click the Database version
menu.
Optional: Select Show minor versions . Then choose a minor version other than the default minor version.
The database version can't be edited after the instance has been created.
- In the Instance ID
field of the Instance info
pane, enter
an ID for your instance.
You do not need to include the project ID in the instance name. This is done automatically where appropriate (for example, in the log files).
- Set a password for the root
user.
Although there's an option to set No password , this isn't recommended for security reasons.
- Optional: Configure a password policy for the instance as follows:
- Select the Enable password policies checkbox.
- Click the Set password policy
button, set one or more of
the following options, and click Save
.
- Minimum length : Specifies the minimum number of characters that the password must have.
- Password complexity : Checks if the password is a combination of lowercase, uppercase, numeric, and non-alphanumeric characters.
- Restrict password reuse
: Specifies the number of previous
passwords that you can't reuse.
Supported only on Cloud SQL for MySQL 8.0 and later.
- Disallow username : Prevents the use of the username in the password.
- In the Choose region and zonal availability
section, select the
region and zone for your instance. Region availability might be different
based on your Cloud SQL for MySQL edition. For more information, see About instance settings
.
Place your instance in the same region as the resources that access it. The region you select can't be modified in the future. In most cases, you don't need to specify a zone.
If you are configuring your instance for high availability , you can select both a primary and secondary zone.
The following conditions apply when the secondary zone is used during instance creation:
- The zones default to
Any
for the primary zone andAny (different from primary)
for the secondary zone. - If both the primary and secondary zones are specified, they must be distinct zones.
- The zones default to
- In the Customize your instance
section, update settings for your
instance.
Begin by clicking SHOW CONFIGURATION OPTIONS
to display the groups
of settings. Then, expand the groups you want to review and customize settings.
A Summary
of all the options you select is shown on the right.
Customizing these instance settings is optional. Defaults are assigned in
every case where no customizations are made.
The following table is a quick reference to instance settings. For more details about each setting, see the instance settings page.
SettingNotesMachine typeMachine typeSelect from Shared core or Dedicated core. For Shared core, each machine type is classified by the number of CPUs (cores) and amount of memory for your instance.CoresMemoryCustomFor the Dedicated core machine type, instead of selecting a predefined configuration, select the Custom button to create an instance with a custom configuration. When you select this option, you need to select the number of cores and amount of memory for your instance. Learn more .StorageStorage typeStorage capacityEnable automatic storage increasesDetermines whether Cloud SQL automatically provides more storage for your instance when free space runs low. Learn more .EncryptionGoogle-managed encryptionThe default option.Customer key-managed encryption key (CMEK)ConnectionsPrivate IPAdds a private IP address for your instance. To enable connecting to the instance, additional configuration is required.
Optionally, you can specify an allocated IP range for your instances to use for connections.- Expand Show allocated IP range option .
- Select an IP range from the drop-down menu.
Your instance can have both a public and a private IP address.
- Learn more about using private IP .
- Learn more about allocated IP address ranges .
Public IPAdds a public IP address for your instance. You can then add authorized networks to connect to the instance.Your instance can have both a public and a private IP address.
Learn more about using public IP .
Authorized networksAdd the name for the new network and the Network address. Learn more .
Private path for Google Cloud servicesBy selecting this check box, you allow other Google Cloud services, such as BigQuery, to access data in Cloud SQL and make queries against this data over a private connection.
Enable Managed Connection PoolingBy selecting this checkbox, you enable Managed Connection Pooling for your instance. Managed Connection Pooling lets you scale your workloads by optimizing resource utilization and connection latency Cloud SQL instances using pooling and multiplexing. For more information about Managed Connection Pooling, see Managed Connection Pooling overview .
SecurityServer certificate authority modeChoose the type of certificate authority (CA) that signs the server certificate for this Cloud SQL instance. Learn more .
By default, when you create an instance in Google Cloud console, the instance uses the Google managed internal certificate authority (
GOOGLE_MANAGED_INTERNAL_CA
), which is the per-instance CA option.Data protectionAutomate backupsChoose where to store your backupsSelect Multi-region for most use cases. If you need to store backups in a specific region, for example, if there are regulatory reasons to do so, select Region and select your region from the Location drop-down menu.Choose how many automated backups to storeEnable point-in-time recoveryEnable deletion protectionEnable retained backups after instance deletionDetermines whether automated and on-demand backups are retained after an instance is deleted. Learn more .Choose how many days of logs to retainMaintenancePreferred windowDetermines a one-hour window when Cloud SQL can perform disruptive maintenance on your instance. If you do not set the window, then disruptive maintenance can be done at any time. Learn more .Order of updatesYour preferred timing for instance updates, relative to other instances in the same project. Learn more .FlagsADD FLAGLabelsADD LABELAdd a key and value for each label that you add. You use labels to help organize your instances.Data cacheEnable data cache (optional)Enables data cache for Cloud SQL for MySQL Enterprise Plus edition instances. For more information about data cache, see data cache . - Click Create Instance
.
Note: It might take a few minutes to create your instance. However, you can view information about the instance while it's being created.
To see the password in clear text, click the Show password icon.
You can either enter the password manually or click Generate to have Cloud SQL create a password for you automatically.
gcloud
For information about installing and getting started with the gcloud CLI , see Installing gcloud CLI . For information about starting Cloud Shell, see the Cloud Shell documentation .
- Use the
gcloud sql instances create
command to create the instance: - vCPUs must be either 1 or an even number between 2 and 96.
- Memory must be:
- 0.9 to 6.5 GB per vCPU
- A multiple of 256 MB
- At least 3.75 GB (3840 MB)
- The zones must be valid zones.
- If the secondary zone is specified, the primary must also be specified.
- If the primary and secondary zones are specified, they must be distinct zones.
- If the primary and secondary zones are specified, they must belong to the same region.
- You use the
--no-assign-ip
parameter. - You use the
--network
parameter to specify the name of the VPC network that you want to use to create a private connection. -
GOOGLE_MANAGED_INTERNAL_CA
: this is the default value. With this option, an internal CA dedicated to each Cloud SQL instance signs the server certificate for that instance. -
GOOGLE_MANAGED_CAS_CA
: with this option, a CA hierarchy consisting of a root CA and subordinate server CAs managed by Cloud SQL and hosted on Google Cloud Certificate Authority Service (CA Service) is used. The subordinate server CAs in a region sign the server certificates and are shared across instances in the region. This option is supported only on MySQL 8.0.30 and later. -
CUSTOMER_MANAGED_CAS_CA
: with this option, you define the CA hierarchy and manage the rotation of the CA certificates. You create a CA pool in CA Service in the same region of your instance. One of the CAs in the pool is used to sign the server certificate. This option is supported only on MySQL 8.0.30 and later. For more information, see Use a customer-managed CA . - The zones must be valid zones.
- If the secondary zone is specified, the primary must also be specified.
- Note the automatically assigned IP address.
If you are not using the Cloud SQL Auth Proxy, you will use this address as the host address that your applications or tools use to connect to the instance.
- Set the password for the "root@%" MySQL user:
gcloud sql users set-password root \ --host = % \ --instance INSTANCE_NAME \ --password PASSWORD
For Cloud SQL Enterprise Plus edition instances:
gcloud sql instances create INSTANCE_NAME \ --region = REGION \ --tier = TIER \ --database-version = DATABASE_VERSION \ --edition = ENTERPRISE_PLUS
For Cloud SQL Enterprise edition instances:
gcloud sql instances create INSTANCE_NAME \ --cpu = NUMBER_CPUS \ --memory = MEMORY_SIZE \ --region = REGION
--tier
flag if you choose db-f1-micro
or db-g1-small
as the machine type: gcloud sql instances create INSTANCE_NAME \ --tier = API_TIER_STRING \ --region = REGION
There are restrictions on the values for vCPUs and memory size:
For example, the following command creates a Cloud SQL Enterprise edition instance with two vCPUs and 7,680 MB of memory:
gcloud sql instances create myinstance \ --database-version = MYSQL_8_0 \ --cpu = 2 \ --memory = 7680MB \ --region = us-central1
The following command creates a Cloud SQL Enterprise Plus edition instance with four cores:
gcloud sql instances create myinstance \ --database-version = MYSQL_8_0_31 \ --tier = db-perf-optimized-N-4 \ --edition = ENTERPRISE_PLUS \ --region = us-central1
The default value for REGION
is us-central1
.
Don't include sensitive or personally identifiable information in your instance name; it is externally visible.You do not need to include the project ID in the instance name. This is done automatically where appropriate (for example, in the log files).
If you are creating an instance for high availability
, you
can specify both the primary and secondary zones, using the --zone
and --secondary-zone
parameters. The following conditions
apply when the secondary zone is used during instance creation or edit:
You can add more parameters to determine other instance settings:
--database-version
--enable-password-policy
--clear-password-policy
parameter, the other password policy parameters are reset.
--password-policy-min-length
--password-policy-complexity
COMPLEXITY_DEFAULT
.--password-policy-reuse-interval
--password-policy-disallow-username-substring
--no-password-policy-disallow-username-substring
parameter to disable the check.--network
--no-assign-ip
(optional)
--allocated-ip-range-name
(optional)
--enable-google-private-path
(optional)
--network
: Specifies the name of the VPC network you want
to use for this instance. Private services access must already be
configured for the network. Available only for the beta command
( gcloud beta sql instances create
). --no-assign-ip
: Instance will only have a private IP
address.
--allocated-ip-range-name
: If specified, sets a range name
for which an IP range is allocated. For
example, google-managed-services-default
. The range name
should comply with RFC-1035
and be within 1-63 characters.
( gcloud alpha sql instances create
).
--enable-google-private-path
: If you use this parameter,
then you allow other Google Cloud services, such as
BigQuery, to access data in Cloud SQL and make queries
against this data over a private connection.
This parameter is valid only if:
--authorized-networks
--ssl-mode
--require-ssl
The ssl-mode
parameter enforces the SSL/TLS enforcement
for the connections. For more information, see Settings for
Cloud SQL for MySQL
.
The require-ssl
parameter determines whether SSL
connections over IP are enforced
or not. require-ssl
is a legacy parameter.
Use ssl-mode
instead.
For more information, see IpConfiguration
.
--server-ca-mode
The --server-ca-mode
flag configures the type of server certificate
authority (CA)
for an instance. You can select one of the following
options:
--tier
db-f1-micro
or db-g1-small
).
For a custom instance configuration, use the --cpu
or --memory
parameters instead. See Custom instance configuration
.--storage-size
--storage-auto-increase
--storage-auto-increase-limit
gcloud beta sql instances create
). Learn more
.--enable-data-cache
--availability-type
--secondary-zone
--zone
and --secondary-zone parameters
. The
following restrictions apply when the secondary zone is used during
instance creation or edit: If the primary and secondary zones are specified, they must be distinct zones.
If the primary and secondary zones are specified, they must belong to the same region.
--backup-start-time
--retained-backups-count
--enable-bin-log
--retained-transaction-log-days
--enable-point-in-time-recovery
--database-flags
--maintenance-window-day
,--maintenance-window-hour
--maintenance-release-channel
preview
for earlier
updates, and production
for later updates. Learn more
.--custom-subject-alternative-names= DNS_NAMES
If you want to use a custom DNS name to connect to a Cloud SQL instance instead of using an IP address, then configure the custom subject alternative name (SAN) setting while creating the instance. The custom DNS name that you insert into the custom SAN setting is added to the SAN field of the server certificate of the instance. This lets you use the custom DNS name with hostname validation securely.
Before you can use the custom DNS name in your clients and applications, you must set up the mapping between the DNS name and the IP address. This is known as DNS resolution . You can add a comma-separated list of up to three custom DNS names to the custom SAN setting.
Terraform
To create an instance, use a Terraform resource .
Apply the changes
To apply your Terraform configuration in a Google Cloud project, complete the steps in the following sections.
Prepare Cloud Shell
- Launch Cloud Shell .
-
Set the default Google Cloud project where you want to apply your Terraform configurations.
You only need to run this command once per project, and you can run it in any directory.
export GOOGLE_CLOUD_PROJECT= PROJECT_ID
Environment variables are overridden if you set explicit values in the Terraform configuration file.
Prepare the directory
Each Terraform configuration file must have its own directory (also called a root module ).
- In Cloud Shell
, create a directory and a new
file within that directory. The filename must have the
.tf
extension—for examplemain.tf
. In this tutorial, the file is referred to asmain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
If you are following a tutorial, you can copy the sample code in each section or step.
Copy the sample code into the newly created
main.tf
.Optionally, copy the code from GitHub. This is recommended when the Terraform snippet is part of an end-to-end solution.
- Review and modify the sample parameters to apply to your environment.
- Save your changes.
- Initialize Terraform. You only need to do this once per directory.
terraform init
Optionally, to use the latest Google provider version, include the
-upgrade
option:terraform init -upgrade
Apply the changes
- Review the configuration and verify that the resources that Terraform is going to create or
update match your expectations:
terraform plan
Make corrections to the configuration as necessary.
- Apply the Terraform configuration by running the following command and entering
yes
at the prompt:terraform apply
Wait until Terraform displays the "Apply complete!" message.
- Open your Google Cloud project to view the results. In the Google Cloud console, navigate to your resources in the UI to make sure that Terraform has created or updated them.
Delete the changes
To delete your changes, do the following:
- To disable deletion protection, in your Terraform configuration file set the
deletion_protection
argument tofalse
.deletion_protection = "false"
- Apply the updated Terraform configuration by running the following command and
entering
yes
at the prompt:terraform apply
-
Remove resources previously applied with your Terraform configuration by running the following command and entering
yes
at the prompt:terraform destroy
REST v1
Create the instance
This example creates an instance. Some optional parameters, such as backups and binary logging are also included. For a complete list of parameters for this call, see the Instances:insert page. For information about instance settings, including valid values for region, see Instance settings .
Don't include sensitive or personally identifiable information in your instance ID; it is externally visible.You do not need to include the project ID in the instance name. This is done automatically where appropriate (for example, in the log files).
Before using any of the request data, make the following replacements:
- PROJECT_ID : your project ID
- INSTANCE_ID : your instance ID
- DATABASE_VERSION
: the database version.
For example:
MYSQL_8_4
orMYSQL_8_0_37
. If you don't specify a database version, the default database version isMYSQL_8_0
. - REGION : the region
- MACHINE_TYPE : your machine type
- EDITION_TYPE : your Cloud SQL edition
- DATA_CACHE_ENABLED
: (optional) set to
true
to enable data cache for your instance - PRIVATE_NETWORK : specify the name of the Virtual Private Cloud (VPC) network that you want to use for this instance. Private services access must already be configured for the network.
- AUTHORIZED_NETWORKS : For public IP connections, specify the connections from authorized networks that can connect to your instance.
- CA_MODE
: specify a certificate authority hierarchy
for the instance, either
GOOGLE_MANAGED_INTERNAL_CA
orGOOGLE_MANAGED_CAS_CA
. If you don't specifyserverCaMode
, then the default configuration isGOOGLE_MANAGED_INTERNAL_CA
. This feature is in Preview . - DNS_NAMES
: add a comma-separated list of up to three DNS names to the server certificate
of your Cloud SQL instance. You can secure multiple DNS names with a single certificate. This feature is available in Preview
and for
CUSTOMER_MANAGED_CAS_CA
instances only.
To set a password policy while creating an instance, include the passwordValidationPolicy object in the request. Set the following parameters, as required:
-
enablePasswordPolicy
: Enables the password policy when set totrue
.To remove the password policy, you can use a
PATCH
request withnull
as the value forenablePasswordPolicy
. In this case, the other password policy parameters are reset. -
minLength
: Specifies the minimum number of characters that the password must have. -
complexity
: Checks if the password is a combination of lowercase, uppercase, numeric, and non-alphanumeric characters. The default value isCOMPLEXITY_DEFAULT
. -
reuseInterval
: Specifies the number of previous passwords that you can't reuse.Supported only on Cloud SQL for MySQL 8.0 and later.
-
disallowUsernameSubstring
: Prevents the use of the username in the password when set totrue
.
HTTP method and URL:
POST https://sqladmin.googleapis.com/v1/projects/ PROJECT_ID /instances
Request JSON body:
{ "name": " INSTANCE_ID ", "region": " REGION ", "databaseVersion": " DATABASE_VERSION ", "settings": { "tier": " MACHINE_TYPE ", "edition": " EDITION_TYPE ", "dataCacheConfig": { "dataCacheEnabled": DATA_CACHE_ENABLED }, "backupConfiguration": { "binaryLogEnabled": true, "enabled": true }, "passwordValidationPolicy": { "enablePasswordPolicy": true "minLength": " MIN_LENGTH ", "complexity": COMPLEXITY_DEFAULT, "reuseInterval": " REUSE_INTERVAL ", "disallowUsernameSubstring": " DISALLOW_USERNAME_SUBSTRING ", } "ipConfiguration": { "privateNetwork": " PRIVATE_NETWORK ", "authorizedNetworks": [ AUTHORIZED_NETWORKS ], "ipv4Enabled": false, "enablePrivatePathForGoogleCloudServices": true, "serverCaMode": " CA_MODE ", "customSubjectAlternativeNames": " DNS_NAMES " } } }
To send your request, expand one of these options:
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": "2019-09-25T22:19:33.735Z", "operationType": "CREATE", "name": " OPERATION_ID ", "targetId": " INSTANCE_ID ", "selfLink": "https://sqladmin.googleapis.com/v1/projects/ PROJECT_ID /operations/ OPERATION_ID ", "targetProject": " PROJECT_ID " }
The response is a long-running operation , which might take a few minutes to complete.
Update the root password
When the instance finishes initializing, update the root password:
Before using any of the request data, make the following replacements:
- project-id : your project ID
- instance-id : instance ID created in prior step
- root-password : desired root password
HTTP method and URL:
PUT https://sqladmin.googleapis.com/v1/projects/ project-id /instances/ instance-id /users?host=%25&name=root
Request JSON body:
{ "name": "root", "host": "%", "password": " root-password " }
To send your request, expand one of these options:
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": "DONE", "user": "user@example.com", "insertTime": "2019-09-26T14:32:30.592Z", "startTime": "2019-09-26T14:32:30.594Z", "endTime": "2019-09-26T14:32:33.518Z", "operationType": "UPDATE_USER", "name": " operation-id ", "targetId": " instance-id ", "selfLink": "https://sqladmin.googleapis.com/v1/projects/ project-id /operations/ operation-id ", "targetProject": " project-id " }
Retrieve the IPv4 address
Retrieve the automatically assigned IPv4 address for the new instance:
Before using any of the request data, make the following replacements:
- project-id : your project ID
- instance-id : instance ID created in prior step
HTTP method and URL:
GET https://sqladmin.googleapis.com/v1/projects/ project-id /instances/ instance-id
To send your request, expand one of these options:
You should receive a JSON response similar to the following:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "MYSQL_8_0_18", "settings": { "authorizedGaeApplications": [], "tier": "db-f1-micro", "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "activationPolicy": "ALWAYS", "ipConfiguration": { "authorizedNetworks": [], "ipv4Enabled": true }, "locationPreference": { "zone": "us-west1-a", "kind": "sql#locationPreference" }, "dataDiskType": "PD_SSD", "backupConfiguration": { "startTime": "18:00", "kind": "sql#backupConfiguration", "enabled": true, "binaryLogEnabled": true }, "settingsVersion": "1", "storageAutoResizeLimit": "0", "storageAutoResize": true, "dataDiskSizeGb": "10" }, "etag": "--redacted--", "ipAddresses": [ { "type": "PRIMARY", "ipAddress": " 10.0.0.1 " } ], "serverCaCert": { ... }, "instanceType": "CLOUD_SQL_INSTANCE", "project": " project-id ", "serviceAccountEmailAddress": "redacted@gcp-sa-cloud-sql.iam.gserviceaccount.com", "backendType": "SECOND_GEN", "selfLink": "https://sqladmin.googleapis.com/v1/projects/ project-id /instances/ instance-id ", "connectionName": " project-id:region:instance-id ", "name": " instance-id ", "region": "us-west1", "gceZone": "us-west1-a" }
Look for the ipAddress
field in the response.
REST v1beta4
Create the instance
This example creates an instance. Some optional parameters, such as backups and binary logging are also included. For a complete list of parameters for this call, see the instances:insert page. For information about instance settings, including valid values for region, see Instance settings
Don't include sensitive or personally identifiable information in your instance ID; it is externally visible.You do not need to include the project ID in the instance name. This is done automatically where appropriate (for example, in the log files).
Before using any of the request data, make the following replacements:
- PROJECT_ID : your project ID
- INSTANCE_ID : your instance ID
- DATABASE_VERSION
: the database version.
For example:
MYSQL_8_4
orMYSQL_8_0_37
. If you don't specify a database version, then the default version isMYSQL_8_0
. - REGION : the region
- MACHINE_TYPE : your machine type
- EDITION_TYPE : your Cloud SQL edition .
- DATA_CACHE_ENABLED
: (optional) set to
true
to enable data cache for your instance - PRIVATE_NETWORK : specify the name of the Virtual Private Cloud (VPC) network that you want to use for this instance. Private services access must already be configured for the network.
- AUTHORIZED_NETWORKS : For public IP connections, specify the connections from authorized networks that can connect to your instance.
- CA_MODE
: specify a certificate authority hierarchy
for the instance, either
GOOGLE_MANAGED_INTERNAL_CA
orGOOGLE_MANAGED_CAS_CA
. If you don't specifyserverCaMode
, then the default configuration isGOOGLE_MANAGED_INTERNAL_CA
. This feature is in Preview . - DNS_NAMES
: add a comma-separated list of up to three DNS names to the server certificate
of your Cloud SQL instance. You can secure multiple DNS names with a single certificate. This feature is available in Preview
and for
CUSTOMER_MANAGED_CAS_CA
instances only.
To set a password policy while creating an instance, include the passwordValidationPolicy object in the request. Set the following parameters, as required:
-
enablePasswordPolicy
: Enables the password policy when set totrue
.To remove the password policy, you can use a
PATCH
request withnull
as the value forenablePasswordPolicy
. In this case, the other password policy parameters are reset. -
minLength
: Specifies the minimum number of characters that the password must have. -
complexity
: Checks if the password is a combination of lowercase, uppercase, numeric, and non-alphanumeric characters. The default value isCOMPLEXITY_DEFAULT
. -
reuseInterval
: Specifies the number of previous passwords that you can't reuse.Supported only on Cloud SQL for MySQL 8.0 and later.
-
disallowUsernameSubstring
: Prevents the use of the username in the password when set totrue
.
HTTP method and URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/ PROJECT_ID /instances
Request JSON body:
{ "name": " INSTANCE_ID ", "region": " REGION ", "databaseVersion": " DATABASE_VERSION ", "settings": { "tier": " MACHINE_TYPE ", "edition": " EDITION_TYPE ", "dataCacheConfig" { "dataCacheEnabled": DATA_CACHE_ENABLED }, "backupConfiguration": { "binaryLogEnabled": true, "enabled": true }, "passwordValidationPolicy": { "enablePasswordPolicy": true "minLength": " MIN_LENGTH ", "complexity": COMPLEXITY_DEFAULT, "reuseInterval": " REUSE_INTERVAL ", "disallowUsernameSubstring": " DISALLOW_USERNAME_SUBSTRING ", } "ipConfiguration": { "privateNetwork": " PRIVATE_NETWORK ", "authorizedNetworks": [ AUTHORIZED_NETWORKS ], "ipv4Enabled": false, "enablePrivatePathForGoogleCloudServices": true, "serverCaMode": " CA_MODE ", "customSubjectAlternativeNames": " DNS_NAMES " } } }
To send your request, expand one of these options:
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": "2019-09-25T22:19:33.735Z", "operationType": "CREATE", "name": " OPERATION_ID ", "targetId": " INSTANCE_ID ", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/ PROJECT_ID /operations/ OPERATION_ID ", "targetProject": " PROJECT_ID " }
The response is a long-running operation , which might take a few minutes to complete.
Update the root password
When the instance finishes initializing, update the root password:
Before using any of the request data, make the following replacements:
- project-id : your project ID
- instance-id : instance ID created in prior step
- root-password : desired root password
HTTP method and URL:
PUT https://sqladmin.googleapis.com/sql/v1beta4/projects/ project-id /instances/ instance-id /users?host=%25&name=root
Request JSON body:
{ "name": "root", "host": "%", "password": " root-password " }
To send your request, expand one of these options:
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": "DONE", "user": "user@example.com", "insertTime": "2019-09-26T14:32:30.592Z", "startTime": "2019-09-26T14:32:30.594Z", "endTime": "2019-09-26T14:32:33.518Z", "operationType": "UPDATE_USER", "name": " operation-id ", "targetId": " instance-id ", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/ project-id /operations/ operation-id ", "targetProject": " project-id " }
The response is a long-running operation , which might take a few minutes to complete.
Retrieve the IPv4 address
Retrieve the automatically assigned IPv4 address for the new instance:
Before using any of the request data, make the following replacements:
- project-id : your project ID
- instance-id : instance ID created in prior step
HTTP method and URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/ project-id /instances/ instance-id
To send your request, expand one of these options:
You should receive a JSON response similar to the following:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "MYSQL_8_0_18", "settings": { "authorizedGaeApplications": [], "tier": "db-f1-micro", "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "activationPolicy": "ALWAYS", "ipConfiguration": { "authorizedNetworks": [], "ipv4Enabled": true }, "locationPreference": { "zone": "us-west1-a", "kind": "sql#locationPreference" }, "dataDiskType": "PD_SSD", "backupConfiguration": { "startTime": "18:00", "kind": "sql#backupConfiguration", "enabled": true, "binaryLogEnabled": true }, "settingsVersion": "1", "storageAutoResizeLimit": "0", "storageAutoResize": true, "dataDiskSizeGb": "10" }, "etag": "--redacted--", "ipAddresses": [ { "type": "PRIMARY", "ipAddress": " 10.0.0.1 " } ], "serverCaCert": { ... }, "instanceType": "CLOUD_SQL_INSTANCE", "project": " project-id ", "serviceAccountEmailAddress": "redacted@gcp-sa-cloud-sql.iam.gserviceaccount.com", "backendType": "SECOND_GEN", "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/ project-id /instances/ instance-id ", "connectionName": " project-id:region:instance-id ", "name": " instance-id ", "region": "us-west1", "gceZone": "us-west1-a" }
Look for the ipAddress
field in the response.
Generate the write endpoint
A write endpoint is a global domain name service (DNS) name that resolves to the IP address of the current primary instance automatically. This endpoint redirects incoming connections to the new primary instance automatically in case of a replica failover or switchover operation. You can use the write endpoint in a SQL connection string instead of an IP address. By using a write endpoint, you can avoid having to make application connection changes when a region outage occurs.
For more information about using a write endpoint to connect to an instance, see Connect to an instance using a write endpoint .
Specify the database minor version for MySQL 8.0
You can specify the minor version of an existing MySQL 8.0 instance by using gcloud
or the REST API.
gcloud
Use the gcloud sql instances create
command with the --database-version
flag.
Replace the following variables before running the command:
- INSTANCE_NAME : The name of the instance.
- DATABASE_VERSION
: The database minor version of the instance:
MYSQL_8_0_18
,MYSQL_8_0_26
,MYSQL_8_0_27
,MYSQL_8_0_28
,MYSQL_8_0_29
,MYSQL_8_0_30
,MYSQL_8_0_31
,MYSQL_8_0_32
,MYSQL_8_0_33
,MYSQL_8_0_34
,MYSQL_8_0_35
,MYSQL_8_0_36
,MYSQL_8_0_37
,MYSQL_8_0_39
,MYSQL_8_0_40
,MYSQL_8_0_41
(default minor version for MySQL 8.0), orMYSQL_8_0_42
. If you specifyMYSQL_8_0
, the default minor version is used.If you don't specify this flag, then the default major version,
MYSQL_8_0
, is used.
gcloud sql instances create INSTANCE_NAME \ --database-version = DATABASE_VERSION
For detailed information, see the documentation on creating an instance by using gcloud
.
REST v1
Use a POST request with the instances:insert
method and the databaseVersion
flag.
POST https://sqladmin.googleapis.com/v1/projects/ project-id /instances
- project_id : The ID of the project.
- instance_id : The name of the instance.
- databaseVersion
: The database version of the instance:
MYSQL_8_0_18
,MYSQL_8_0_26
,MYSQL_8_0_27
,MYSQL_8_0_28
,MYSQL_8_0_29
,MYSQL_8_0_30
,MYSQL_8_0_31
,MYSQL_8_0_32
,MYSQL_8_0_33
,MYSQL_8_0_34
,MYSQL_8_0_35
,MYSQL_8_0_36
,MYSQL_8_0_37
,MYSQL_8_0_39
,MYSQL_8_0_40
,MYSQL_8_0_41
(default minor version for MySQL 8.0), orMYSQL_8_0_42
. If you specifyMYSQL_8_0
, as the version, then the default minor version is used. If you don't specify thedatabaseVersion
flag, then the default major version,MYSQL_8_0
, is used.
For detailed information, see the documentation about creating an instance by using the REST v1 API .
REST v1beta4
Use a POST request with the instances:insert
method and the databaseVersion
flag.
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/ project-id /instances
Before using any of the request data, replace these variables:
- project_id : The ID of the project.
- instance_id : The name of the instance.
- databaseVersion
:
The database version of the instance:
MYSQL_8_0_18
,MYSQL_8_0_26
,MYSQL_8_0_27
,MYSQL_8_0_28
,MYSQL_8_0_29
,MYSQL_8_0_30
,MYSQL_8_0_31
,MYSQL_8_0_32
,MYSQL_8_0_33
.MYSQL_8_0_34
,MYSQL_8_0_35
,MYSQL_8_0_36
,MYSQL_8_0_37
,MYSQL_8_0_39
,MYSQL_8_0_40
,MYSQL_8_0_41
(default minor version for MySQL 8.0), orMYSQL_8_0_42
. If you specifyMYSQL_8_0
, then the default minor version is used. If you don't specify thedatabaseVersion
flag, then the default major version,MYSQL_8_0
, is used.
For detailed information, see the documentation about creating an instance by using the REST v1beta4 API .
Database minor version for read replicas, clones, and PITR
When creating a read replica , you can specify the database minor version of the read replica. By default, new read replicas are created on the default minor version.
When cloning an instance , the newly created instance has that same minor version as that of the source.
When performing a point-in-time recovery , the newly created instance has the same database minor version as that of the source.
Custom instance configurations
Determines memory and virtual cores available for your Cloud SQL instance. Machine types are part of a machine series, and machine series availability is determined by your Cloud SQL edition.
For Cloud SQL Enterprise Plus edition instances, Cloud SQL
offers predefined machine types for your instances in
the N2
and C4A
machine series.
For Cloud SQL Enterprise edition instances, Cloud SQL offers predefined and custom machine types.
If you require real-time processing, such as online transaction processing (OLTP), make sure that your instance has enough memory to contain the entire working set. However, there are other factors that can impact memory requirements, such as number of active connections, and internal overhead processes. Perform load testing to avoid performance issues in your production environment.
When you configure your instance, select sufficient memory and vCPUs to handle your needs, and scale up your instance as your requirements increase. A machine configuration with insufficient vCPUs might lose its SLA coverage. For more information, see Operational guidelines .
To learn more about the machine types and machine series available for your Cloud SQL instance, see Machine series overview .
Troubleshoot
Failed to create subnetwork. Couldn't
find free blocks in allocated IP ranges. Please allocate new ranges for
this service provider
.- The size of the allocated IP range for the private service connection is smaller than /24.
- The size of the allocated IP range for the private service connection is too small for the number of Cloud SQL instances.
- The requirement on the size of allocated IP range will be larger if instances are created in multiple regions. See allocated range size
To resolve this issue, you can either expand the existing allocated IP range or allocate an additional IP range to the private service connection. For more information, see Allocate an IP address range .
If you used the --allocated-ip-range-name
flag while creating
the Cloud SQL instance, you may only expand the specified IP range.
If you're allocating a new range, take care that the allocation doesn't overlap with any existing allocations.
After creating a new IP range, update the vpc peering with the following command:
gcloud services vpc-peerings update \ --service = servicenetworking.googleapis.com \ --ranges = OLD_RESERVED_RANGE_NAME , NEW_RESERVED_RANGE_NAME \ --network = VPC_NETWORK \ --project = PROJECT_ID \ --force
If you're expanding an existing allocation, take care to increase only the allocation range and not decrease it. For example, if the original allocation was 10.0.10.0/24, then make the new allocation at least 10.0.10.0/23.
In general, if starting from a /24 allocation, decrementing the /mask by 1 for each condition (additional instance type group, additional region) is a good rule of thumb. For example, if trying to create both instance type groups on the same allocation, going from /24 to /23 is enough.
After expanding an existing IP range, update the vpc peering with following command:
gcloud services vpc-peerings update \ --service = servicenetworking.googleapis.com \ --ranges = RESERVED_RANGE_NAME \ --network = VPC_NETWORK \ --project = PROJECT_ID
Failed to create subnetwork. Router status is
temporarily unavailable. Please try again later. Help Token: [token-ID]
.HTTPError 400: Invalid request: Incorrect Service Networking config for instance: PROJECT_ID
: INSTANCE_NAME
:SERVICE_NETWORKING_NOT_ENABLED.
Enable the Service Networking API using the following command and try to create the Cloud SQL instance again.
gcloud services enable servicenetworking.googleapis.com \ --project = PROJECT_ID
Failed to create subnetwork. Required
'compute.projects.get' permission for PROJECT_ID
.More than 3 subject alternative names are not
allowed.
Subject alternative names %s is too long. The
maximum length is 253 characters.
Subject alternative name %s is invalid.
Verify that the DNS names that you want to add to the server certificate of a Cloud SQL instance meet the following criteria:
- They don't have wildcard characters.
- They don't have trailing dots.
- They meet RFC 1034 specifications.