Database Backup & Restore Guide
This guide covers database backup and restoration procedures for MultiWA Gateway.
PostgreSQL Backup
Method 1: Using Docker Compose
# Backup
docker compose exec postgres pg_dump -U multiwa multiwa_gateway > backup_$(date +%Y%m%d_%H%M%S).sql
# Restore
cat backup_20260202_120000.sql | docker compose exec -T postgres psql -U multiwa multiwa_gateway
Method 2: Using pg_dump Directly
# Full backup with compression
pg_dump -h localhost -U multiwa -d multiwa_gateway -F c -f backup.dump
# Restore
pg_restore -h localhost -U multiwa -d multiwa_gateway backup.dump
Method 3: Automated Daily Backup Script
Create /scripts/backup.sh:
#!/bin/bash
BACKUP_DIR="/backups"
DATE=$(date +%Y%m%d_%H%M%S)
FILENAME="multiwa_backup_${DATE}.sql.gz"
# Create backup
docker compose exec -T postgres pg_dump -U multiwa multiwa_gateway | gzip > "${BACKUP_DIR}/${FILENAME}"
# Keep only last 7 days
find ${BACKUP_DIR} -name "multiwa_backup_*.sql.gz" -mtime +7 -delete
echo "Backup completed: ${FILENAME}"
Add to crontab for daily backup at 2 AM:
0 2 * * * /path/to/scripts/backup.sh >> /var/log/multiwa-backup.log 2>&1
Redis Backup
Redis data is used for caching and job queues. For persistent data:
# Trigger RDB snapshot
docker compose exec redis redis-cli BGSAVE
# Copy dump file
docker compose cp redis:/data/dump.rdb ./redis_backup.rdb
Session Data Backup
WhatsApp session data is stored in /data/sessions:
# Backup sessions
tar -czf sessions_backup.tar.gz -C /data sessions/
# Restore sessions
tar -xzf sessions_backup.tar.gz -C /data
Full Backup Strategy
For production, implement a 3-2-1 backup strategy:
- 3 copies of data
- 2 different storage media
- 1 offsite backup
Recommended Tools
- pgBackRest - PostgreSQL backup with incremental support
- Restic - Encrypted backups to cloud storage (S3, MinIO)
- Velero - Kubernetes-native backup (for K8s deployments)
Disaster Recovery
- Stop services:
docker compose down - Restore PostgreSQL: Use pg_restore or psql
- Restore Redis RDB: Copy dump.rdb to Redis data volume
- Restore sessions: Extract session backup to sessions directory
- Start services:
docker compose up -d - Verify: Check logs and test connectivity