Simplifyd Cloud
HomeDashboardMySQL

MySQL

Create a managed MySQL database, choose how many servers it runs, connect to it, import an existing database, schedule backups, and restore from one.

A MySQL service is a MySQL database that Simplifyd Cloud runs and maintains for you.

Creating a database

  1. Click + Add and choose MySQL.
  2. Choose how many servers and routers to run, and set the storage.
  3. Click Apply in the Apply Changes bar.

The database takes a few minutes to come up — most of that is downloading the MySQL image the first time. While it starts, the node shows as starting.

Servers and routers

A MySQL service is made of two kinds of node, and you pay for both.

NodeWhat it does
ServerHolds your data. Each server keeps a full copy.
RouterTakes connections from your app and passes them to the right server. Holds no data.

Your app always connects to the router, never to a server directly. That is what lets the database keep working when a server fails — the router sends traffic to whichever server is currently in charge.

How many servers

ServersWhat you get
1One server. If it fails, the database is down until it restarts. Fine for development.
3 or moreCopies of your data on every server. The database keeps accepting writes as long as more than half the servers are up.

Use an odd number. More than half the servers must agree before a write is accepted, so going from 3 to 4 costs you a node without letting you survive any more failures. 3 survives 1 failure, 5 survives 2.

How many routers

One router is enough to run a cluster. Add a second if you do not want the router itself to be a single point of failure.

Routers are billed the same as servers. A 3-server cluster with 1 router is 4 nodes on your bill. The create dialog shows the total before you apply.

Connecting

Open the service panel → Settings tab → Connection. You get a user, a password, and a Connection URL you can paste into a client.

The URL points at the router on port 6446:

mysql://root:password@my-mysql.abc12.3959zww.simplifyd.internal:6446/

There is no database name on the end. MySQL starts empty, so create a database yourself with your first connection:

CREATE DATABASE myapp;

The connection uses the private network, so nothing is exposed to the internet.

Any other service in the same environment can pull the connection details in with a reference variable:

DATABASE_URL=${{mysql.DATABASE_URL}}

These names are available on a MySQL service:

VariableWhat it holds
DATABASE_URLThe full connection URL.
MYSQL_HOSTThe router hostname.
MYSQL_PORTThe router port, 6446.
MYSQL_USERThe username.
MYSQL_PASSWORDThe password.

There is no MYSQL_DATABASE, because MySQL starts with no database for it to name.

Importing an existing database

To move a database in from somewhere else, dump it from the old server and load the dump over the connection URL:

mysqldump -h old-host -u root -p --set-gtid-purged=OFF myapp > myapp.sql
mysql -h my-mysql.abc12.3959zww.simplifyd.internal -P 6446 -u root -p myapp < myapp.sql

Create the database first if you have not already — the load will not create it for you. --set-gtid-purged=OFF leaves the old server's replication history out of the dump; without it the load fails on the first line, because your new database is already keeping a history of its own.

Two things have to be true of every table in the dump before it will load.

RequirementWhy
A primary key — or at least one NOT NULL UNIQUE indexThe database identifies each row by its key when it copies a write from one server to another.
The InnoDB engineMyISAM and the older engines cannot take part in that copying, so they are not supported.

A table that breaks either rule stops the load on the statement that creates it:

ERROR 3098 (HY000) at line 397: The table does not comply with the requirements by an external plugin.

The number is the line of your dump file that failed, so open it to see which table is at fault:

sed -n '397p' myapp.sql

This applies to a single-server database as well. Servers can be added to a MySQL service later, so the same rules hold whether you run 1 server or 5.

Checking before you import

Run these on the old database to find everything that needs fixing, rather than discovering one table at a time.

Tables with no primary key:

SELECT t.table_schema, t.table_name
FROM information_schema.tables t
LEFT JOIN information_schema.table_constraints c
  ON c.table_schema = t.table_schema
 AND c.table_name = t.table_name
 AND c.constraint_type = 'PRIMARY KEY'
WHERE t.table_type = 'BASE TABLE'
  AND t.table_schema NOT IN ('mysql', 'sys', 'information_schema', 'performance_schema')
  AND c.constraint_name IS NULL;

