- 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
6.8 KiB
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
chmod +x /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
2. Opsæt MariaDB credentials
Redigér .env filen:
nano /mnt/HC_Volume_103713257/tilbudgivern/backend/.env
Tilføj disse variabler:
# Database Backup Configuration
DB_USER=root
DB_PASSWORD=your_password_here
DB_HOST=localhost
Sikkerhed: Sikre at .env filen har korrekte tilladelser:
chmod 600 /mnt/HC_Volume_103713257/tilbudgivern/backend/.env
3. Opsæt crontab
Åbn crontab editor:
sudo crontab -e
Tilføj denne linje for daglig backup kl. 02:00 (midt om natten):
# 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:000 */6 * * *- Hver 6. time0 0 * * 0- Hver søndag kl. 00:00 (ugentlig)
4. Opsæt logrotate (valgfrit men anbefalet)
For at rotere logfilerne automatisk:
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:
source /mnt/HC_Volume_103713257/tilbudgivern/backend/.env && /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
Se backup-status
Se liste over backups:
ls -lh /mnt/HC_Volume_103713257/tilbudgivern/backups/
Se backup-logfiler
Se sidste log entries:
tail -50 /mnt/HC_Volume_103713257/tilbudgivern/logs/backups/backup.log
Se alle logs:
cat /mnt/HC_Volume_103713257/tilbudgivern/logs/backups/backup.log
Check crontab
Se nuværende crontab:
sudo crontab -l
Test crontab (uden at vente)
Kør backupen manuelt for at teste:
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:
sudo apt-get install mysql-client
Problem: "Permission denied"
Løsning: Sørg for execute-tilladelser:
chmod +x /mnt/HC_Volume_103713257/tilbudgivern/scripts/backup-databases.sh
Problem: Crontab kører ikke
Løsning: Check crontab logs:
sudo tail -50 /var/log/syslog | grep CRON
Problem: "Database connection refused"
Løsning: Check at MariaDB er tilgængelig:
mysql -u root -p -h localhost -e "SHOW DATABASES;"
Eller uden password:
mysql -u root -h localhost -e "SHOW DATABASES;"
Monitoring
Setup email notifications (valgfrit)
Redigér .env og tilføj:
BACKUP_EMAIL=admin@example.com
Redigér backup-scriptet og tilføj på slutningen:
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
gunzip /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_YYYYMMDD_HHMMSS.sql.gz
2. Gendanner alle databaser
mysql -u root -p < /mnt/HC_Volume_103713257/tilbudgivern/backups/mariadb_all_databases_YYYYMMDD_HHMMSS.sql
3. (Valgfrit) Gendanner specifik database
# 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
- ✅ Gem
.envfilen sikkert (ikke i git) - ✅ Begræns tilladelser på backup-mappen:
chmod 700 /mnt/HC_Volume_103713257/tilbudgivern/backups/ - ✅ Brug dedikeret database-bruger med begrænsede rettigheder (valgfrit)
- ✅ Overvej at gemme backups på et separat lager (ekstern disk, cloud)
- ✅ Test restore-processen regelmæssigt
Afsluttende setup-checklist
- Backup-script har execute-tilladelser
.envhar 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