Managed Postgres, MySQL, and Redis
Use platform-managed database add-ons from services in the same project.
Managed add-ons
Managed Postgres, MySQL, and Redis run as restricted platform services inside your project. You create and manage them from the dashboard, and credentials are provided through service links, never pasted into plain environment variables.
The engines are managed for you and fixed: Postgres 16, MySQL 8.4, and Valkey 8 (the Redis-compatible engine). You pick the engine and an instance class; the platform runs and patches the rest.
Where Databases lives
Databases is a top-level item in the dashboard sidebar. Open it to see every managed database across your projects, each with its engine, project, status, and reserved resources. From here you can create a new one or open any database's detail page.
Creating a database
Click New database to open the create dialog. You choose:
- Project: the project the database joins. It is reachable only by services in that same project, over internal DNS.
- Engine: PostgreSQL, MySQL, or Redis.
- Name: a friendly name. The platform slugifies it (you see the slug it will deploy as right under the field).
- Instance class: a named, fixed resource bundle. Memory is the headline and
vCPU is bundled with it, so you choose a class by how much of your data needs to
live in memory. Postgres and MySQL share a balanced ladder (
db.microthroughdb.xlarge); Redis uses a memory-optimized ladder (cache.microthroughcache.xlarge). The bounds are documented in Add managed Postgres, MySQL, or Redis. - Storage: reserved disk for the database, sized separately from the instance class. Storage can grow later but never shrink.
- Version: shown for Postgres (16) and MySQL (8.4). The engine version is managed, so there is one supported option per engine. Redis runs Valkey 8.
- Redis options: for Redis only, a persistence toggle (on by default;
turn it off for a pure-cache instance) and an eviction policy
(
maxmemory_policy, defaultallkeys-lru).
Submitting creates the database and takes you straight to its detail page, where it provisions in the background.
Backup and restore coverage
Coverage differs by engine; “managed” does not mean every engine has the same recovery path:
- PostgreSQL and MySQL have a Backups & restore tab for on-demand backups and point-in-time restore. A restore creates a new database instance so you can verify it before re-linking applications.
- Redis (Valkey) has no platform backup or point-in-time restore today. The persistence toggle controls how Redis writes locally; it is not an independent backup.
The platform does not publish one blanket RPO or RTO across all three engines. Keep a tested independent copy of critical data.
The detail page
A database's detail page has a connection card and a linked services section.
The connection card shows the internal connection details the platform fills in for you:
- Internal host: the in-cluster DNS name. It always uses the project's
namespace, which the platform manages:
- Postgres read/write host:
<service>-rw.<namespace>.svc.cluster.local:5432. - MySQL host:
moco-<service>-primary.<namespace>.svc.cluster.local:3306. - Redis host:
<service>.<namespace>.svc.cluster.local:6379.
- Postgres read/write host:
- Port:
5432(Postgres),3306(MySQL), or6379(Redis). - Connection variable: the environment variable your app reads:
DATABASE_URLfor Postgres and MySQL,REDIS_URLfor Redis.
The card never shows a password. Credentials are injected only by linking the database to a container app, and they stay in a Kubernetes Secret.
How credentials reach your app
You never see, copy, or set the password by hand. From the database detail page,
use Link to container to pick a container app in the same project. The
platform then injects the connection variable (DATABASE_URL for Postgres and
MySQL, REDIS_URL for Redis) into that container as a single connection URL
(host plus credentials), wired to the Kubernetes Secret through a secretKeyRef,
and re-rolls the container so the value is present. Your app reads that one
variable instead of typing a host or password.
The database is always the provider in a link; the consumer is a generic container app. The linked services list on the detail page shows every container this database is wired into.
To add and link a database step by step, see
Add managed Postgres, MySQL, or Redis. That page
also documents the API (curl) path for automation.