Overview
MySQL is a widely used open-source relational database management system. This template deploys a single-replica MySQL instance with persistent storage, an optional phpMyAdmin web interface, and optional scheduled backups to AWS S3 or GCS.MySQL on Control Plane operates as a single-replica deployment. Do not scale up the replica count, as this would result in multiple isolated instances rather than a replicated cluster.
What Gets Created
- Stateful Workload — A single-replica MySQL database container with configurable resources.
- Volume Set — Persistent storage for MySQL data, with optional autoscaling.
- Secret — A dictionary secret storing the database name, root password, and user credentials. When backup is enabled, the secret also includes backup storage configuration.
- Identity & Policy — An identity bound to the workload with
revealaccess to the database credentials secret. When backup is enabled, the identity also grants the backup cron job access to the configured cloud storage. - Backup Cron Job (optional) — A scheduled job that dumps the MySQL database to an S3 or GCS bucket. Enabled when
backup.enabled: true. - phpMyAdmin Workload (optional) — A web-based database management interface. Enabled when
enablePhpMyAdmin: true.
This template does not create a GVC. You must deploy it into an existing GVC.
Prerequisites
Prerequisites are only required if you plan to enable MySQL backups (backup.enabled: true). The backup feature requires MySQL 9+. Skip this section if backups are not needed.
AWS S3
-
Create an S3 bucket. Set
backup.aws.bucketandbackup.aws.regionin your values file. -
If you do not have a Control Plane Cloud Account set up, follow the Create a Cloud Account guide. Set
backup.aws.cloudAccountNameto the name of your Cloud Account. -
Create an IAM policy with the following JSON, replacing
YOUR_BUCKET_NAME:
- Set
backup.aws.policyNameto the name of the policy created in step 3.
GCS
-
Create a GCS bucket. Set
backup.gcp.bucketin your values file. -
If you do not have a Control Plane Cloud Account set up, follow the Create a Cloud Account guide. Set
backup.gcp.cloudAccountNameto the name of your Cloud Account. - Add the Storage Admin role to the GCP service account associated with the Cloud Account.
Installation
To install, follow the instructions for your preferred method:UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
Configuration
The defaultvalues.yaml for this template:
Credentials
config.db— Name of the database created on startup.config.rootPassword— Password for the MySQL root user. Change before deploying to production.config.user— Name of the non-root database user created on startup.config.password— Password for the non-root user. Change before deploying to production.
These values are only applied on first startup when the data directory is empty. Updating them after the initial deployment will have no effect on the running database. To change credentials or the database name on an existing instance, use MySQL’s native commands (e.g.
ALTER USER, RENAME DATABASE).Resources
resources.minCpu/resources.minMemory— Minimum CPU and memory guaranteed to the workload.resources.maxCpu/resources.maxMemory— Maximum CPU and memory the workload can use.timeoutSeconds— Workload timeout in seconds.
Storage
volumeset.capacity— Initial volume size in GiB (minimum 10).volumeset.autoscaling.enabled— Automatically expand the volume as it fills. When enabled:maxCapacity— Maximum volume size in GiB.minFreePercentage— Trigger a scale-up when free space drops below this percentage.scalingFactor— Multiply the current capacity by this factor when scaling up.
Internal Access
internalAccess.type— Controls which workloads can connect to MySQL on port3306:
| Type | Description |
|---|---|
none | No internal access allowed |
same-gvc | Allow access from all workloads in the same GVC |
same-org | Allow access from all workloads in the same organization |
workload-list | Allow access only from specific workloads listed in workloads |
phpMyAdmin
enablePhpMyAdmin— Whentrue, deploys a phpMyAdmin workload for browser-based database management.
Backup
Setbackup.enabled: true to enable scheduled database dumps to object storage. The backup feature requires MySQL 9+.
Set backup.provider to aws or gcp and fill in the corresponding section. The prefix field controls the folder path within the bucket where backups are stored.