Files
tilbudgivern/docs/DATABASE_BACKUP_SETUP.md
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

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: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:

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

  1. Gem .env filen sikkert (ikke i git)
  2. Begræns tilladelser på backup-mappen:
    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