Automatyzacja backupów to jak automatyczne mycie zębów, tylko dla twojej bazy danych. Regularny proces robienia kopii zapasowych ratuje świat (czyli twoje dane) przed katastrofą. Nikt nie chce dostać o 3 w nocy wiadomości, że serwer padł, uświadamiając sobie, że ostatni backup był dwa tygodnie temu. Automatyzacja rozwiązuje ten problem: koniec z ryzykiem utraty danych przez czynnik ludzki.
Narzędzi do automatyzacji jest sporo, ale dziś pogadamy o dwóch najpopularniejszych:
cron— uniwersalny i dobrze znany planer zadań w Linuxie.pg_cron— rozszerzenie PostgreSQL, które pozwala odpalać zadania bezpośrednio przez sam serwer bazy danych.
Rozszerzenie pg_cron pod spodem korzysta z serwisu cron. Ten serwis jest dostępny tylko na Linuxie!
No to lecimy!
Instalacja pg_cron
pg_cron to rozszerzenie PostgreSQL, które pozwala ustawiać automatyczne zadania prosto w bazie. To wygodne, eleganckie i podnosi twój PostgreSQL do poziomu mini centrum operacyjnego.
Kroki instalacji:
- Upewnij się, że używasz PostgreSQL 10+, bo
pg_crondziała tylko na nowszych wersjach. Zainstaluj rozszerzenie przez menedżera pakietów twojego systemu. Dla Ubuntu na przykład:
sudo apt install postgresql-<version>-cronZamień
<version>na wersję PostgreSQL, którą masz zainstalowaną.Włącz rozszerzenie w konfiguracji PostgreSQL. Otwórz plik
postgresql.confi dodaj:shared_preload_libraries = 'pg_cron'Po co to?
pg_cronwymaga, żeby biblioteka ładowała się przy starcie PostgreSQL — to konieczne.Zrestartuj serwer PostgreSQL:
sudo systemctl restart postgresqlAktywuj rozszerzenie w swojej bazie danych:
CREATE EXTENSION pg_cron;
Na tym etapie pg_cron jest gotowy do działania!
Tworzenie zadania do automatycznego backupu
Największy bajer pg_cron to możliwość odpalania komend o określonej godzinie. Zróbmy zadanie do automatycznego odpalenia pg_dump.
Przykład:
SELECT cron.schedule(
'nocny_backup', -- nazwa zadania
'0 2 * * *', -- harmonogram (każdej nocy o 2)
$$pg_dump -U username -F c -f /backups/university_backup.dump university$$ -- komenda
);
Rozkładamy magię na czynniki pierwsze:
'nocny_backup'— to własna nazwa zadania, żebyś łatwo je rozpoznał.'0 2 * * *'— harmonogram w formacie cron: codziennie o 2:00.- Komenda w
$$ $$: odpalamypg_dumpżeby zrobić backup bazyuniversity.
Po utworzeniu zadania będzie się ono wykonywać zgodnie z harmonogramem!
Podgląd i usuwanie zadań pg_cron
Żeby zobaczyć wszystkie istniejące zadania:
SELECT * FROM cron.job;
Jeśli jakieś zadanie już nie jest potrzebne, możesz je usunąć tak:
SELECT cron.unschedule(job_id);
Zamień job_id na identyfikator zadania z powyższego zapytania.
Używanie cron do automatyzacji
Jeśli wolisz klasyczne linuxowe podejście do automatyzacji albo pg_cron z jakiegoś powodu nie jest dostępny, pomoże ci wszechmocny cron.
Tworzenie zadania przez cron
Najpierw upewnij się, że cron jest zainstalowany i działa:
sudo systemctl enable cron
sudo systemctl start cron
Teraz dodaj zadanie do robienia backupu. Otwórz edytor do ustawiania zadań cron:
crontab -e
Dodaj linię:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university
Ta magiczna linijka zrobi to:
- O 2 w nocy każdego dnia (
0 2 * * *) zrobi backup bazyuniversity. - Wszystkie backupy będą zapisane do pliku
/backups/university_backup.dump.
Po zapisaniu pliku crontab zaplanowane zadanie zacznie się wykonywać.
Logi z cron
Czasem warto wiedzieć, co poszło nie tak. Upewnij się, że wyjście komend jest zapisywane do pliku logów do analizy. Dodaj do komendy przekierowanie wyjścia:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university >> /var/log/backup.log 2>&1
Teraz wszystko, co się wydarzy podczas zadania, będzie zapisane do pliku /var/log/backup.log.
Porównanie pg_cron i cron
No dobra, mamy dwa mocne narzędzia. Jak wybrać odpowiednie?
pg_cronto świetny wybór, jeśli chcesz ustawiać harmonogram i zarządzać zadaniami bezpośrednio przez PostgreSQL. To wygodne, nie musisz wychodzić z bazy i łatwo skalować zadania.cronjest bardziej uniwersalny. Możesz go używać nie tylko do PostgreSQL, ale też do automatyzacji innych rzeczy.
| Cecha | pg_cron | cron |
|---|---|---|
| Łatwość integracji | Wbudowany w PostgreSQL, ale wymaga rozszerzenia | Działa dla wszystkich procesów |
| Instalacja | Wymaga instalacji rozszerzenia | Wbudowany w większość systemów Linux |
| Logi | Przechowywane w PostgreSQL (tabela cron.job_run_details) |
Zapisywane do logów systemowych (zwykle /var/log/syslog) |
| Elastyczność | Wykonuje tylko SQL w PostgreSQL | Może odpalać dowolne komendy, skrypty i binarki |
Sprawdzanie działania zadań
Żeby sprawdzić, czy backup działa, możesz odpalić komendę cron ręcznie:
pg_dump -U username -F c -f /backups/university_backup.dump university
Warto też sprawdzić, czy pliki backupów są w podanym katalogu, ich rozmiar i czas ostatniego utworzenia. Na przykład:
ls -lh /backups/
Regularnie sprawdzaj logi i upewnij się, że zadania działają poprawnie.
Prosta ochrona przed typowymi błędami
Błąd nr 1: "Zapomniałem ustawić uprawnienia!"
Jeśli użytkownik, pod którym działa cron, nie ma uprawnień do odpalenia pg_dump, zadania nie będą działać. Upewnij się, że użytkownik ma dostęp do bazy.
Błąd nr 2: "Plik poszedł nie tam!"
Zawsze podawaj pełną ścieżkę do plików i komend. cron nie zna twojego środowiska — pełna ścieżka to podstawa: pg_dump -> /usr/bin/pg_dump.
Błąd nr 3: "Gdzie są moje logi?"
Nie zapominaj przekierować wyjścia komendy do pliku logów. Bez tego nie dowiesz się, co poszło nie tak.
Na tym etapie jesteś gotowy na automatyczne backupy swojej bazy danych. Teraz, nawet jeśli serwer nagle pójdzie na urlop, twoje dane będą bezpieczne!
GO TO FULL VERSION