TurboPanel Docs
Using TurboPanel

Managed databases

A managed database is a database cluster TurboPanel provisions, secures and connects for you on your own servers: PostgreSQL, MySQL or MariaDB, in a container the platform owns, behind a shared listener that every consumer dials, with replication, promotion and backups handled from the console. You choose the engine, a version series and a server; the platform does the rest and hands you an endpoint and a first user. This chapter is written for the person creating and using one; the wiring underneath is in Managed database ingress.

The model

A managed database is a managed project — one project whose environment holds a cluster instead of a compose stack. It has three parts:

  • The cluster — one primary on the server you pick, plus any number of replicas. Engine containers are reachable only on the organization's private managed network; nothing publishes an engine port on the host.
  • The listener — a shared ProxySQL on every server that hosts a member or a consumer, on a port the organization sets (15432 for PostgreSQL, 13306 for the MySQL family by default). This is the only thing a client ever connects to. It routes each login to the primary or to read replicas, and it terminates client TLS with the organization's CA.
  • Logins and databases — the users and databases you create on the Data tab. Each login carries a connection role that decides where the listener sends it.

Two facts shape everything below:

  • The version series is chosen once. A cluster is created as PostgreSQL 18, MySQL 9.7 or MariaDB 12.3 (the currently tested series) with a base-OS variant; the series never changes afterwards (managed_series_immutable). Only the variant may.
  • TLS between the listener and the engine is always on. The SSL mode you set is a client-facing policy — whether the listener refuses a plaintext client and what verification the connection string tells the driver to do — never a switch for engine encryption.

Before you begin

  • A connected server with Docker; the cluster's primary runs there.
  • For a failover replica: a second server in the same datacenter as the primary. For a remote read replica: any server in the organization, with TurboFabric or a datacenter path to the primary.
  • For a client on another server: that server enrolled in the organization (the listener is deployed to it when a service there binds the database).
  • Manage rights on the organization.

Create a cluster

Projects → New project, name it, choose Managed.

Pick the engine from the catalog. Only released engines are selectable; the card says so otherwise.

Choose the version series and the base-OS variant (Alpine, Debian, Oracle Linux 9 or UBI, per engine), and the server for the primary.

Create project. The root password is shown once — copy it now; the platform never shows it again (you can rotate it later).

The Overview shows the cluster provisioning, then Running. Provisioning polls only while it is in progress.

EngineCreatable series (tested)Variants
PostgreSQL18Alpine, Debian
MySQL9.7Debian, Oracle Linux 9
MariaDB12.3Debian, UBI

Older series (PostgreSQL 17/16/15, MySQL 8.4, MariaDB 11.8/11.4/10.11) are catalogued so an existing cluster can be named, not created.

Connect to it

The Connect tab is the one place to read the endpoint from; never dial an engine container directly.

Read the listener endpoint — host and port of the ProxySQL on the primary's server (or, for a service bound elsewhere, on that service's server).

Note the effective SSL policy and its DSN parameter (sslmode= for PostgreSQL, ssl-mode= for MySQL and MariaDB). For verify-ca or verify-full, download the Organization CA from the same tab and point your driver at it.

Use a login from the Data tab. Applied usernames carry a random suffix (app_x7…), so copy the applied name, not the short one you typed.

For a service in a compose project, do not paste any of this into variables: bind the database instead (Bindings on the compose project), and the connection details appear as locked variables under the binding's prefix, kept current by the platform. See Bindings.

SSL modes

ModePlaintext client refused?What the connection string tells the driver
disablenono TLS
allow, prefernotry TLS, fall back
require (default)yesTLS, no verification
verify-cayesTLS, verify the CA
verify-fullyesTLS, verify CA and hostname

Resolution is three-layer — the cluster's own override, then the organization default (Managed → Settings), then the platform default require. Leaving a cluster on inherit means an organization change applies to it later; setting a mode pins it.

Users and databases

Data tab.

Rotate root shows a new root password once. Root is platform-suffixed (postgres_… / root_…); the bare engine admin name is never a login.

Create user: a short name and a Connection roleread-write (routed to the primary) or read-only (routed to read-eligible replicas; refused if none exists). The password is shown once; Rotate and Delete act per user.

Create database / Delete database. The initial database and the root user cannot be dropped.

A login's name must be unique across every cluster on servers the same organization owns — username_in_use if another cluster has it, managed_user_exists if this one does. postgres, root, mysql and superadmin are reserved.

Replicas, promotion and disaster recovery

Overview tab — the topology.

