- Plan i model kopii zapasowych
- Cele: RPO, RTO i krytyczność
- Strategia 3-2-1 i retencja
- Polityka bezpieczeństwa i zgodność
- Rodzaje kopii: pełne, przyrostowe, różnicowe; logiczne vs fizyczne
- Przygotowanie środowiska i spójności danych
- Uprawnienia, zasoby, katalogi
- Spójność transakcyjna i integralność
- Szyfrowanie, klucze i tajemnice
- Środowisko testowe i proces odtwarzanie
- Procedury dla popularnych silników
- MySQL/MariaDB: narzędzia, dzienniki i przywracanie
- PostgreSQL: pg_dump, pg_basebackup i PITR
- Microsoft SQL Server: BACKUP DATABASE, logi i weryfikacja
- Oracle, SQLite, MongoDB – przykładowe ścieżki
- Automatyzacja, weryfikacja i monitoring
- Harmonogramy i orkiestracja
- Weryfikacja kopii i testy restore
- Rotacja, wersjonowanie i ekonomia magazynu
- Przechowywanie offsite i air-gapped
- Alerty, logi i metryki
- Dokumentacja i runbooki awaryjne
Solidna kopia zapasowa bazy danych to nie luksus, lecz element elementarnego bezpieczeństwa operacyjnego. Niezależnie od tego, czy zarządzasz małą aplikacją, czy krytycznym systemem finansowym, plan tworzenia kopii musi być przemyślany, powtarzalny i regularnie testowany. Poniższa instrukcja prowadzi od ustalenia celów, przez dobór narzędzi i konfigurację, aż po praktyczne procedury dla popularnych silników oraz wdrożenie harmonogramów i kontroli jakości kopii.
Plan i model kopii zapasowych
Cele: RPO, RTO i krytyczność
Zacznij od zdefiniowania parametrów odporności na incydenty:
- RPO – ile danych możesz maksymalnie utracić (np. 15 minut zmian). Skoreluj to z częstotliwością wykonywania kopii i archiwizacją dzienników transakcyjnych.
- RTO – jak szybko po awarii system musi wrócić do działania (np. 1 godzina). Wpływa to na miejsce przechowywania kopii, przepustowość i gotowość środowiska odtwarzania.
- Krytyczność – sklasyfikuj bazy (produkcyjne, testowe, archiwalne) i przypisz im priorytety oraz różne poziomy ochrony.
Te trzy elementy wyznaczą budżet, wybór technologii oraz szczegółowy proces tworzenia i weryfikacji kopii.
Strategia 3-2-1 i retencja
Zastosuj zasadę 3-2-1: minimum trzy kopie, na dwóch różnych nośnikach, z co najmniej jedną kopią poza lokalizacją (offsite). Dla wysokiej dostępności dołóż wariant 3-2-1-1-0 (jedna kopia offline/immutable i zero błędów w weryfikacji). Ustal politykę przechowywania:
- Krótki horyzont (np. 7–14 dni) na szybkie przywrócenia bieżących zmian.
- Średni horyzont (np. 30–90 dni) dla typowych potrzeb audytu i analizy.
- Długi horyzont (miesiące–lata) na cele regulacyjne lub podatkowe.
Pamiętaj o wersjonowaniu w chmurze i mechanizmach niezmienialności (object lock), aby zabezpieczyć się przed ransomware.
Polityka bezpieczeństwa i zgodność
Określ wymagania wynikające z norm (np. ISO 27001, SOC 2, RODO) i polityk korporacyjnych. Dla danych wrażliwych stosuj szyfrowanie w spoczynku (at rest) i w transferze (in transit), kontroluj klucze (KMS/HSM), minimalizuj dostęp (zasada najmniejszych uprawnień), loguj operacje oraz regularnie testuj procedury incydentowe i eskalacyjne.
Rodzaje kopii: pełne, przyrostowe, różnicowe; logiczne vs fizyczne
Wybierz technikę zgodną z profilem bazy i oknem serwisowym:
- Pełne – kompletne zrzuty stanu; wolniejsze, ale najprostsze do odtworzenia.
- Przyrostowe – zapisują tylko zmiany od ostatniej kopii (pełnej lub przyrostowej); oszczędzają miejsce i czas, lecz wymagają starannego łańcucha przywracania.
- Różnicowe – zapisują zmiany od ostatniej pełnej; kompromis między szybkością a złożonością odtwarzania.
Z perspektywy technicznej:
- Logiczne – eksport schematów i danych (np. polecenia narzędzi klienta). Zapewniają przenośność między wersjami, ale bywają wolniejsze i obciążają serwer.
- Fizyczne – kopie plików danych, dzienników, albo snapshot wolumenów. Bardzo szybkie, często wymagają zgodności wersji i dbałości o spójność zapisu.
Przygotowanie środowiska i spójności danych
Uprawnienia, zasoby, katalogi
Zapewnij odpowiednie konto techniczne do wykonywania kopii: niech ma dostęp tylko do niezbędnych zasobów (baza, dzienniki, katalogi). Przygotuj katalog docelowy, dysk o odpowiedniej przepustowości i pojemności, a także miejsce w repozytorium offsite (S3, Azure Blob, GCS, serwer SFTP). Sprawdź limit otwartych plików, ulimit, IOPS oraz dostępność narzędzi (wersje narzędzi muszą być kompatybilne z serwerem bazodanowym).
Spójność transakcyjna i integralność
Aby kopia była użyteczna, musi odzwierciedlać spójny stan transakcyjny. Wykorzystaj mechanizmy:
- Punkty kontrolne i logi transakcyjne (WAL, binlog, redo) do odzyskiwania do konkretnego punktu w czasie.
- Tryby hot backup lub konsystentne snapshoty storage: wykonuj kopię bez długiego zatrzymania aplikacji.
- Krótkie okna quiesce (zamrożenia zapisu) przy snapshotach plików, jeśli silnik wymaga synchronizacji danych na dysku.
Po wykonaniu kopii uruchom weryfikację: sumy kontrolne, kontrola nagłówków plików, szybkie uruchomienie bazy w środowisku testowym.
Szyfrowanie, klucze i tajemnice
Zabezpiecz dane w ruchu (TLS) i w spoczynku (szyfrowanie plików, EBS/SSE-KMS, Transparent Data Encryption). Zarządzaj kluczami w dedykowanym KMS, rotuj je zgodnie z polityką, a hasła przechowuj w managerach sekretów (np. HashiCorp Vault, AWS Secrets Manager). Zadbaj o szyfrowanie nazw plików lub katalogów, jeśli metadane są wrażliwe, oraz o procedury odzyskiwania kluczy na wypadek awarii KMS.
Środowisko testowe i proces odtwarzanie
Utwórz izolowane środowisko DR/QA do cyklicznych testów przywracania. Skrypt przywracania musi być tak samo dopracowany jak skrypt tworzenia kopii. Zapisz kolejność kroków, parametry startowe bazy, mapowanie ścieżek i uprawnień. Po przywróceniu wykonaj sanity-check: szybkie zapytania, liczność rekordów, kontrola indeksów i widoków materializowanych, a także test aplikacyjny z kluczowymi ścieżkami biznesowymi.
Procedury dla popularnych silników
MySQL/MariaDB: narzędzia, dzienniki i przywracanie
Scenariusz logiczny (mysqldump):
- Utwórz użytkownika do kopii z uprawnieniami SELECT, SHOW VIEW, LOCK TABLES, RELOAD (w zależności od parametrów).
- Wykonaj zrzut: mysqldump –single-transaction –routines –triggers –events –databases NAZWA –master-data=2 > data.sql. Opcja –single-transaction minimalizuje blokady w InnoDB.
- Skompresuj plik i przenieś go do repozytorium offsite. Zapisz sumę kontrolną (sha256sum).
- Odtwarzanie: mysql < data.sql, a następnie w razie potrzeby odtwórz binlogi do punktu w czasie (mysqlbinlog –start-datetime).
Scenariusz fizyczny (Percona XtraBackup/Backup):
- Wykonaj kopię pełną: xtrabackup –backup –target-dir=/backup/full-YYYYMMDD.
- Kopie przyrostowe: xtrabackup –backup –target-dir=/backup/inc-1 –incremental-basedir=/backup/full-YYYYMMDD.
- Przygotowanie (apply-log): xtrabackup –prepare –target-dir=/backup/full-YYYYMMDD, a następnie odtwarzaj przyrosty.
- Odtwarzanie: zatrzymaj usługę, podmień katalog datadir, ustaw właścicieli i uprawnienia, uruchom serwer, sprawdź dzienniki błędów.
Najlepsze praktyki: włącz binlog z właściwą rotacją, zapisuj metadane kopii (wersja serwera, parametry InnoDB, plany zapytań), testuj restore do oddzielnego instancjonowanego katalogu.
PostgreSQL: pg_dump, pg_basebackup i PITR
Scenariusz logiczny (pg_dump/pg_dumpall):
- Eksport pojedynczej bazy: pg_dump -Fc -f db.dump NAZWA_BAZY (format custom umożliwia selektywne przywracanie).
- Eksport całego klastra: pg_dumpall -g (obiekty globalne) oraz osobno pg_dump dla baz.
- Odtwarzanie: pg_restore -d NAZWA_BAZY -j 4 db.dump, a następnie odbuduj statystyki ANALYZE/VACUUM.
Scenariusz fizyczny (pg_basebackup + WAL):
- Włącz archiwizację WAL: w postgresql.conf ustaw archive_mode=on, archive_command oraz wal_level=replica.
- Wykonaj kopię bazową: pg_basebackup -D /backup/base -Ft -z -X stream -P -U repl_user.
- Do odzyskania w czasie (PITR) użyj recovery.signal i ustaw restore_command, ewentualnie recovery_target_time.
Najlepsze praktyki: monitoruj opóźnienie archiwizacji WAL, testuj PITR na odłączonej instancji, kontroluj zgodność rozszerzeń (np. PostGIS), używaj wal-g/wal-e do wysyłki WAL do chmury.
Microsoft SQL Server: BACKUP DATABASE, logi i weryfikacja
Plan: pełna kopia nocą, różnicowe w ciągu dnia, logi co kilka minut dla niskiego RPO. Przykłady operacji:
- BACKUP DATABASE Nazwa TO DISK=’E:backupsnazwa_full.bak’ WITH INIT, STATS=10;
- BACKUP DATABASE Nazwa TO DISK=’E:backupsnazwa_diff.bak’ WITH DIFFERENTIAL, STATS=10;
- BACKUP LOG Nazwa TO DISK=’E:backupsnazwa_log.trn’ WITH STATS=10;
- Weryfikacja: RESTORE VERIFYONLY FROM DISK=’E:backupsnazwa_full.bak’;
- Odtwarzanie do punktu: RESTORE DATABASE … WITH NORECOVERY, następnie RESTORE LOG … WITH STOPAT=’YYYY-MM-DD HH:MM’, i finalnie WITH RECOVERY.
Wykorzystuj VSS do spójnych snapshotów na Windows, a w środowiskach wirtualnych integruj z backupem hypervisora. Logi rotuj zgodnie z polityką i reindeksuj po dużych odtworzeniach.
Oracle, SQLite, MongoDB – przykładowe ścieżki
Oracle (RMAN):
- Pełne i przyrostowe: RMAN BACKUP DATABASE PLUS ARCHIVELOG; konfiguruj kanały i kompresję.
- Kontrola spójności: VALIDATE DATABASE, CROSSCHECK BACKUP, REPORT OBSOLETE według retencji.
- Odtwarzanie: RESTORE DATABASE, RECOVER DATABASE UNTIL TIME, a następnie OPEN RESETLOGS.
SQLite:
- Logika: sqlite3 db.sqlite „.backup 'db-YYYYMMDD.sqlite'”; lub użyj trybu WAL i kopiuj pliki po checkpoint.
- Fizyka: zatrzymaj zapisy, skopiuj plik bazy i -wal/-shm, sprawdź pragma integrity_check po przywróceniu.
MongoDB:
- mongodump/mongorestore dla logicznych zrzutów kolekcji; włącz kompresję i metadane indeksów.
- Fizyka: filesystem snapshot w replika sec, aby ograniczyć wpływ na primary; lub Cloud Manager/Atlas Backup.
- PITR: jeśli używasz oplog archiving, możliwe precyzyjne odtwarzanie w oknie czasu.
Automatyzacja, weryfikacja i monitoring
Harmonogramy i orkiestracja
Zaplanuj cykle według RPO/RTO, obciążenia i okien serwisowych. Narzędzia:
- Linux: cron, systemd timers – rozkładaj obciążenie (staggering), używaj lockfile, limituj równoległość.
- Windows: Task Scheduler – zadania z ograniczeniami czasu i retry.
- Pipeline CI/CD lub narzędzia backupowe (Veeam, Commvault, Restic, Borg, Velero dla K8s) – centralne polityki i raporty.
Każdy job powinien logować przebieg, rejestrować sumy kontrolne, rozmiary i czas trwania. Nie zapominaj o izolacji zasobów: dedykowane VPC/VNet, konta serwisowe i reguły firewall dla repozytorium offsite.
Weryfikacja kopii i testy restore
Nie zakładaj, że kopia działa, dopóki nie odtworzysz jej w praktyce. Wprowadź cykl weryfikacji:
- Automatyczna walidacja plików (checksumy, VERIFYONLY, pg_restore –list, mysql –help < dump dla szybkiego parsingu).
- Próbne odtworzenia według harmonogramu – np. co tydzień wyrywkowo, raz w miesiącu pełny scenariusz DR.
- Testy integralności danych: integrity_check w SQLite, DBCC CHECKDB w MSSQL, VACUUM/ANALYZE w Postgresie, sprawdzenie sum w tabelach kontrolnych.
Prowadź dziennik testów: data, użyta kopia, wynik, czas, napotkane błędy i poprawki w procedurach.
Rotacja, wersjonowanie i ekonomia magazynu
Stosuj rotacje typu GFS (grandfather-father-son): dzienne, tygodniowe, miesięczne, roczne. W chmurze włącz wersjonowanie obiektów i polityki lifecycle (przenoszenie do warstw tańszych: Glacier/Archive) po określonym czasie. Dokumentuj koszty i prognozuj wzrost danych, aby zapobiec niespodziewanym wydatkom oraz przekroczeniom limitów.
Przechowywanie offsite i air-gapped
Utrzymuj co najmniej jedną kopię odciętą logicznie od domeny produkcyjnej (immutable, WORM). Dla krytycznych systemów przewiduj okresowe kopie offline/air-gapped. Sprawdzaj odczytywalność nośników i odświeżaj je cyklicznie. Rozważ geograficzną redundancję i scenariusze braku regionu.
Alerty, logi i metryki
Integruj kopie z monitoringiem: metryki czasu, rozmiaru, przepustowości, liczby błędów, opóźnień w przesyle offsite. Wysyłaj alerty (Slack, e-mail, PagerDuty) na przekroczenie progów lub brak świeżej kopii. Analizuj trendy – wydłużające się okna kopii mogą sygnalizować fragmentację, brak IOPS lub rosnącą aktywność zapisu.
Dokumentacja i runbooki awaryjne
Przygotuj runbook: kto, co, w jakiej kolejności i z jakich narzędzi korzysta. Zawrzyj kontakty, konta rezerwowe, instrukcje odtworzenia infrastruktury (IaC), odzyskania kluczy KMS i dostępów, a także listę kontrolną po odtworzeniu (testy aplikacyjne, wskaźniki zgodności). Regularnie przeprowadzaj ćwiczenia DR na sucho i z rzeczywistym odtworzeniem.
Włącz w proces opcjonalne elementy zwiększające odporność: replikacja asynchroniczna/synchroniczna dla skrócenia okna utraty danych, kolejka dzienników (log shipping), a dla środowisk kontenerowych kopie wolumenów na poziomie CSI/Velero lub eksport danych przez narzędzia natywne.
Na koniec sprawdź, czy wszystkie założenia planu są spełnione: czy backup odpowiada wymaganiom biznesowym, czy harmonogram nie koliduje z szczytem ruchu, a także czy zespół potrafi bez wahania przeprowadzić procedurę przywracania. Jeśli pojawiają się rozbieżności, aktualizuj polityki, dopasuj parametry i powtórz testy. Dzięki temu utrzymasz realną gotowość, a nie jedynie deklaracje w dokumentacji.
Ustalona w ten sposób taktyka daje przewidywalne wyniki: skrócone okna niedostępności, łatwiejsze audyty, mniejsze ryzyko błędów ludzkich i spójny proces od planowania po realizację. Warto także cyklicznie rewidować RTO/RPO, aby zachować zgodność z ewolucją produktu i jego obciążeniem.
Dobrze prowadzony proces kopii zapasowych to współdziałanie ludzi, procedur i technologii: polityki dostępu i inspekcji, bezpiecznego składowania, rzetelnej weryfikacji, automatyzacji, a przede wszystkim gotowości do działań poawaryjnych. Dzięki temu każdy incydent staje się ćwiczeniem z realizacji planu, a nie improwizacją pod presją czasu.