Skip to main content

Backups & Maintenance

Backups & Maintenance

To ensure data integrity, automate daily MySQL database backups from the running db container.

Automated Backup Script (/var/scripts/nusaas_backup.sh)

#!/usr/bin/env bash
set -euo pipefail

BACKUP_DIR="/var/backups/nusaas"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/nusaas_db_$TIMESTAMP.sql"

mkdir -p "$BACKUP_DIR"

# Use credentials already injected into the MySQL container.
cd /opt/nusaas
docker compose exec -T db sh -c \
'mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' \
> "$BACKUP_FILE"

# Compress
gzip "$BACKUP_FILE"

# Delete backups older than 14 days
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +14 -delete

Database dumps do not include uploaded files. Back up the storage-data volume as well, and copy both backups to off-site storage. Test restoration regularly.

Cron Schedule Setup

sudo chmod +x /var/scripts/nusaas_backup.sh
sudo crontab -e
# Add the following line to run at midnight:
# 0 0 * * * /var/scripts/nusaas_backup.sh > /dev/null 2>&1

Everyday Maintenance Commands

Run these commands inside /opt/nusaas:

# Stream all container logs
docker compose logs -f

# Restart all stack services
docker compose restart

# Stop all containers (keeps volume data)
docker compose down

# Force pull latest images and restart
docker compose pull && docker compose up -d