WordPress Totally Free Backup and Restore: CloudScale Backup Plugin: Does Exactly What It Says

I’ve been running this blog on WordPress for years, and the backup situation has always quietly bothered me. The popular backup plugins either charge a monthly fee, cap you on storage, phone home to an external service, or do all three. I wanted something simple: a plugin that makes a zip file of my site, stores it locally, and runs on a schedule. No accounts, no subscriptions, no cloud storage dependencies.

So I built one. It’s called CloudScale Free Backup and Restore, it’s completely free, and you can install it right now. Below is the screen layout:

Download: cloudscale-backup.zip

1. What It Backs Up

The plugin can back up any combination of the following:

Core

  • The WordPress database (all posts, pages, settings, users, comments)
  • Media uploads (wp-content/uploads)
  • Plugins folder (wp-content/plugins)
  • Themes folder (wp-content/themes)

Other (shown only if present on your server)

  • Must-use plugins (wp-content/mu-plugins)
  • Languages and translation files (wp-content/languages)
  • wp-content dropin files (object-cache.php, db.php, advanced-cache.php)
  • .htaccess (your Apache rewrite rules and any custom security directives)
  • wp-config.php (marked with a warning since it contains your database credentials)

Each backup is a single zip file. Inside it you’ll find a database.sql dump, the selected folders each in their own subdirectory, and a backup-meta.json file that records the plugin version, WordPress version, site URL, table prefix, and exactly what was included. That metadata matters when restoring to a different server.

2. How the Backup Works Internally

Database dump

The plugin detects whether mysqldump is available on your server. If it is, it uses that — it’s fast, handles large databases cleanly, and produces a proper SQL dump including all CREATE TABLE and INSERT statements. If mysqldump isn’t available (common on shared hosting), it falls back to a pure PHP implementation that streams through every table and writes compatible SQL. Either way you get a database.sql that can be imported with any standard MySQL client.

File backup

Files are added to the zip using PHP’s ZipArchive extension, which is available on virtually every PHP installation. The plugin walks each selected directory recursively and adds every file. There’s no timeout risk because it does not use exec() or shell commands for the file backup — it streams directly in PHP.

Backup location

Backups are stored in wp-content/cloudscale-backups/. On first run the plugin creates this directory and drops an .htaccess file inside it containing Deny from all, which prevents direct web access to your backup files. You should still make sure your server’s directory listing is disabled, but the .htaccess guard means a direct URL to a backup zip returns a 403.

Scheduled backups

Scheduled backups use WordPress Cron (wp_cron). You pick which days of the week to run and what hour (server time), and the plugin registers a recurring event. The scheduled backup always runs the same options you have currently set: all four core components plus whatever “Other” items you’ve enabled. One thing worth knowing about WordPress Cron: it only fires when someone visits your site. On low traffic sites you may find the backup runs a few minutes after the scheduled time rather than exactly on the hour. If you need exact timing, add a real server cron job that hits wp-cron.php directly.

3. The Retention System

The retention setting controls how many backups to keep. Every time a backup completes, the plugin counts the current backups and deletes the oldest ones beyond your limit. The default is 8, but you can set it from 1 to 9,999.

The plugin shows you a live storage estimate: it takes the size of your most recent backup, multiplies by your retention count, and compares that against current free disk space. A traffic light indicator (green, amber, red) tells you at a glance whether you’re comfortable, getting tight, or at risk of filling the disk. This updates live as you change the retention number.

4. Installing the Plugin

Step 1. Download the plugin zip:

https://andrewninjawordpress.s3.af-south-1.amazonaws.com/cloudscale-backup.zip

Step 2. In your WordPress admin, go to Plugins → Add New → Upload Plugin. Choose the downloaded zip file and click Install Now.

Step 3. Activate the plugin.

Step 4. Go to Tools → CloudScale Backup and Restore.

That’s it. No API keys, no account creation, no configuration wizard.

5. First Things to Configure

Set your schedule

Under the Backup Schedule card, enable automatic backups and tick the days you want it to run. The default is Monday, Wednesday, and Friday at 03:00 server time. Hit Save Schedule to commit your choices.

Set your retention

Under Retention and Storage, decide how many backups to keep. Watch the storage estimate — if you’re on a small VPS with limited disk, keep this number modest. A reasonable starting point is 10 backups, which gives you nearly two weeks of daily coverage or about a month of Mon/Wed/Fri coverage.

Run your first manual backup

Under Manual Backup, tick the components you want and click Run Backup Now. Watch the progress bar. On most sites the first full backup takes between 30 seconds and a few minutes depending on how large your media library is.

6. Restoring a Backup

The Backup History card lists all your backups with filename, size, age, and type. For each backup you have two actions: Download and Restore.

Download streams the zip directly to your browser, which is useful if you want to keep an off-site copy or move the backup to a new server.

Restore unpacks the zip in-place. The database is restored from the included SQL dump (again using native mysql CLI if available, otherwise PHP), and the file directories are extracted back to their original locations. The plugin reads backup-meta.json to verify the backup is compatible with the current WordPress installation before proceeding.

7. What It Deliberately Doesn’t Do

No remote storage. The plugin stores backups locally. If your server dies entirely, your backups die with it. You should periodically download backups to your own machine or push them to S3, Backblaze, or wherever. The plugin gives you the download button — the offsite transfer is your responsibility.

No multisite support. The plugin is designed for standard single-site WordPress installations.

No incremental backups. Every backup is a full backup of the selected components. This keeps the code simple and the restore process reliable, at the cost of larger backup files.

8. A Note on wp-config.php Backups

The plugin can optionally back up wp-config.php, but it’s unchecked by default and flagged with a warning. This file contains your database hostname, username, password, and secret keys. If you include it in a backup and that backup is downloaded and ends up somewhere it shouldn’t, you’ve handed someone the keys to your database.

The case for including it: a wp-config.php backup is extremely valuable when doing a full disaster recovery onto a blank server, because it means you don’t have to remember or reconstruct your configuration. The case against: routine backups probably don’t need it since the file rarely changes. My recommendation is to include it in occasional deliberate “full disaster recovery” backups that you keep securely, and leave it unchecked in your daily automated backups.

9. Open Source

The plugin is open source. If you find a bug, have a feature request, or want to contribute, the code is all standard WordPress plugin PHP — a single main file plus a CSS and JS asset. There are no build steps, no Node dependencies, no compilation required. The entire plugin is designed to be auditable by anyone who can read PHP.

Go build something.

Download: cloudscale-backup.zip

Leave a Reply

Your email address will not be published. Required fields are marked *