Overview
MariaDB is a community-developed, MySQL-compatible relational database. This template deploys one MariaDB server on a persistent volume, reachable only from inside your GVC, with an optional phpMyAdmin web console and an optional scheduled dump to an S3 or GCS bucket. Every credential comes from a secret you create before installing. No password passes through Helm values, so none lands in the release or the stored workload spec, and the template creates no secret of its own.What Gets Created
Prerequisites
Two secrets must exist before you install. They are deliberately separate: an application that is handed the database credentials must not also receive the MariaDBroot account. Secrets are org-level, so no --gvc flag is involved.
Create the application credentials secret
username, password and database. MariaDB creates this user and this database when the volume is first initialized, and this is the credential your applications put in their connection strings.credentialsSecretName to this name.Create the root password secret
plain, whose payload is the MariaDB root password.rootPasswordSecretName to this name.Installation
Create the two secrets above, then install the chart into your GVC, naming them:UI
CLI
Terraform
Pulumi
Configuration
Image
Credentials
cpln://secret/... references, and the policy grants reveal on exactly these two secrets. An application given the dictionary secret has no path to root.
Resources
Storage
Internal Access
cpln port-forward (see Connecting).
phpMyAdmin
root plus the root password. phpMyAdmin.internalAccess governs who may reach the console; the database’s own internalAccess is a separate knob.
Backup
Connecting
127.0.0.1:
Operations
Backing Up
Whenbackup.enabled: true, a cron workload runs mysqldump --databases against the database named in your credentials secret on backup.schedule, authenticating as root, and uploads the gzipped result to BUCKET/PREFIX/mysql-<timestamp>.sql.gz. Both credentials come from the same two secrets the database uses; the bucket, region and prefix are plain configuration. Complete the steps for your provider before enabling it.
- AWS S3
- GCS
- Create an S3 bucket. Set
backup.aws.bucketto its name andbackup.aws.regionto its region. - Create a Control Plane cloud account for the AWS account that holds the bucket. Set
backup.aws.cloudAccountNameto its name. - Create an IAM policy with the JSON below, replacing
YOUR_BUCKET_NAME, and setbackup.aws.policyNameto its name. The template attaches it to the workload’s identity.
- Set
backup.provider: awsandbackup.enabled: true.
Restoring a Backup
The dump was taken withmysqldump --databases, so it recreates the database itself (CREATE DATABASE IF NOT EXISTS plus USE) and is loaded as root without naming a database. Download it, tunnel to the server, and feed it to a local mariadb (or mysql) client. The root password is the payload of your rootPasswordSecretName secret.
Upgrading from Earlier Versions
From 1.4.0. Version 1.4.1 removes the AWS managed policyaws::ReadOnlyAccess from the backup identity. It granted read access to every bucket in your AWS account and contained no write actions, so it never carried the backup itself — but it was silently supplying any read action your own bucket-scoped policy omitted. Before upgrading an install that uses backup.provider: aws, make sure your IAM policy carries the full action list under Backing Up. If it already does, nothing changes. Installs without AWS backups are unaffected.
From 1.3.2 or earlier. Version 1.4.0 moved every credential out of Helm values and closed the phpMyAdmin console by default. Earlier versions shipped working default passwords in values.yaml, behind a console that was always enabled and always public.
config or enablePhpMyAdmin is rejected at render, before anything is applied, and your running release is left untouched — see Troubleshooting for the exact messages. To upgrade:
Create the two secrets with the credentials the database already uses
Remove the old keys from your values
config block and enablePhpMyAdmin. Set credentialsSecretName and rootPasswordSecretName to the two secret names, and set phpMyAdmin.enabled: true if you still want the console.Upgrade, then rotate any default password
Scaling and Availability
This is a single MariaDB server on one volume. Keep the replica count at one: additional replicas would not form a cluster, and the chart pinsminScale and maxScale to 1. Resize with resources.* and volumeset.* instead. The data directory lives on the volume set, so a restart or redeploy reattaches the same data; cpln helm uninstall deletes the volume set and the database with it.
Troubleshooting
The database never becomes ready and cpln logs returns nothing
The database never becomes ready and cpln logs returns nothing
helm install succeeded, cpln logs returns no lines, and cpln workload get-deployments RELEASE_NAME-maria --gvc GVC_NAME -o yaml shows a message under status.versions[].message such as:credentialsSecretName or rootPasswordSecretName. The container never starts, so there is no log output.Fix: Create the named secret as shown in Prerequisites. The workload recovers on its own after several minutes, or run cpln workload force-redeployment RELEASE_NAME-maria --gvc GVC_NAME.helm upgrade fails with 'the config block was removed in 1.4.0'
helm upgrade fails with 'the config block was removed in 1.4.0'
config block from 1.3.2 or earlier. The chart refuses it rather than silently ignoring a password you believe you set.Fix: Follow Upgrading from Earlier Versions. The running release is unaffected until the upgrade succeeds.helm upgrade fails with 'enablePhpMyAdmin was renamed in 1.4.0'
helm upgrade fails with 'enablePhpMyAdmin was renamed in 1.4.0'
enablePhpMyAdmin.Fix: Replace it with phpMyAdmin.enabled: true, and add phpMyAdmin.publicAccess.enabled: true only if you genuinely want the console on the internet.Access denied after changing a password in the secret
Access denied after changing a password in the secret
MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE and MYSQL_ROOT_PASSWORD only while initializing an empty data directory. Changing the secret afterwards does not change the stored passwords, but the readiness probe authenticates as root with the value from the secret, so a mismatch makes the workload unhealthy.Fix: Change the password inside MariaDB first, for every host the account exists under (SELECT User, Host FROM mysql.user;):cpln workload force-redeployment RELEASE_NAME-maria --gvc GVC_NAME so the new value is read — a running replica keeps the value it started with until it is redeployed. Rotate the application user the same way with its own ALTER USER.An internalAccess or publicAccess change does not seem to apply
An internalAccess or publicAccess change does not seem to apply
helm upgrade.Cause: Firewall changes take a few minutes to propagate. Also check you changed the right block: internalAccess governs the database on 3306, while phpMyAdmin.internalAccess and phpMyAdmin.publicAccess govern only the console.Fix: Wait a few minutes and retry before concluding the knob is broken. Changing a console knob re-applies only the console workload; the database is not restarted.The backup job fails with AccessDenied on S3 after upgrading to 1.4.1
The backup job fails with AccessDenied on S3 after upgrading to 1.4.1
AccessDenied error in cpln logs '{gvc="GVC_NAME", workload="RELEASE_NAME-maria-backup"}' --limit 50 --since 10m.Cause: 1.4.1 dropped the account-wide aws::ReadOnlyAccess managed policy from the backup identity, and your bucket-scoped IAM policy is missing an action it used to supply.Fix: Update your IAM policy to the full action list under Backing Up.Important Notes
- Create both secrets before installing. The deployment wedges silently without them;
status.versions[].messageis the only place the missing secret is named. - Credentials are applied only when the volume is first initialized. Rotate a password with
ALTER USERinside MariaDB, then update the secret and force a redeployment — in that order. - Do not scale past one replica. This is a single-instance server; see Scaling and Availability.
phpMyAdmin.publicAccess.enabled: trueputs a database console on the internet. Leave it off unless you have a reason, and never without strong passwords.- Access changes take a few minutes to propagate. Retry before concluding an
internalAccessorpublicAccesschange failed. cpln helm uninstalldeletes the volume set and the database with it. Your two secrets are not touched; they are yours, not the chart’s.- Upgrading from 1.3.2 or earlier is a breaking change. Create the secrets and drop
configandenablePhpMyAdminfirst; see Upgrading from Earlier Versions.