Appearance
Backups & restore
Set this up on day one. Everybody agrees backups matter; almost nobody configures them until the day they need one. 15 minutes.
Sidebar → Server & Health → Backups
Two different things get backed up
| Backup | Contains | Size |
|---|---|---|
| Database | Every school, student, fee, mark, setting — all the data | Small, grows slowly |
| Files | Uploaded photos, documents, certificates, logos | Large, grows fast |
The database is the one that matters most. Rebuilding files is painful; rebuilding a database is impossible.
Backups work on shared hosting
The backup engine is written in pure PHP. It does not need shell access, mysqldump or any special hosting feature — it was built for shared hosting deliberately.
Turn on automatic backups
On the Backups screen, set the schedule:
| Setting | Meaning | Sensible value |
|---|---|---|
| Enabled | Whether automatic backups run at all | On |
| Frequency | Daily, weekly, monthly | Daily |
| Time | When it runs | Something quiet, like 03:00 |
| Keep days | How long to keep old backups | 14 to 30 |
Old backups are deleted automatically once they pass keep days, so the disk does not silently fill.
Automatic backups need the cron job
Like everything scheduled, this runs from the cron job. No cron means the schedule is saved, looks correct on screen, and never runs.
Check that a backup actually appeared the day after you set it up. Do not assume.
Taking a backup by hand
Press the button to create one immediately. Always do this before:
- Applying a software update
- Restoring anything
- Bulk-importing students
- Any change you are not sure about
Files backups and cloud storage
If your media is on S3, R2 or Wasabi, the files backup will tell you there is nothing local to back up. That is correct — cloud storage should be protected with the provider's own versioning or replication, not by copying it into a zip.
Restoring
Restoring replaces everything
A database restore overwrites every school's data with the contents of that backup. Anything entered since the backup was taken is gone.
You will be asked to type RESTORE in capitals. That is deliberate.
What the system does when you restore:
The second step is the important one: before overwriting anything, the system dumps your current database to a file named pre-restore-<date>.sql.gz.
So if you restore the wrong file, you are not stranded — restore the pre-restore file and you are back where you started. If the restore fails partway, the error message tells you that filename.
Files backups cannot be restored from this screen
A .zip files backup has to be downloaded and extracted manually into place. Only database backups restore automatically.
Backing up one school
There are also per-school backups, for when a single school needs its data — because it is leaving, or because someone deleted something that only affects them.
That means you can restore one school without rolling every other school back, and you can extract a single school from a full backup.
Download backups off the server
A backup on the same server is not a backup
If the server dies, is suspended, or the hosting account is closed, your backups die with it. This is the single most common way people lose everything while having a backup system that worked perfectly.
Download a copy regularly and keep it somewhere else — your computer, cloud storage, anywhere not on that server.
Test a restore before you need one
Once, on a spare install or a fresh database, take a backup and restore it. Ten minutes, and it is the only way to know your backups are real.
An untested backup is a guess.
Common problems
| What you see | Cause |
|---|---|
| No backups appear despite a saved schedule | The cron job is not running |
| Backups stop after a while | Disk full — check storage, lower keep days, download and delete old ones |
| Restore fails partway | Use the pre-restore file named in the error to get back |
| Files backup says nothing to back up | Media is on cloud storage — use the provider's versioning |
| Restore finishes but the site looks stale | Caches are cleared automatically; if not, clear them from Server Health |