Tables not using InnoDB:

SELECT table_schema, table_name, engine
FROM information_schema.tables
WHERE engine <> 'InnoDB'
  AND table_schema NOT IN ('mysql', 'sys', 'information_schema', 'performance_schema');

Fixing the engine

Change the engine on the old database:

ALTER TABLE orders ENGINE=InnoDB;

Or rewrite the dump you have already taken:

sed -i'' -e 's/ENGINE=MyISAM/ENGINE=InnoDB/g' myapp.sql

Adding a primary key

If the table already has a column that is unique and never null, promote it:

ALTER TABLE orders ADD PRIMARY KEY (order_ref);

If there is no such column and you would rather not change what your application sees, add a hidden one. An invisible column is not returned by SELECT *, so existing queries carry on unchanged:

ALTER TABLE orders
  ADD COLUMN _pk BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY INVISIBLE;

Fix the tables on the old database, take a fresh dump, and load it again.

These are requirements of MySQL itself, not a restriction Simplifyd Cloud puts in front of it, so there is no setting to turn off. sql_require_primary_key is a different check with a different error (ERROR 3750) — turning it off will not get this dump to load.

Storage

Storage is set per server, and each server keeps a full copy of your data. Three servers at 20 GB provision 60 GB in total, and that is what you are billed for. Routers use none.

Storage cannot be changed after the database is created. Pick a size with room to grow.

Versions

The version is fixed when you create the service. Upgrading MySQL needs a careful step-by-step procedure, so Simplifyd Cloud will not do it for you in the background. To move to a newer version, create a new service and move your data across.

Backups

Open the service panel → Settings tab → Backups.

A backup is a dump of the whole database written to a bucket. Pick how often it runs:

FrequencyWhen
Daily02:00 UTC
Twice daily02:00 and 14:00 UTC
WeeklySunday, 02:00 UTC

Times are UTC, not your local time.

These are snapshots taken on a schedule. You can restore to a backup that has run, not to an arbitrary moment in time. Postgres can do the latter; MySQL here cannot. If you need to recover to the exact second before a bad write, use Postgres.

Where backups go

Choose one of two destinations:

A Simplifyd bucket — pick a bucket from the list. It must be in the same project and environment as the database. This is the simpler option: the credentials are read from the bucket each time a backup runs, so rotating the bucket's keys will not quietly break your backups.

Another S3-compatible bucket — give the bucket name, endpoint URL, region, and an access key pair. Use this for a bucket you keep somewhere else.

Backup settings are applied when you next deploy the service, like every other setting. Saving alone does not start backing anything up.

Turning backups off

Set the frequency to Off and save. Backups that have already been written are kept — turning off future backups never deletes past ones. Deleting the whole service does not delete its backups either.

Restoring from a backup

Restoring creates a new database from a backup. It does not rewind an existing one.

  1. Click + Add and choose MySQL.
  2. Set the servers, routers and storage as usual.
  3. Under Restore from a backup, pick the bucket holding the backup.
  4. Enter the path to the backup — for example /mysql/orders/2026-08-24T02-00-00Z.
  5. Click Apply.

The new database starts up, loads the backup, and is then ready to use. Once you are happy with it, point your app at the new connection URL.

Give the path to one backup, not the folder holding all of them. A path with no backup in it loads nothing, and the database starts up empty rather than failing — so check the data is there before you switch over.

A database can only be restored when it is created. There is no way to restore into a database that already exists, which is why the option lives in the create dialog and not in Settings.

If the backup cannot be read — wrong path, wrong bucket, missing permissions — the new service shows as failed rather than starting up empty.

What is not available yet

MySQL is newer than Postgres on Simplifyd Cloud, and some things Postgres has are not here yet:

  • No point-in-time recovery, only restore points from backups that have run
  • No restoring in place — restoring always creates a new database
  • No password rotation from the dashboard
  • No dashboard screen for extra databases and users — create them yourself over the connection
  • No storage resizing

If you need those today, use Postgres.

Logs

Deployment logs are not available for MySQL services — the database is managed by the platform. Use the Metrics tab to see load.