Self-hosted email marketing with full source code. Pay once, own forever. Get AcelleMail — $74 →

Automated Database Backups

Set up a daily automated MySQL backup using a simple shell script and cron. Includes rotation to keep disk usage in check.

Why Automated Backups Matter

A corrupted database or accidental deletion can wipe out your entire subscriber list and campaign history. Automated daily backups take minutes to set up and can save hours of recovery work.

The Backup Script

Create /home/vbrand/scripts/backup-db.sh:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/home/vbrand/backups/db"
DB_NAME="acellemail"
DB_USER="vbrand"
DB_PASS="yourpassword"
KEEP_DAYS=14

mkdir -p "\$BACKUP_DIR"

mysqldump -u"\$DB_USER" -p"\$DB_PASS" "\$DB_NAME" \
  --single-transaction --quick --lock-tables=false \
  | gzip > "\$BACKUP_DIR/\$DB_NAME_\$DATE.sql.gz"

# Remove backups older than KEEP_DAYS
find "\$BACKUP_DIR" -name "*.sql.gz" -mtime +\$KEEP_DAYS -delete

echo "Backup complete: \$BACKUP_DIR/\$DB_NAME_\$DATE.sql.gz"
chmod +x /home/vbrand/scripts/backup-db.sh

Schedule with Cron

crontab -e

Add:

0 2 * * * /home/vbrand/scripts/backup-db.sh >> /home/vbrand/logs/backup.log 2>&1

This runs at 2:00 AM daily.

Offsite Backup

For safety, copy backups to an S3 bucket:

aws s3 sync /home/vbrand/backups/db s3://your-bucket/acellemail-backups/

Restoring from Backup

gunzip < /home/vbrand/backups/db/acellemail_20260301_020000.sql.gz \
  | mysql -uvbrand -p acellemail

More in Server Management