Every Fast Hive VPS plan includes daily backup, with nightly images kept off-server plus manual snapshots you take before risky changes. That is a strong safety net - but a disk image is a blunt instrument, and it is not the whole answer. This guide explains what each layer protects against, what it does not, and how to build a routine you can actually restore from.

Three layers, three different jobs
  • Nightly images (automatic, off-server) - the server dies, or you break it beyond repair.
  • Manual snapshots (before changes) - an upgrade goes wrong and you want the previous state back in minutes.
  • Your own dumps (files and database) - you need one table, or last Tuesday's uploads, without rolling back the whole machine.
The third layer is the one people skip, and the one they most often need.

Why images alone are not enough

Restoring a disk image takes the entire server back to a point in time. That is exactly right when the server is unrecoverable. It is a poor fit for the far more common situations:

  • A bad migration corrupted one table - a full restore would also discard every order taken since.
  • Someone deleted a directory of uploads - you need those files, not yesterday's operating system.
  • You want to move the site to a different server - an image of a 100 GB disk is an awkward way to carry a 2 GB site.
  • You want to check the backup is good - verifying an image means actually restoring it somewhere.

Application-level dumps solve all four, and they are small enough to keep several generations of.

Backing up databases

# One database
mysqldump --single-transaction --quick --routines --triggers \
  -u backup -p mysite | gzip > /var/backups/mysite-$(date +%F).sql.gz

# Everything
mysqldump --single-transaction --quick --all-databases \
  -u backup -p | gzip > /var/backups/all-$(date +%F).sql.gz

# PostgreSQL
pg_dump -Fc mysite > /var/backups/mysite-$(date +%F).dump

--single-transaction matters: it takes a consistent snapshot without locking the tables, so the site keeps working while the dump runs.

Do not put the password on the command line. Anyone running ps can read it, and it lands in your shell history. Create ~/.my.cnf with chmod 600 instead:
[client]
user=backup
password=your-password

Backing up files

# Web root and key configuration
tar -czf /var/backups/site-$(date +%F).tar.gz \
    /var/www /etc/nginx /etc/letsencrypt

# Or mirror to another machine
rsync -az --delete /var/www/ backup@elsewhere:/backups/www/

Worth including beyond the obvious: /etc/nginx, /etc/letsencrypt, crontabs (crontab -l), and a list of installed packages. Those are what turn "I have the data" into "I can rebuild this server".

# Debian/Ubuntu
dpkg --get-selections > /var/backups/packages.txt
# AlmaLinux/Rocky
rpm -qa > /var/backups/packages.txt

Getting backups off the server

A backup stored only on the server it protects is not a backup. The nightly images are already held off-server; your own dumps are not, until you move them.

# Pull from a machine you control (preferred - the VPS holds no
# credentials for the backup destination)
rsync -az vpsuser@your.vps.ip:/var/backups/ /local/backups/vps/
Pull, do not push, where you can. If the VPS holds write credentials to your backup store, anyone who compromises the VPS can delete the backups too - which is precisely what ransomware does. A backup host that reaches in and pulls keeps that door shut.

Automating it

Put the commands in a script, make it executable, and schedule it:

sudo crontab -e

# Nightly at 03:17 - avoid the top of the hour
17 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# Delete local copies older than 14 days
30 4 * * * find /var/backups -name "*.gz" -mtime +14 -delete

The second line is not optional. A backup job with no retention policy fills the disk, and a full disk takes the site down - a backup that causes the outage it was meant to protect against.

Check it is actually running

ls -lh /var/backups/ | tail
tail -20 /var/log/backup.log

A silent cron job that has failed for three months looks exactly like one that is working. Check the file dates monthly.

Restoring

A database

gunzip < /var/backups/mysite-2026-08-20.sql.gz | mysql -u root -p mysite

Files

# Look inside first
tar -tzf /var/backups/site-2026-08-20.tar.gz | head

# Extract one path, not the whole archive
tar -xzf /var/backups/site-2026-08-20.tar.gz -C /tmp/restore var/www/example.com

Extract to a temporary directory and inspect before overwriting anything live. Restoring straight over a working site is how a recoverable problem becomes two problems.

A whole server

Restore the nightly image or a snapshot from the client area. Everything written since that point is lost, so copy off anything current you still need first.

Test a restore, twice a year

This is the step that separates a backup strategy from a backup hope. Deploy a temporary VPS - hourly billing makes this cost very little - restore into it, and confirm the site actually runs. Then destroy it.

What this catches: dumps that were empty, archives missing a directory, a database user that no longer exists, a certificate that was never included, and instructions that only made sense to the person who wrote them.

Troubleshooting

Symptom Cause and fix
Backup file is a few hundred bytes The dump failed and only wrote an error. Check the log - usually wrong credentials or missing privileges.
Disk filled up overnight No retention policy. Add the find -mtime +14 -delete job.
Restored database is missing recent rows The dump predates them. This is why nightly is a floor, not a target, for a busy site.
Site restored but shows a database error The database user was not recreated. Users live outside the individual database dump - recreate and re-grant.
HTTPS broken after restore /etc/letsencrypt was not in the archive. Re-run certbot - and add it to the backup.
Cron backup stopped silently Output was discarded with 2>&1 to /dev/null. Log to a file instead so failures leave evidence.
Backups deleted along with the server in an attack They were reachable from the VPS. Switch to a pull model, and rely on the off-server nightly images.

Frequently asked questions

Is the included daily backup enough on its own?

For "the server is gone", yes - nightly images are kept off-server. For "restore one table from Tuesday", no. Add your own dumps.

How long are nightly images kept?

Retention is finite, so the sooner you notice a problem the more options exist. Ask Technical Support immediately rather than after the weekend.

Does a snapshot pause my server?

Snapshots are quick and generally non-disruptive. For a database, stopping the service or taking a dump first gives a cleaner, guaranteed-consistent copy.

How often should I back up?

Ask what you can afford to lose. A brochure site is fine on nightly. A shop taking orders hourly should dump the database far more often - the interval is your worst-case data loss.

Can Fast Hive restore a nightly image for me?

Yes. Open a ticket with Technical Support naming the server and the date and time you want. Say explicitly whether current data may be overwritten.

What happens to backups if I cancel the VPS?

They go with the service. Take a full copy off-platform before cancelling - there is no recovery afterwards.

Lost data on a VPS? Stop writing to the server - further changes can overwrite what is still recoverable - and open a ticket with Technical Support at My Support Tickets straight away. Give the server IP, roughly when the data was last correct, and exactly what is missing. Engineers are on call 24/7.
Was this answer helpful? 0 Users Found This Useful (0 Votes)

Powered by WHMCompleteSolution