Backupy baz danych

1. Wprowadzenie

Backup (kopia zapasowa) to proces tworzenia zapasowej kopii danych w celu ich odtworzenia w przypadku:

  • awarii systemu lub sprzętu,
  • przypadkowego usunięcia danych,
  • ataku hakerskiego (np. ransomware),
  • błędu aplikacji lub administratora.

W przypadku MySQL kopie zapasowe są kluczowe, ponieważ baza danych często przechowuje dane krytyczne dla działania aplikacji (np. dane klientów, zamówień, transakcji).


2. Rodzaje backupów w MySQL

a) Backup logiczny

  • Polega na eksportowaniu struktury i/lub zawartości bazy w postaci pliku tekstowego (np. .sql).
  • Narzędzie: mysqldump.

Cechy:

* łatwe do wykonania,
* przenośne (można odtworzyć na innym serwerze lub innym systemie DBMS obsługującym SQL),
* wolniejsze przy dużych bazach,
* większy rozmiar kopii w porównaniu do backupów fizycznych.

b) Backup fizyczny

  • Polega na kopiowaniu fizycznych plików bazy danych (np. pliki .ibd, .frm, .myd, .myi).
  • Narzędzia: mysqlhotcopy, Percona XtraBackup, mysqlbackup (Oracle MySQL Enterprise).

Cechy:

* szybki,
* przywracanie danych jest bardzo efektywne,
* zależny od wersji serwera i systemu operacyjnego.

c) Backup pełny (Full Backup)

  • Kopia całej bazy danych.
  • Zapewnia pełne bezpieczeństwo, ale zajmuje dużo miejsca i trwa dłużej.

d) Backup przyrostowy (Incremental Backup)

  • Kopiowane są tylko zmiany od ostatniego backupu (pełnego lub przyrostowego).
  • Narzędzie: Percona XtraBackup.
  • Oszczędność miejsca i czasu.

e) Backup różnicowy (Differential Backup)

  • Kopiowane są zmiany od ostatniego backupu pełnego.
  • Mniej miejsca niż backup pełny, ale więcej niż przyrostowy.

3. Narzędzia do backupu w MySQL

a) mysqldump

  • Standardowe narzędzie do wykonywania backupów logicznych.

Przykłady:

  • Backup całej bazy:
  • Backup wszystkich baz:
  • Backup tylko struktury (bez danych):

b) mysqlpump

  • Nowsze narzędzie (od MySQL 5.7), szybsze i wspierające równoległy eksport.
  • Przykład:

c) Percona XtraBackup

  • Popularne darmowe narzędzie do backupów fizycznych i przyrostowych.

Cechy:

* nie blokuje tabel podczas tworzenia backupu,
* wspiera duże bazy danych,
* idealne do systemów produkcyjnych.

d) Enterprise Backup (MySQL Enterprise Edition)

  • Rozwiązanie komercyjne od Oracle.
  • Obsługuje backupy pełne, różnicowe i przyrostowe, szyfrowanie i kompresję.

4. Strategie backupów

  • Pełny backup raz dziennie + backup przyrostowy co godzinę → minimalizacja utraty danych.
  • Backup różnicowy co kilka godzin + backup pełny raz na dobę → szybsze odtwarzanie niż przy przyrostowych.
  • Backup hybrydowy – połączenie różnych metod w zależności od krytyczności danych.

Przykład:

  • Pełny backup o północy,
  • Kopie przyrostowe co godzinę w ciągu dnia,
  • Kopia różnicowa w połowie dnia.

5. Dobre praktyki backupów w MySQL

  • Automatyzacja – korzystanie z cron jobów, skryptów lub narzędzi do planowania zadań.
  • Kopie zapasowe poza serwerem – przechowywanie backupów w lokalizacji zewnętrznej (np. chmura, inny serwer).
  • Testowanie odtwarzania – regularne sprawdzanie, czy backupy faktycznie można odtworzyć.
  • Szyfrowanie – zabezpieczenie backupów przed dostępem nieuprawnionych osób.
  • Rotacja backupów – ustalenie polityki przechowywania (np. kopie z ostatnich 30 dni, a starsze archiwizowane).
  • Kompresja – zmniejszenie rozmiaru plików kopii (gzip, xz).
  • Monitorowanie logów – sprawdzanie logów MySQL i logów backupów w poszukiwaniu błędów.

6. Odtwarzanie danych (Restore)

a) Z backupu logicznego (mysqldump)

b) Z backupu fizycznego

  • Zatrzymanie serwera MySQL,
  • Podmiana plików danych backupem,
  • Ponowne uruchomienie serwera.

c) Z użyciem Percona XtraBackup

  • Przygotowanie danych (--prepare),
  • Skopiowanie danych do katalogu MySQL,
  • Uruchomienie serwera.

7. Scenariusze użycia backupów w MySQL

  • Awaria serwera – odtworzenie danych z ostatniej kopii.
  • Atak ransomware – wykorzystanie backupu offline/chmurowego.
  • Testy i migracje – użycie backupów do odtworzenia środowiska testowego.
  • Przywracanie pojedynczej bazy/tabeli – przydatne, gdy usunięto dane tylko w jednej części systemu.