Skip to main content

Database backups and restore

Cloider backs up every database automatically, with nothing to set up. Every database gets a full backup every 14 days, and every change in between is recorded as it happens, so you can restore your data as it is now or as it was at any second of the last 14 days. A restore always creates a new database, and the original keeps running untouched. Backups are included in the database's price.

At a glance​

BackupsA full backup every 14 days, at night (UTC), plus every change recorded continuously. No setup needed
Restore windowAny second of the last 14 days, up to the moment you restore. See how far back
Restore optionsNewest full backup plus incremental, your data as it is now (the default), or Specific date & time, any second of the window in UTC
What a restore brings backThe whole server: every database, user and grant, or for Redis every key and its expiry time. See what is restored
RestoreInto a new database (a fork) with the same name, user, password, plan, version, trusted sources and SSL mode
CostBackups are free. A restored database is a new database, billed by its plan
Deleting the databaseDeletes its backups and recorded changes too
Managed withThe Backups tab, cloider db backups and cloider db restore, the API and MCP. Not Terraform

How do Cloider database backups work?​

Cloider backs up each running database automatically. Backups are kept apart from the database's own storage, and older ones are removed automatically.

Full backups and recorded changes​

Every 14 days, at night (UTC), Cloider takes a full backup of the whole server. In between, every change written to the database is recorded continuously: PostgreSQL's write-ahead log (WAL), MySQL's binary log, MongoDB's oplog and Redis's append-only file (AOF). Combined, they allow a consistent recovery to a specific point in time, called point-in-time recovery (PITR).

There is no list of backups to pick from. A restore starts from the full backup taken before the moment you want and replays the recorded changes up to it, so both restore options are point-in-time restores of the whole server.

How far back can I restore?​

The last 14 days, up to the moment you restore. Cloider keeps the full backup and the changes it needs to reach back that far, and removes older ones automatically. Deleting a database deletes all of its backups.

A new database's window opens with its first full backup, which is taken the first night after the database is created. Until then the Backups tab shows "You can restore a backup after the first full backup is completed."

Redis​

Redis records every write in its append-only file (AOF), with a timestamp for each second, and Cloider archives the new writes about once a minute. The full backup every 14 days is an AOF rewrite.

Switching the AOF off

Your Redis user has full rights, so it can switch the AOF or its timestamps off with CONFIG SET appendonly no or CONFIG SET aof-timestamp-enabled no. Cloider switches them back on within about a minute and takes a new full backup. The restore window then starts at that backup.

Snapshots of a Redis database taken before it had point-in-time recovery, named YYYY-MM-DD_HH-MM, are still listed by cloider db backups, and you can restore one by name with cloider db restore <database> <name> until they expire, around mid-November 2026.

Paused databases

A paused database isn't running, so no full backups are taken and there are no changes to record. To restore it, resume it first.

See what you can restore​

The Backups tab, cloider db backups and the API show the start of the restore window.

  1. Open the database and go to the Backups tab.
  2. Summary says how the database is backed up.
  3. Under Restore a Backup, pick Specific date & time. The hint under Time (UTC) gives the start of the window, for example "Restorable from Oct 13, 2026 at 01:31:07 UTC."

A new database shows "You can restore a backup after the first full backup is completed." until its first full backup has run.

The Backups tab of orders-db with the Summary of how it is backed up, and under Restore a Backup the Newest full backup plus incremental option selected, the Specific date & time option and the Restore button
The newest full backup plus incremental is selected by default.

Restore a backup into a new database​

Restoring creates a new database, called a fork, and leaves your current database running unchanged. Use the fork to recover deleted rows, inspect old data, test a migration on real data or replace the original.

Every database has two restore options:

OptionWhat the new database holdsCLIAPI body
Newest full backup plus incremental (the default)The newest full backup plus every change since: your data as it is at the moment you restorecloider db restore orders-db{"latest": true}
Specific date & timeYour data as it was at any second of the window, picked in UTC, for example the second before a DROP TABLE or a bad migration--time 2026-10-25T14:29:00Z{"target_time": "2026-10-25T14:29:00Z"}
PrecisionTo the second: everything committed by the time you pick is restored, nothing after it. MySQL counts a statement at the second it started, so one still running at that time is restored too. Redis restores to the end of the second you pick, so writes made during that second are kept
RequirementThe database must be running, not paused, for both options
DurationCloider loads the full backup taken before your time, then replays the changes after it, up to about 4 weeks of them. Minutes for most databases, longer for busy ones
  1. Open the database and go to the Backups tab.
  2. Under Restore a Backup, keep Newest full backup plus incremental to restore your data as it is now, or pick Specific date & time. Then choose the day in the Date calendar, where only days inside the window can be selected, and enter the time in Time (UTC) as HH:mm:ss.
  3. Click Restore.
  4. The Restore Backup dialog says what the new database will hold, for example "This creates a new database with your data as it was on Oct 25, 2026 at 14:29:00 UTC. Your current database is left untouched. Continue?" Click Create fork.

A time outside the window shows "Pick a moment from Oct 13, 2026 at 01:31:07 UTC on." or "Pick a moment in the past." under Time (UTC), and Restore stays disabled.

The Restore Backup dialog saying a new database is created from the newest full backup plus every change since, with the data as it is now, and the current database is left untouched, with Cancel and Create fork buttons
Restoring always creates a new database.

The dashboard takes you to the Databases list, where the new database is highlighted with the status Creating until it is ready.

What the new database gets​

PropertyValue in the restored database
LabelThe original's label plus the moment restored to, for example orders-db-2026-10-27-09-12-03 (with -1, -2 added if taken)
Name, user, passwordThe same as the original
Engine, version, planThe same as the original
Trusted sources, SSL modeThe same as the original
Id, host and portNew. The host is <name>-<new id>.db.cloider.com, and the port is newly assigned
DataThe whole server as it was at that moment, see below
BackupsIts own, starting with its first full backup the first night after it is created

Because the name, user and password are the same, switching an app to the restored database only means changing the host and the port in its connection string.

What is restored and what isn't​

EngineRestoredNot restored
PostgreSQLThe whole server: every database, role, password, ownership and grantChanges committed after the moment restored to
MySQLThe whole server: every database with its views, routines and triggers, every account, password and grantStatements started after the moment restored to
MongoDBThe whole server: every database, collection, index, user and roleWrites after the moment restored to
RedisThe whole server: all 16 logical databases, every key and its expiry timeWrites after the end of the second restored to, ACL users you created yourself (ACL SETUSER), CONFIG SET changes

Redis expiry times are absolute, so a key whose time to live ran out since the moment restored to is gone in the new database, as it is in the original.

Replace a database with a backup​

Cloider doesn't overwrite a running database with a backup. To go back to earlier data:

Option 1: switch to the restored database. Restore into a new database, check the data, then point your app at the new database (only the host and port change) and delete the old one when you no longer need it. This is the quickest way, with no copying.

Option 2: copy the data back. Restore into a new database, then copy what you need into the original with the engine's tools. For example, to replace one PostgreSQL table:

# Dump one table from the restored database
PGPASSWORD="$(cloider db password orders-db-2026-10-25-14-29-00)" \
pg_dump -h orders-db-w4t6yb.db.cloider.com -p 21388 -U orders_db_user -d orders-db \
--data-only --table=public.orders -Fc -f orders.dump

# Empty the table in the original, then load the old rows
cloider db exec orders-db "TRUNCATE public.orders;"
PGPASSWORD="$(cloider db password orders-db)" \
pg_restore -h orders-db-p0q9zm.db.cloider.com -p 20417 -U orders_db_user -d orders-db \
--data-only orders.dump

Both databases must trust your IP for this, see trusted sources.

Make your own backups​