Replica classWhereWhat it is for
Failover replicaSame datacenter as the primaryAutomatic failover when the primary dies; a switchover on demand.
Remote / read replicaAny server in the organizationRead traffic close to consumers, and disaster recovery when the primary's site is down. Never promoted automatically.

Add replica, pick the class and the server, and whether it serves read traffic (readEligible). Apply.

Promote a failover replica for a planned switchover: the old primary becomes a replica, the endpoint does not change.

Promote for DR a remote replica only when the primary's site is gone: one writer results; any failover replica left in the old datacenter is rewritten to a read replica.

Remove a replica that is no longer needed. The primary cannot be removed.

Automatic failover is fenced: the platform promotes a same-datacenter failover replica when the primary dies and it can confirm the old primary is isolated; when it cannot, it refuses and says so rather than risk two writers.

Backups

Backups tab — PostgreSQL today; the other engines say backups unsupported until their executor lands.

ActionWhat happens
Back up nowpg_dump in custom format, per database, stored on the primary's server. Retention prunes to the newest N on every successful backup.
RestoreTyped confirmation (the cluster's name). Restores that backup into the cluster in place.
DeleteTwo presses. Removes the backup.

Backups are metadata in the console — there is no download; the artifact lives on the server. Scheduled backups are not built yet: back up before a risky change and after a good one.

Lifecycle and organization settings

  • Start / Stop / Restart act on the containers; stop keeps everything. Apply re-converges the cluster after a settings change.
  • Destroy removes the cluster and its data; a project or environment holding a live cluster cannot be deleted until it is destroyed (managed_runtime_present).
  • Managed → Settings (organization-wide): the default SSL mode, and the listener ports per engine family (1024–65535; 6032, 6132 and 45000–45999 are reserved). Blank = platform default. A port conflict on a host is only detectable when the listener is applied.

Reference

ItemValue
Enginespostgres, mysql, mariadb
Creatable seriesPostgreSQL 18 · MySQL 9.7 · MariaDB 12.3
Variantsalpine, debian, oraclelinux9, ubi (two per series)
Listener portsdefault 15432 / 13306; range 1024–65535; reserved 6032, 6132, 45000–45999
SSL modesdisable · allow · prefer · require (default) · verify-ca · verify-full
Connection rolesread-write (default) · read-only
Replica classesfailover (same datacenter) · read (anywhere)
Recovery kindsautomatic-failover · switchover · disaster-recovery
Applied login<short>_<11 random> when the organization's randomized usernames are on (default); root is always suffixed
BackupsPostgreSQL pg_dump -Fc, per database; retention-pruned; no download; no schedule yet

Errors

CodeStatusMeaning
managed_engine_unavailable400The engine is not released yet.
managed_version_unsupported422The series or variant is not creatable.
managed_series_immutable422A cluster's series cannot change after provisioning; only the variant may.
server_placement_required409No server chosen for the primary.
server_offline409The action needs the member's daemon connected.
managed_busy409The cluster is provisioning or applying; wait for it.
managed_member_exists, managed_member_is_primary, managed_primary_missing409The replica already exists; the primary cannot be removed; the cluster has no primary.
managed_replica_not_promotable422Only a failover or read replica in a promotable state can be promoted.
failover_requires_trusted_datacenter, failover_replica_requires_datacenter_transport422A failover replica needs a trusted datacenter and a datacenter path to the primary.
fabric_address_required422A remote replica or consumer needs a TurboFabric address on its server.
managed_private_port_exhausted409The server has no private replication port left (45000–45999).
managed_listener_bind_conflict422The listener port is already bound on that server.
managed_no_read_targets422A read-only login was requested and no replica serves reads.
managed_user_exists, database_exists409The user or database already exists on this cluster.
username_in_use409A login with that name exists on another cluster in the organization's servers.
username_reserved400postgres, root, mysql, superadmin.
managed_user_has_bindings, managed_database_has_bindings409Sever the service bindings first.
cannot_drop_root_user, cannot_drop_initial_database, cannot_rotate_replication_user, use_root_password_route400 / 409Platform-managed accounts and the initial database; rotate root through Rotate root.
managed_backup_unsupported400The engine has no backup executor yet.
backup_not_found404No backup with that id.
managed_runtime_present409Destroy the cluster before deleting its project or environment.
managed_destroy_failed502The daemon could not tear the cluster down; see the server's logs.
managed_settings_invalid, managed_credential_not_sealed, root_principal_missing, daemon_key_unavailable500 / 503Instance-side faults; not something a form change fixes.
Edit on GitHub

Last updated on

On this page