- 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
276 lines
6.8 KiB
Markdown
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`
|