Hostxpeed
Login Get Started →
Server Management

How to Test Server Backup Integrity

5 min read
22 views
Jun 10, 2026

Prerequisites

Before testing backup integrity, make sure you have:

  • SSH access to your VPS
  • Existing backups (from Article 48)
  • Sufficient disk space for test restore

Step 1: Test File Backup Integrity (Tar/Gzip)

Connect to your VPS:

ssh hxroot@YOUR_SERVER_IP -p 22

Test tar archive:

tar -tzf /backup/website_20260429.tar.gz > /dev/null
if [ $? -eq 0 ]; then
    echo "Backup is valid"
else
    echo "Backup is corrupted"
fi

Step 2: Test Database SQL Backup

Check if SQL file contains valid data:

gunzip -c /backup/mysql/all_databases_20260429.sql.gz | head -100 | grep "CREATE DATABASE"

Check for errors in SQL file:

gunzip -c /backup/mysql/all_databases_20260429.sql.gz | mysql --force --silent --batch -e "SELECT 1" >/dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "SQL backup appears valid"
else
    echo "SQL backup has errors"
fi

Step 3: Test Restore to a Temporary Database

Create test database:

mysql -e "CREATE DATABASE test_restore"

Restore backup into test database:

gunzip -c /backup/mysql/all_databases_20260429.sql.gz | mysql test_restore

Verify:

mysql -e "SHOW TABLES FROM test_restore"

Drop test database after verification:

mysql -e "DROP DATABASE test_restore"

Step 4: Automated Integrity Check Script

sudo nano /usr/local/bin/verify-backups.sh
#!/bin/bash
BACKUP_DIR="/backup"
LOG_FILE="/var/log/backup-verify.log"
date >> $LOG_FILE

# Check if backup files exist
LATEST_FILE=$(ls -t $BACKUP_DIR/all_databases_*.sql.gz 2>/dev/null | head -1)
if [ -z "$LATEST_FILE" ]; then
    echo "ERROR: No backup files found!" >> $LOG_FILE
    exit 1
fi

# Test integrity
if gunzip -t "$LATEST_FILE" 2>/dev/null; then
    echo "OK: $LATEST_FILE is valid" >> $LOG_FILE
else
    echo "FAILED: $LATEST_FILE is corrupted" >> $LOG_FILE
    echo "Backup verification failed" | mail -s "Backup Corrupted" admin@example.com
fi

Make executable and schedule:

chmod +x /usr/local/bin/verify-backups.sh
echo "0 8 * * * /usr/local/bin/verify-backups.sh" | sudo crontab -

Step 5: Check Backup File Size (Sudden Change Indicates Issues)

LATEST_SIZE=$(stat -c%s "$LATEST_FILE")
YESTERDAY_SIZE=$(stat -c%s $(ls -t $BACKUP_DIR/*.sql.gz | head -2 | tail -1))
DIFF=$((LATEST_SIZE - YESTERDAY_SIZE))
if [ $DIFF -lt -10000 ] || [ $DIFF -gt 10000 ]; then
    echo "WARNING: Backup size changed significantly" >> $LOG_FILE
fi

✅ Backup integrity verified. Regular testing ensures you can actually restore when needed.

Was this article helpful?