Description
This rule confirms that automated, scheduled backups with point-in-time recovery are in place for every Managed Database cluster and that a recent successful backup exists. DigitalOcean takes free daily full backups and continuously archives write-ahead logs for PostgreSQL and MySQL, giving point-in-time recovery to any moment within the retention window; this backup capability is always on and cannot be turned off.
Because backups cannot be disabled, the rule's real value is verifying that a recent backup is actually present and that the team has validated the restore path by performing test restores, so recovery works when it is genuinely needed.
Clusters for which no recent backup is listed within the retention window
Teams that have never performed a test restore to validate recoverability
Rationale
Even routine operational mistakes — an accidental table drop, a bad migration, or data corruption — can cause permanent data loss without a working backup. Point-in-time recovery lets an operator rewind the database to just before the incident.
A backup is only useful if it can be restored. Periodically restoring into a new cluster proves the backups are valid and measures how long a real recovery takes, which feeds the workload's recovery objectives.
Impact
Pros:
Point-in-time recovery to any second within the retention window
Protects against accidental deletion, corruption, and failed migrations
Provided free and managed by DigitalOcean with no operational effort
Cons:
Retention is fixed at 7 days and cannot be extended; longer retention needs an external export process
Restoring creates a new cluster, so applications must be repointed after recovery
Test restores consume additional resources for the duration of the exercise
Default Value
All Managed Database clusters have free daily backups with point-in-time recovery enabled by default; retention is fixed at 7 days and cannot be disabled or extended.
Pre-Requisite
DigitalOcean Control Panel access with a role that can view the cluster and create clusters (for test restores)
Optional: a DigitalOcean API token or doctl authenticated (doctl auth init)
A documented recovery procedure and a target for periodic test restores
Remediation
Test Plan
Using the DigitalOcean Control Panel:
In the Control Panel, go to Databases and click the cluster name.
On the Overview / Settings page, confirm the backup and point-in-time recovery window is present (there is no enable/disable toggle to change).
Confirm the most recent daily backup falls within the 7-day retention window.
Pass: A recent daily backup is listed and the point-in-time recovery window is available.
Fail: No recent backup is shown (open a DigitalOcean support ticket, as backups should always be present).
Using doctl or the API:
List the cluster's backups and confirm a recent one exists.
doctl databases backups list <database-cluster-id>
curl -s -X GET "https://api.digitalocean.com/v2/databases/<database-cluster-uuid>/backups" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
Pass if the backups list returns at least one backup with a created_at inside the 7-day retention window. Fail if the list is empty.
Implementation Steps
Using the DigitalOcean Control Panel:
Because backups cannot be enabled or disabled, remediation is to validate the restore path rather than turn a setting on.
On the cluster's Overview page, use the create-from-backup / fork flow to restore the cluster (optionally to a specific point in time) into a new cluster.
Verify the restored cluster contains the expected data, then delete the throwaway restore.
Schedule this test restore periodically and record the time it takes.
Using doctl or the API:
Validate recovery by creating a new cluster from a backup.
curl -s -X POST "https://api.digitalocean.com/v2/databases" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" -H "Content-Type: application/json" -d '{"name":"restore-test","engine":"pg","region":"nyc1","size":"db-s-1vcpu-1gb","num_nodes":1,"backup_restore":{"database_name":"<source-cluster-name>","backup_created_at":"<iso8601-timestamp>"}}'
Backout Plan:
Delete the temporary restore cluster once validation is complete (Control Panel Destroy, or DELETE /v2/databases/<restore-cluster-uuid>).
No change is made to the production cluster, so no production rollback is required.