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
- Click + Add and choose MySQL.
- Choose how many servers and routers to run, and set the storage.
- 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.
| Node | What it does |
|---|---|
| Server | Holds your data. Each server keeps a full copy. |
| Router | Takes 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
| Servers | What you get |
|---|---|
| 1 | One server. If it fails, the database is down until it restarts. Fine for development. |
| 3 or more | Copies 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:
| Variable | What it holds |
|---|---|
DATABASE_URL | The full connection URL. |
MYSQL_HOST | The router hostname. |
MYSQL_PORT | The router port, 6446. |
MYSQL_USER | The username. |
MYSQL_PASSWORD | The 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.sqlCreate 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.
| Requirement | Why |
|---|---|
A primary key — or at least one NOT NULL UNIQUE index | The database identifies each row by its key when it copies a write from one server to another. |
| The InnoDB engine | MyISAM 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.sqlThis 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.sqlAdding 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:
| Frequency | When |
|---|---|
| Daily | 02:00 UTC |
| Twice daily | 02:00 and 14:00 UTC |
| Weekly | Sunday, 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.
- Click + Add and choose MySQL.
- Set the servers, routers and storage as usual.
- Under Restore from a backup, pick the bucket holding the backup.
- Enter the path to the backup — for example
/mysql/orders/2026-08-24T02-00-00Z. - 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.