Prerequisites
Before scheduling backups, make sure you have:
- SSH access to your VPS
- Root or sudo privileges
- Sufficient storage for backups (local or remote)
Step 1: Create Backup Script
Connect to your VPS:
ssh hxroot@YOUR_SERVER_IP -p 22
sudo nano /usr/local/bin/backup.sh
Example backup script:
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7
# Create backup directory if not exists
mkdir -p $BACKUP_DIR
# Backup website files
tar -czf $BACKUP_DIR/website_$DATE.tar.gz /var/www/html/
# Backup MySQL databases
mysqldump --all-databases > $BACKUP_DIR/mysql_$DATE.sql
# Remove backups older than KEEP_DAYS
find $BACKUP_DIR -type f -mtime +$KEEP_DAYS -delete
echo "Backup completed at $(date)" >> /var/log/backup.log
Make executable:
sudo chmod +x /usr/local/bin/backup.sh
Step 2: Test the Script
sudo /usr/local/bin/backup.sh
Check output:
ls -la /backup/
cat /var/log/backup.log
Step 3: Schedule with Cron
sudo crontab -e
Run daily at 2:00 AM:
0 2 * * * /usr/local/bin/backup.sh
Or weekly on Sunday at 3:00 AM:
0 3 * * 0 /usr/local/bin/backup.sh
Step 4: Remote Backup (Rsync to Another Server)
Add to backup script:
# Sync to remote backup server
rsync -avz $BACKUP_DIR/ user@remote-backup:/backups/$(hostname)/
Set up SSH keys for passwordless rsync:
ssh-keygen -t rsa -b 4096
ssh-copy-id user@remote-backup
Step 5: Email Notification on Backup Failure
Modify script:
if [ $? -eq 0 ]; then
echo "Backup successful" | mail -s "Backup OK" admin@example.com
else
echo "Backup failed!" | mail -s "Backup FAILED" admin@example.com
fi
Incremental Backups with rsync
#!/bin/bash
BACKUP_BASE="/backup"
DATE=$(date +%Y%m%d)
LATEST="$BACKUP_BASE/current"
SNAPSHOT="$BACKUP_BASE/snapshot_$DATE"
# Hard link-based incremental backup (like time machine)
rsync -avz --delete --link-dest=$LATEST /var/www/ $SNAPSHOT
rm -f $LATEST
ln -s $SNAPSHOT $LATEST
Using Hostxpeed Backup Features
Your Hostxpeed VPS may include automated backup options. Check your service details page for snapshot or backup features.
Restore from Backup
To restore website files:
tar -xzf /backup/website_20260428.tar.gz -C /
To restore MySQL:
mysql < /backup/mysql_20260428.sql
✅ Automatic backups have been scheduled. Verify regularly that backups are being created successfully.