Cloider's backups protect against mistakes and failures within the restore window. For longer retention, copies outside Cloider, or a file you can download, export the data yourself with the engine's tools. Each of these runs from your machine against the public host:

# PostgreSQL: custom format dump of one database
PGPASSWORD="$(cloider db password orders-db)" \
pg_dump -h orders-db-p0q9zm.db.cloider.com -p 20417 -U orders_db_user -d orders-db -Fc -f orders-db.dump

# MySQL: one database, consistent for InnoDB tables
MYSQL_PWD="$(cloider db password shop-db)" \
mysqldump -h shop-db-k7x2wd.db.cloider.com -P 22861 -u shop_db_user --ssl-mode=REQUIRED \
--single-transaction --no-tablespaces shop-db | gzip > shop-db.sql.gz

# MongoDB: one database to a gzipped archive
mongodump --uri "mongodb://catalog_db_user:$(cloider db password catalog-db)@catalog-db-m3v8rt.db.cloider.com:24309/catalog-db?directConnection=true&tls=true" \
--tlsCAFile ca.crt --gzip --archive=catalog-db.archive

# Redis: a snapshot of the whole server
REDISCLI_AUTH="$(cloider db password cache)" \
redis-cli -h cache-c5n1qa.db.cloider.com -p 26742 --user cache_user --tls --cacert ca.crt --rdb cache.rdb

To keep them off your machine, upload them to a Cloider bucket. The guide back up a database to a bucket automates this on a schedule.

Troubleshooting​

You can restore a backup after the first full backup is completed.​

The database is new. Its first full backup is taken the first night after it is created, and the restore window opens then.

Point-in-time recovery isn't available for this database yet. It starts after its first full backup!​

The same, through the CLI or the API: a new database has no full backup to replay changes onto yet. Try again after its first night.

The database must be running to restore it to a point in time!​

Both restore options need the database running, and it is paused or still changing. Resume it, or wait until it is Ready, then restore.

Pick a point in time between ... UTC and now!​

The time is before the start of the window or in the future. The window starts 14 days back, or at the database's first full backup if that is more recent, see cloider db backups or GET /api/databases/<id>/pitr-window.

Choose one of the newest backup, a backup or a point in time!​

The API request sets more than one of latest, backup and target_time. Send exactly one.

Invalid backup selected!​

The request sets none of latest, backup and target_time, or backup isn't in the YYYY-MM-DD_HH-MM format. Send {"latest": true} or a target_time.

Free plan users can not create more than one database. UPGRADE NOW!​

A restore creates a database, and accounts on the free plan can have only one. Delete the other database first or upgrade, see billing.

The moment I need is outside the window​

Full backups that fall out of the window, and the changes recorded before them, are removed automatically. For Redis, switching the AOF off also moves the start of the window, see Redis. For longer retention, make your own backups.

The restored database shows Failed​

The restore didn't complete, so the new database doesn't hold a usable copy. Your original database isn't affected. Delete the failed one and try again, or contact support if it fails again.

Next steps​

Frequently asked questions

How often are Cloider databases backed up?

Every database gets a full backup every 14 days, and every change in between is recorded continuously. Backups start automatically when a database is created, with no setup and no extra cost.

How far back can I restore a database?

Any second of the last 14 days, up to the moment you restore. cloider db backups <database> shows where the window starts.

Does restoring a backup overwrite my database?

No. A restore always creates a new database, with the same name, user, password and plan. The original database keeps running unchanged.

What happens to backups when I delete a database?

They are deleted with it, together with its recorded changes. Restore or export anything you want to keep before deleting a database.

Can I restore a database to a specific time?

Yes: any second of the last 14 days, picked in UTC, into a new database. Without a time, Cloider restores the newest full backup plus every change since, your data as it is now.

Can I download a Cloider backup file?

No. Cloider's backups can only be restored into a new database. To get a file, export the data yourself with pg_dump, mysqldump, mongodump or redis-cli --rdb.