# Backups

> Manual and scheduled backups to S3, Cloudflare R2, or S3-compatible storage — or a one-off download without storage — with retention, status, encryption, and integrity.

Source: https://fleetdock.dev/docs/backups


Fleetdock backs up databases with each engine's native logical dump tool — `mariadb-dump`
(or `mysqldump`) for MariaDB and MySQL, and `pg_dump` for PostgreSQL — gzips the output, and
streams it to object storage. Backups are checksummed and tracked as operations.

## Backup destinations [#backup-destinations]

A **destination** is where backups are stored. Fleetdock supports:

* **Amazon S3**
* **Cloudflare R2**
* **S3-compatible** buckets

Add a destination under **Destinations**, then use **Test bucket** to verify access.

<Callout type="info">
  These are the storage providers implemented in the current release. Destination secret
  keys are encrypted at rest with `FLEETDOCK_ENCRYPTION_KEY`.
</Callout>

## How backups work [#how-backups-work]

A backup runs the engine's native dump command (`mariadb-dump`/`mysqldump` or `pg_dump`),
compresses it with gzip, and streams it to the destination through a **presigned URL**. The
agent moves the bytes but never receives your storage credentials — the Manager generates
the presigned URL. Fleetdock records the object location, a SHA-256 checksum, and the backup
size.

<Screenshot name="backups" />

## Manual backups [#manual-backups]

From a database's detail page, trigger a backup. It appears as an operation with status and
progress on the **Operations** page.

## Download a backup without storage [#download-a-backup-without-storage]

You don't need a bucket for a one-off backup. Open a database, choose **Back up now →
Download to this computer**, and your browser saves a `<database>-<YYYYMMDD-HHMMSS>.sql.gz`
file: the same gzipped `pg_dump` / `mariadb-dump` output a stored backup contains.

* **Nothing is kept in Fleetdock.** The dump streams from the database through the control
  plane straight to your browser. It is not written to disk or a bucket, has no checksum
  record, and does not appear in the backup history.
* **The control plane runs the dump**, so it must reach the database port — the same
  requirement as the data browser. SSH tunnels configured on the instance are used.
* **Permissions:** the same `backup:write` right as a stored backup. The dump runs as the
  instance's admin login.
* **Restoring:** use **Import SQL** on the target database; it accepts the `.sql.gz` as is.

Fleetdock first checks that the dump can start (tool installed, database reachable) and
reports a problem as a message. If the connection breaks mid-way, the file is truncated and
`gunzip -t` reports it as corrupt — download it again.

The API equivalents are `POST /v1/databases/{id}/dump/check` and
`GET /v1/databases/{id}/dump`.

## Compare a table with a backup [#compare-a-table-with-a-backup]

To see what changed in one table since a backup, and put single rows back without restoring
the whole database, use &#x2A;*Compare with a backup…** in the Data browser. See
[Data browser](/docs/data-browser#compare-with-a-backup).

## Scheduled backups [#scheduled-backups]

Create recurring backups on the **Schedules** page. Each schedule targets a database, runs
on a cron cadence, and has a **retention window**. The worker enqueues scheduled backups and
prunes expired ones.

<Screenshot name="backup-schedules" />

## Retention [#retention]

Retention is defined per schedule. When a backup ages out of its window, the worker deletes
both the object and its metadata so storage does not grow unbounded.

## Backup status and failure behavior [#backup-status-and-failure-behavior]

Every backup is a tracked operation. If a backup fails, the operation records the error, and
— if you have configured notification channels — Fleetdock notifies you automatically.
Configure email, Slack, or webhook channels on the **Notifications** page.

## Backup encryption [#backup-encryption]

Fleetdock encrypts **credentials and destination keys** at rest with envelope encryption.
Object-level encryption of the backup contents in the bucket is provided by your storage
provider — enable bucket encryption and keep buckets private. Presigned URLs are
time-limited.

## Downloading and deleting backups [#downloading-and-deleting-backups]

Backups are listed per database. You can remove a backup, which deletes its stored object and
metadata. Scheduled backups are also pruned automatically by retention.

## Verifying backup integrity [#verifying-backup-integrity]

Each backup stores a SHA-256 checksum. Restores verify that checksum **before** touching the
target (see [Restore](/docs/restores)), so a corrupted artifact is caught before it can
overwrite a database.

<Callout type="warn">
  Fleetdock does not currently perform a scheduled, standalone "test restore" of backups.
  Periodically restore a backup into a throwaway instance to confirm your recovery path end
  to end.
</Callout>
