Files
tilbudgivern/docs/DATABASE_BACKUP_SETUP.md
T
alexpolo1 9d1b1917a7 Add comprehensive database backup setup and scripts
- Created DATABASE_BACKUP_SETUP.md for detailed backup instructions
- Implemented backup-databases.sh for automated database backups
- Added logrotate configuration for managing backup logs
- Developed setup scripts for user-specific backup configurations
- Included error handling and logging in backup processes
- Established cron job setup for automated backups
- Provided examples and troubleshooting tips in documentation
2025-11-16 21:12:29 +00:00

276 lines
6.8 KiB
Markdown

# Database Backup Setup Guide
## Oversigt
Dette setup opretter daglige backups af alle MariaDB databaser med automatisk rotation efter 7 dage.
**Features:**
- ✅ Dumper alle databaser hver dag
- ✅ Komprimerer backups med gzip (typisk 10-20% af original størrelse)
- ✅ Roterer automatisk - holder altid kun 7 dages backups
- ✅ Detaljeret logging med timestamps
- ✅ Fejlhåndtering og validering
- ✅ Logrotate integration for logfiler
---
## Installation
### 1. Giv execute-tilladelse til backup-scriptet
```bash
chmod +x /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
```
### 2. Opsæt MariaDB credentials
Redigér `.env` filen:
```bash
nano /mnt/HC_Volume_103713257/tilbudgivern/backend/.env
```
Tilføj disse variabler:
```env
# Database Backup Configuration
DB_USER=root
DB_PASSWORD=your_password_here
DB_HOST=localhost
```
**Sikkerhed:** Sikre at `.env` filen har korrekte tilladelser:
```bash
chmod 600 /mnt/HC_Volume_103713257/tilbudgivern/backend/.env
```
### 3. Opsæt crontab
Åbn crontab editor:
```bash
sudo crontab -e
```
Tilføj denne linje for daglig backup kl. 02:00 (midt om natten):
```cron
# Daily MariaDB backup at 2:00 AM
0 2 * * * source /mnt/HC_Volume_103713257/tilbudgivern/backend/.env && /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
```
**Alternative tidspunkter:**
- `0 0 * * *` - Hver dag kl. 00:00 (midnat)
- `0 2 * * *` - Hver dag kl. 02:00 (anbefalet)
- `0 3 * * *` - Hver dag kl. 03:00
- `0 */6 * * *` - Hver 6. time
- `0 0 * * 0` - Hver søndag kl. 00:00 (ugentlig)
### 4. Opsæt logrotate (valgfrit men anbefalet)
For at rotere logfilerne automatisk:
```bash
sudo cp /mnt/HC_Volume_103713257/tilbudgivern/infra/logrotate-backups.conf /etc/logrotate.d/tilbudgivern-backups
sudo chmod 644 /etc/logrotate.d/tilbudgivern-backups
```
---
## Brug
### Manual backup
Kør scriptet manuelt når som helst:
```bash
source /mnt/HC_Volume_103713257/tilbudgivern/backend/.env && /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
```
### Se backup-status
Se liste over backups:
```bash
ls -lh /mnt/HC_Volume_103713257/tilbudgivern/backups/
```
### Se backup-logfiler
Se sidste log entries:
```bash
tail -50 /mnt/HC_Volume_103713257/tilbudgivern/logs/backups/backup.log
```
Se alle logs:
```bash
cat /mnt/HC_Volume_103713257/tilbudgivern/logs/backups/backup.log
```
### Check crontab
Se nuværende crontab:
```bash
sudo crontab -l
```
### Test crontab (uden at vente)
Kør backupen manuelt for at teste:
```bash
source /mnt/HC_Volume_103713257/tilbudgivern/backend/.env && /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
```
---
## Direktiver
### Backup-lokation
```
/mnt/HC_Volume_103713257/tilbudgivern/backups/
```
Format: `mariadb_all_databases_YYYYMMDD_HHMMSS.sql.gz`
### Log-lokation
```
/mnt/HC_Volume_103713257/tilbudgivern/logs/backups/backup.log
```
### RetentionPolicy
- **Antal backups:** 7 (en for hver dag)
- **Auto-rotation:** Når mere end 7 backups exists, slettes den ældste
- **Kompressionformat:** gzip (.gz)
- **Log-rotation:** 30 dages logs (via logrotate)
---
## Fejlfinding
### Problem: "mysqldump command not found"
**Løsning:** Installér MySQL client:
```bash
sudo apt-get install mysql-client
```
### Problem: "Permission denied"
**Løsning:** Sørg for execute-tilladelser:
```bash
chmod +x /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
```
### Problem: Crontab kører ikke
**Løsning:** Check crontab logs:
```bash
sudo tail -50 /var/log/syslog | grep CRON
```
### Problem: "Database connection refused"
**Løsning:** Check at MariaDB er tilgængelig:
```bash
mysql -u root -p -h localhost -e "SHOW DATABASES;"
```
Eller uden password:
```bash
mysql -u root -h localhost -e "SHOW DATABASES;"
```
---
## Monitoring
### Setup email notifications (valgfrit)
Redigér .env og tilføj:
```env
BACKUP_EMAIL=[email protected]
```
Redigér backup-scriptet og tilføj på slutningen:
```bash
if [ $? -eq 0 ]; then
echo "Backup successful" | mail -s "Database Backup Success" "$BACKUP_EMAIL"
else
echo "Backup failed" | mail -s "Database Backup FAILED" "$BACKUP_EMAIL"
fi
```
---
## Eksempel Output
```
[2025-11-16 02:00:00] ==========================================
[2025-11-16 02:00:00] Starting database backup process
[2025-11-16 02:00:00] ==========================================
[2025-11-16 02:00:15] Dumping all databases from localhost...
[2025-11-16 02:00:45] Database dump completed successfully. Size: 245M
[2025-11-16 02:00:50] Backup compressed successfully. Size: 32M
[2025-11-16 02:00:50] Backup saved to: /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_20251116_020000.sql.gz
[2025-11-16 02:00:50] Rotating backups (keeping 7 days)...
[2025-11-16 02:00:50] Current backups in system:
[2025-11-16 02:00:50] /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_20251116_020000.sql.gz (32M)
[2025-11-16 02:00:50] /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_20251115_020000.sql.gz (31M)
[2025-11-16 02:00:50] /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_20251114_020000.sql.gz (33M)
[2025-11-16 02:00:50] ==========================================
[2025-11-16 02:00:50] Backup process completed successfully
[2025-11-16 02:00:50] ==========================================
```
---
## Backup Recovery
Hvis du skal gendanne fra backup:
### 1. Dekomprimér backup
```bash
gunzip /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_YYYYMMDD_HHMMSS.sql.gz
```
### 2. Gendanner alle databaser
```bash
mysql -u root -p < /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_YYYYMMDD_HHMMSS.sql
```
### 3. (Valgfrit) Gendanner specifik database
```bash
# Ekstrahér kun en database fra backup
sed -n '/^CREATE DATABASE.*tilbudgivern/,/^CREATE DATABASE/p' mariadb_all_databases_YYYYMMDD_HHMMSS.sql | mysql -u root -p
```
---
## Security Best Practices
1. ✅ Gem `.env` filen sikkert (ikke i git)
2. ✅ Begræns tilladelser på backup-mappen:
```bash
chmod 700 /mnt/HC_Volume_103713257/tilbudgivern/backups/
```
3. ✅ Brug dedikeret database-bruger med begrænsede rettigheder (valgfrit)
4. ✅ Overvej at gemme backups på et separat lager (ekstern disk, cloud)
5. ✅ Test restore-processen regelmæssigt
---
## Afsluttende setup-checklist
- [ ] Backup-script har execute-tilladelser
- [ ] `.env` har DB_USER, DB_PASSWORD, DB_HOST
- [ ] Crontab er opsættet med ønsket tidspunkt
- [ ] Logrotate config er installeret (valgfrit)
- [ ] Manual test er kørt uden fejl
- [ ] Backup-mappen eksisterer og er writable
- [ ] Du kan se backups i mappen efter første kørsel
---
## Support
For spørgsmål eller fejl, se:
- Logfiler: `/mnt/HC_Volume_103713257/tilbudgivern/logs/backups/backup.log`
- Cron logs: `sudo tail -50 /var/log/syslog | grep CRON`