| Typ | Opis | Zalety | Wady |
|---|---|---|---|
| Pełny (full) | Kompletna kopia całej bazy | Proste przywracanie | Duży rozmiar, długi czas |
| Przyrostowy (incremental) | Tylko zmiany od ostatniego backupu (dowolnego) | Mały rozmiar, szybki | Przywracanie wymaga wszystkich backupów po kolei |
| Różnicowy (differential) | Zmiany od ostatniego pełnego backupu | Kompromis: mniejszy niż full, łatwiejsze przywracanie niż incremental | Rośnie z czasem |
# Backup z opcjami dla InnoDB (produkcyjny) mysqldump -u root -p \ --single-transaction \ # spójny snapshot bez blokady tabel (InnoDB) --routines \ # dołącz procedury i funkcje --triggers \ # dołącz wyzwalacze --events \ # dołącz zaplanowane zdarzenia --hex-blob \ # dane binarne jako HEX (bezpieczniejsze) sklep > backup_$(date +%Y%m%d_%H%M%S).sql # Backup z kompresją gzip mysqldump -u root -p --single-transaction sklep | \ gzip > backup_sklep_$(date +%Y%m%d).sql.gz # Backup zdalnego serwera mysqldump -u root -p -h 192.168.1.100 sklep > backup_remote.sql # Weryfikacja pliku backup (sprawdź rozmiar i pierwsze linie) ls -lh backup_sklep.sql head -20 backup_sklep.sql
--single-transaction jest kluczowe dla tabel InnoDB — umożliwia spójny backup bez blokowania tabel (transakcja READ UNCOMMITTED nie jest potrzebna). Bez tej opcji mysqldump blokuje tabele podczas exportu.
# Skrypt backup_db.sh #!/bin/bash BACKUP_DIR="/var/backups/mysql" DATE=$(date +%Y%m%d_%H%M%S) DB_NAME="sklep" DB_USER="backup_user" DB_PASS="HasloBackup123" mkdir -p "$BACKUP_DIR" mysqldump -u "$DB_USER" -p"$DB_PASS" \ --single-transaction \ --routines \ --triggers \ "$DB_NAME" | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz" # Usuń backupy starsze niż 30 dni find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete echo "Backup zakończony: ${DB_NAME}_${DATE}.sql.gz" # Wpis w crontab (crontab -e): # Codziennie o 2:00 w nocy 0 2 * * * /scripts/backup_db.sh >> /var/log/backup.log 2>&1 # Co tydzień (niedziela 3:00) pełny backup z innymi opcjami 0 3 * * 0 /scripts/full_backup.sh >> /var/log/backup.log 2>&1
minuta godzina dzień-miesiąca miesiąc dzień-tygodnia polecenie. Gwiazdka * oznacza "każdy/a". 0 2 * * * = codziennie o 2:00.
# Sprawdź plik backup ls -lh backup_sklep.sql.gz # rozmiar > 0 gunzip -t backup_sklep.sql.gz # test integralności zcat backup_sklep.sql.gz | tail -5 # końcowe linie (powinny zawierać "Dump completed") # Test przywrócenia na serwerze testowym mysql -u root -p -e "CREATE DATABASE sklep_test;" mysql -u root -p sklep_test < backup_sklep.sql mysql -u root -p sklep_test -e "SELECT COUNT(*) FROM klienci;" # Porównaj liczbę tabel mysql -u root -p sklep -e "SHOW TABLES;" | wc -l mysql -u root -p sklep_test -e "SHOW TABLES;" | wc -l
Co oznacza opcja --single-transaction w poleceniu mysqldump?
Uzupełnij brakujące pola w wpisie cron dla backupu codziennie o godzinie 3:00:
___ ___ * * * /scripts/backup_db.sh
--single-transaction = spójny backup InnoDB bez blokowania tabel--routines --triggers --events = dołącz kod SQL poza tabelami0 2 * * * = codziennie o 2:00