This page describes how to create a Cloud SQL for a MySQL instance.
For detailed information about all instance settings, see Instance Settings.
During instance creation, a single database is added to the instance. You can add additional databases by creating or importing them.
Before you begin
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud Console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Cloud project. Learn how to confirm that billing is enabled for your project.
- Install and initialize the Cloud SDK.
-
Make sure you have the Cloud SQL Admin and Compute Viewer roles on
your user account.
Learn more about roles and permissions.
Creating a MySQL instance
To create a MySQL instance:
Console
- Go to the Cloud SQL Instances page in the Google Cloud Console.
- Click Create instance.
- Select MySQL and click Next.
- Enter a name.
Do not 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).
- Enter the password for the
'root'@'%'
user. - Select the database version for your instance: MySQL 8.0, MySQL 5.7
(default), or MySQL 5.6.
The database version cannot be edited after the instance has been created.
- Under Choose region and zonal availability, select the region
and zone for your instance.
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
- Under Customize your instance, update settings for your instance.
Begin by clicking SHOW CONFIGURATION OPTIONS to display the groups
of settings. Then, expand desired groups to review and customize settings.
A Summary of all the options you select is shown on the right.
The following table is a quick reference to instance settings. For more details about each setting, see the instance settings page.
Setting Notes Machine type Machine type Select from Shared core, Lightweight, Standard (Most common), or High memory. Custom Select this button to create an instance with a flexible configuration. When you select this option, you need to select the number of cores and amount of memory for your instance. Learn more. Cores The number of vCPUs for your instance. Learn more. Memory The amount of memory for your instance, in GBs. Learn more. Storage Storage type Determines whether your instance uses SSD or HDD storage. Learn more. Storage capacity The amount of storage provisioned for the instance. Learn more. Enable automatic storage increases Determines whether Cloud SQL automatically provides more storage for your instance when free space runs low. Learn more. Encryption Google-managed encryption The default option. Customer key-managed encryption key (CMEK) Select to use your key with Google Cloud Key Management Service. Learn more. Connections Private IP Adds a private IP address for your instance. To enable connecting to the instance, additional configuration is required. Learn more. Public IP Adds a public IP address for your instance. You can then add authorized networks to connect to the instance. Learn more. Authorized networks Add the name for the new network and the Network address. Learn more. Backups Automate backups The window of time when you would like backups to start. Learn more. Choose where to store your backups Select 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 store The number of automated backups you would like to retain (from 1 to 365 days). Learn more. Enable point-in-time recovery Enables point-in-time recovery and write-ahead logging. Learn more. Choose how many days of logs to retain Configure write-ahead log retention from 1 to 7 days. The default setting is 7 days. Learn more. Maintenance Preferred window Determines 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 updates Your preferred timing for instance updates, relative to other instances in the same project. Learn more. Flags ADD FLAG You can use database flags to control settings and parameters for your instance. Learn more. Labels ADD LABEL Add a key and value for each label that you add. You use labels to help organize your instances. - Click Create.
gcloud
For information about installing and getting
started with the gcloud
command-line tool, see
Installing Cloud SDK. For information about starting
Cloud Shell, see the
Cloud Shell documentation.
- Create the instance:
gcloud sql instances create INSTANCE_NAME --cpu=NUMBER_CPUS --memory=MEMORY_SIZE --region=REGION
Or, alternatively, you can use the `--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:
- 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)
For example, the following string creates an 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 default value for REGION is
us-central
.Do not 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:- 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 can add more parameters to determine other instance settings:
Setting Parameter Notes Required parameters Database version --database-version
MYSQL_8_0
,MYSQL_5_7
(default) orMYSQL_5_6
.Region --region
See valid values. Connectivity Private IP --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
). Learn more.Public IP --authorized-networks
For public IP connections, only connections from authorized networks can connect to your instance. Learn more. Machine type and storage Machine type --tier
Used to specify a shared-core instance ( db-f1-micro
ordb-g1-small
). Used to specify a shared-core instance (db-f1-micro
ordb-g1-small
). For a flexible instance configuration, use the--cpu
or--memory
parameters instead. See Flexible instance configuration.Storage type --storage-type
Determines whether your instance uses SSD or HDD storage. Learn more. Storage capacity --storage-size
The amount of storage provisioned for the instance, in GB. Learn more. Automatic storage increase --storage-auto-increase
Determines whether Cloud SQL automatically provides more storage for your instance when free space runs low. Learn more. Automatic storage increase limit --storage-auto-increase-limit
Determines how large Cloud SQL can automatically grow storage. Available only for the beta command ( gcloud beta sql instances create
). Learn more.Automatic backups and high availability High availability --availability-type
For a highly-available instance, set to REGIONAL
. Learn more.Secondary zone --secondary-zone
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 restrictions apply when the secondary zone is used during instance creation or edit:- 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.
Automatic backups --backup-start-time
The window of time when you would like backups to start. Learn more. Retention settings for automated backups --retained-backups-count
The number of automated backups to retain. Learn more. Binary logging --enable-bin-log
Binary logging enables replication and point-in-time recovery. Learn more. Retention settings for binary logging --retained-transaction-log-days
The number of days to retain binary logs for point-in-time recovery.Learn more. Add database flags Database flags --database-flags
You can use database flags to control settings and parameters for your instance. Learn more about database flags. Learn more about how to format this parameter. Maintenance schedule Maintenance window --maintenance-window-day
,--maintenance-window-hour
Determines 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. Maintenance timing --maintenance-release-channel
Your preferred timing for instance updates, relative to other instances in the same project. Use preview
for earlier updates, andproduction
for later updates. Learn more. - Note the automatically assigned IP address.
If you are not using the Cloud SQL 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
REST v1beta4
Create the instance
This example creates an instance with backups and binary logging enabled. These settings are optional. 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.
Do not 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 below, make the following replacements:
- project-id: your project ID
- instance-id: desired instance ID
- database-version: Enum string of the database version.
For example:
MYSQL_5_7
- region: desired region
- machine-type: desired machine type
HTTP method and URL:
POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances
Request JSON body:
{ "name": "instance-id", "region": "region", "databaseVersion": "database-version", "settings": { "tier": "machine-type", "backupConfiguration": { "binaryLogEnabled": true, "enabled": true } } }
To send your request, expand one of these options:
You should receive a JSON response similar to the following:
{ "kind": "sql#operation", "targetLink": "https://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
The response is a long-running operation, which may 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 below, 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://www.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://www.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://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id", "targetProject": "project-id" }
The response is a long-running operation, which may 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 below, make the following replacements:
- project-id: your project ID
- instance-id: instance ID created in prior step
HTTP method and URL:
GET https://www.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_5_7", "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://www.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.
Flexible instance configurations
Flexible instance configurations let you select the amount of memory and CPUs that your instance needs. This flexibility lets you choose the appropriate VM shape for your workload. Machine type names use the format db-custom-CPU-RAM, where CPU is the number of CPUs in the machine in MB, and RAM is the amount of memory in the machine.
When selecting the number of CPUs and amount of memory, there are some restrictions on the configuration you choose:
- 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)
In the table below, the legacy machine type name (previously used in the Cloud Console) is mapped to its equivalent string in the db-custom-CPU-RAM format. You can create the equivalent machine type by specifying the equivalent CPU and RAM in the Cloud Console or using gcloud, or use the db-custom-CPU-RAM format string in the API.
Legacy machine type | vCPUs | Memory (MBs) | db-custom-CPU-RAM string (API tier string) |
---|---|---|---|
db-n1-standard-1 | 1 | 3840 | db-custom-1-3840 |
db-n1-standard-2 | 2 | 7680 | db-custom-2-7680 |
db-n1-standard-4 | 4 | 15360 | db-custom-4-15360 |
db-n1-standard-8 | 8 | 30720 | db-custom-8-30720 |
db-n1-standard-16 | 16 | 61440 | db-custom-16-61440 |
db-n1-standard-32 | 32 | 122880 | db-custom-32-122880 |
db-n1-standard-64 | 64 | 245760 | db-custom-64-245760 |
db-n1-standard-96 | 96 | 368640 | db-custom-96-368640 |
db-n1-highmem-2 | 2 | 13312 | db-custom-2-13312 |
db-n1-highmem-4 | 4 | 26624 | db-custom-4-26624 |
db-n1-highmem-8 | 8 | 53248 | db-custom-8-53248 |
db-n1-highmem-16 | 16 | 106496 | db-custom-16-106496 |
db-n1-highmem-32 | 32 | 212992 | db-custom-32-212992 |
db-n1-highmem-64 | 64 | 425984 | db-custom-64-425984 |
db-n1-highmem-96 | 96 | 638976 | db-custom-96-638976 |
Troubleshooting
Click the links in the table for details:
For this problem... | The issue might be... | Try this... |
---|---|---|
Internal error . |
Missing service networking service account. | Disable and re-enable the Service
Networking API . |
Terraform instance creation fails. | Terraform configuration error. | Inspect and repair the Terraform configuration file. |
HTTP Error 409 in Terraform script. |
Another operation is already in progress. | Fix the Terraform script to wait for each operation to finish. |
Unknown error |
Trying to create an instance with the same name as one recently deleted. Or trying to create multiple instances simultaneously with a new private IP range being used. | Use a different name for the instance or wait until it's been a week since the instance was deleted. Recreate failed instances consecutively using different names. |
Failed to create subnetwork . |
No more available addresses in the IP range. | Allocate new ranges. |
Internal error
You see the error message {"ResourceType":"sqladmin.v1beta4.instance",
"ResourceErrorCode":"INTERNAL_ERROR","ResourceErrorMessage":null}
.
The issue might be
The service project is likely missing the service networking service account required for this feature.
Things to try
To repair service permissions, disable the
Service Networking API
, wait five minutes and then re-enable it.
Terraform instance creation fails
Terraform instance creation fails.
The issue might be
This is usually an issue within the Terraform script itself.
Things to try
Inspect and repair the Terraform configuration file.
409 error in Terraform script
You see the error message HTTP Error 409
in Terraform scripts.
The issue might be
Operation failed because another operation was already in progress
Things to try
Revise the script to halt execution until each instance operation is completed.
Have the script poll and wait until a 200
is returned for the
previous operation ID before continuing to the next step.
Unknown error
When trying to create an instance, you see an error message like Cloud SQL
creation failed, error UNKNOWN
.
The issue might be
Most likely you are trying to re-use the name of an instance you recently
deleted. Instance names cannot be re-used for one week after deletion. Or you
are trying to create multiple instances simultaneously using a new private IP
range when only the first instance is created and others fail with
Unknown error
.
Things to try
Either use a different name for the instance, or wait one week to create a new one using that name. Create multiple instances consecutively instead of simultaneously.
Failed to create subnetwork
You get the error message: Failed to create subnetwork. Couldn't find free
blocks in allocated IP ranges. Please allocate new ranges for this service
provider.
The issue might be
There are no more available addresses in the allocated IP range.
If you encounter this error when attempting to create a Cloud SQL instance with private IP against a Shared VPC network using private service connections. there are five possible scenarios:
- 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.
- You're attempting to create both MySQL or SQL Server and PostgreSQL instances on the same private service connection in the VPC host project. MySQL and SQL Server can share the same service connection. PostgreSQL requires its own service connection.
- You're attempting to create instances on the same private service connection in different regions, which is not supported.
Things to try
For each of the above scenarios you can elect to either expand the existing or allocate an additional IP range to the private service connection.
If you're allocating a new range, take care to not create an allocation that overlaps 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 only increase 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]
What's next
- Configure access to the instance.
- Connect to the instance with a MySQL client.
- Create a MySQL database on the instance.
- Import data into the instance.
- Create MySQL users on the instance.
- Learn more about instance settings.