Tworzenie kopii zapasowych baz danych PostgreSQL/MySQL w chmurze
Wprowadzenie
Tworzenie kopii zapasowych baz danych jest jedną z najważniejszych procedur zapewniających bezpieczeństwo i niezawodność stron internetowych oraz aplikacji. Utrata danych może wynikać z wielu przyczyn: awarii serwera, błędu administratora, problemów z aktualizacją, złośliwego oprogramowania lub po prostu ludzkiego błędu. Regularne tworzenie kopii zapasowych pozwala na szybkie przywrócenie projektu bez utraty danych.
W niniejszym przewodniku wyjaśniono, jak wykonać kopię zapasową baz danych PostgreSQL i MySQL, jak przechowywać kopie zapasowe na zdalnym serwerze z systemem Linux przy użyciu rsync lub scp oraz jak przesłać je do magazynu w chmurze za pomocą rclone.
Kopia zapasowa PostgreSQL
PostgreSQL udostępnia standardowe narzędzie pg_dump, które pozwala utworzyć pełną kopię bazy danych w postaci pliku SQL.
Przykład tworzenia kopii zapasowej:
pg_dump -U myuser -h localhost mydatabase > /backup/mydatabase_$(date +%F).sql
Objaśnienie parametrów:
-U myuser— nazwa użytkownika bazy danych-h localhost— adres serwera (można pominąć, jeśli jest to serwer lokalny)mydatabase— nazwa bazy danych/backup/...— ścieżka docelowa$(date +%F)— dodaje bieżącą datę do nazwy pliku
Aby zaoszczędzić miejsce, należy natychmiast skompresować kopię zapasową:
pg_dump -U myuser mydatabase | gzip > /backup/mydatabase_$(date +%F).sql.gz
Aby wykonać kopię zapasową wszystkich baz danych na serwerze:
pg_dumpall -U myuser | gzip > /backup/postgres_all_$(date +%F).sql.gz
Kopia zapasowa MySQL
W przypadku MySQL i MariaDB należy użyć narzędzia mysqldump.
Przykład tworzenia kopii zapasowej pojedynczej bazy danych:
mysqldump -u myuser -p mydatabase > /backup/mydatabase_$(date +%F).sql
Po uruchomieniu tego polecenia system poprosi o podanie hasła użytkownika.
Aby wykonać kopię zapasową wszystkich baz danych:
mysqldump -u myuser -p --all-databases | gzip > /backup/mysql_all_$(date +%F).sql.gz
Aby uwzględnić procedury przechowywane i wyzwalacze, dodaj opcje --routines --triggers.
Kopia zapasowa w CloudBox
CloudBox firmy INTROSERV to rozwiązanie do przechowywania danych w chmurze obsługujące wiele protokołów połączeń (w tym rsync, scp, rsync przez SSH, WebDAV). Łatwość obsługi CloudBox znacznie upraszcza zadania związane z przesyłaniem, zarządzaniem i pobieraniem danych.
Można z niego korzystać jako zdalnej lokalizacji do przechowywania kopii zapasowych baz danych. Poniżej znajdują się szczegóły konfiguracji oraz przykłady skryptów.
Krok 1. Uzyskanie dostępu do CloudBox
Zamów jeden z dostępnych planów CloudBox na naszej stronie internetowej — introserv.com
Po dokonaniu płatności usługa staje się dostępna w ciągu kilku minut. Po aktywacji usługi otrzymasz dane połączeniowe:
- adres serwera (
box#####.introserv.cloud) - nazwa użytkownika (
box#####) i hasło
Krok 2. Połączenie i synchronizacja za pomocą rsync lub scp
Korzystanie z rsync (zalecane):
rsync -avz -e "ssh -p 22" /backup/ user@cloudbox-server:/path_to_cloudbackups/
Gdzie:
user— nazwa użytkownika CloudBoxcloudbox-server— adres połączenia/path_to_cloudbackups/— ścieżka w CloudBox
W celu zautomatyzowania operacji zaleca się skonfigurowanie kluczy SSH:
- Wygeneruj klucz publiczny:
ssh-keygen -t rsa - Skopiuj zawartość utworzonego pliku klucza publicznego, np.
/root/.ssh/id_rsa.pub, do schowka. - Przejdź do sekcji „Profil” (najedź kursorem na ikonę użytkownika w prawym górnym rogu), dodaj zawartość klucza do pola „Klucze publiczne” i zapisz ustawienia.


Po wykonaniu tych czynności program rsync będzie działał bez monitów o hasło, co jest wygodne w przypadku zadań cron.
Alternatywa — scp:
scp /backup/mysql_mydatabase.sql.gz user@cloudbox-server:/path_to_cloudbackups/
Krok 3. Połączenie i synchronizacja za pomocą rclone
Jeśli chcesz używać rclone do komunikacji z CloudBox, skonfiguruj go w następujący sposób:
- Zainstaluj rclone:
sudo apt install rclone - Rozpocznij konfigurację:
rclone config
Podczas konfiguracji wybierz:
n— aby utworzyć nową nazwę zdalną- nazwę, np.
cloudbox - typ przechowywania — wybierz
sftplubssh - wprowadź adres serwera w formacie
box#####.introserv.cloud, nazwę użytkownika w formaciebox#####, port (w tym przypadku port SSH — domyślnie 22) oraz ścieżkę do katalogu - przeprowadź autoryzację (jeśli jest wymagana)
Sprawdź połączenie:
rclone ls cloudbox:/path_to_cloudbackups/
Skopiuj dane kopii zapasowej:
rclone copy /backup/ cloudbox:/db-backups/ --progress
Zsynchronizuj z usunięciem plików, których brakuje lokalnie:
rclone sync /backup/ cloudbox:/db-backups/ --progress
W razie potrzeby — zaszyfruj pliki przed przesłaniem:
rclone copy /backup/ cloudbox:/db-backups/ --progress --crypt
Krok 4. Przykład skryptu automatyzującego z wykorzystaniem CloudBox
Utwórz skrypt /usr/local/bin/db_backup_cloudbox.sh, na przykład:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # PostgreSQL pg_dump -U myuser mydatabase | gzip > $BACKUP_DIR/postgres_mydatabase.sql.gz # MySQL mysqldump -u myuser -p mydatabase | gzip > $BACKUP_DIR/mysql_mydatabase.sql.gz # Upload to CloudBox rsync -avz -e "ssh -p 22" $BACKUP_DIR/ user@cloudbox-server:/path_to_cloudbackups/$DATE/ # Upload to CloudBox (rclone option, uncomment if used) # rclone copy $BACKUP_DIR/ cloudbox:/db-backups/$DATE/ --progress # Remove backups older than 7 days find /backup/ -type f -mtime +7 -delete
Następnie dodaj zadanie cron (w przykładzie skrypt uruchamia się codziennie o 2:00 w nocy):
0 2 * * * /usr/local/bin/db_backup_cloudbox.sh
Ważne uwagi:
- Upewnij się, że połączenie z CloudBox jest stabilne, a przepustowość wystarczająca.
- Skonfiguruj monitorowanie: sprawdź, czy pliki są faktycznie kopiowane.
- Okresowo testuj przywracanie danych z kopii zapasowych CloudBox.
- W przypadku korzystania z danych poufnych — rozważ szyfrowanie kopii zapasowych.
Kopiowanie na zdalny serwer Linux za pośrednictwem SSH
Jeśli chcesz przechowywać kopie zapasowe nie tylko lokalnie, ale także na innym serwerze, użyj rsync lub scp.
Korzystanie z rsync (zalecane, ponieważ kopiuje tylko zmiany):
rsync -avz -e "ssh -p 22" /backup/ [email protected]:/remote_backups/
Objaśnienie parametrów:
user— nazwa użytkownika na serwerze zdalnymremote.server— adres IP lub nazwa domeny serwera zdalnego/remote_backups/— ścieżka do przechowywania kopii zapasowych
Aby program działał bez konieczności wprowadzania hasła, skonfiguruj klucze SSH:
# Generate SSH keys: ssh-keygen -t rsa # Copy key to remote server: ssh-copy-id [email protected]
Po wykonaniu tej czynności rsync będzie działać bez monitów o hasło, co jest wygodne w przypadku zadań cron.
Alternatywa dla programu rsync — użycie programu scp:
scp /backup/mysql_mydb.sql.gz [email protected]:/remote_backups/
Kopiowanie do pamięci w chmurze za pomocą rclone
Jeśli chcesz przechowywać kopie zapasowe w chmurze (Google Drive, Dropbox, Amazon S3 itp.), użyj rclone — uniwersalnego narzędzia do synchronizacji danych z różnymi usługami chmurowymi.
Instalacja:
sudo apt install rclone
Konfiguracja:
rclone config
Postępuj zgodnie z interaktywnymi instrukcjami konfiguracji:
- Wybierz
n, aby utworzyć nowe połączenie - Wprowadź nazwę, np.
„remote” - Wybierz typ pamięci (np.
s3,drive,dropbox) - Wprowadź klucze dostępu lub autoryzuj się za pomocą przeglądarki
Sprawdź połączenie:
rclone ls remote:path
Przykład przesyłania kopii zapasowych do chmury:
rclone copy /backup/ remote:db-backups/ --progress
Polecenie synchronizacji (usuwa pliki, których brakuje lokalnie):
rclone sync /backup/ remote:db-backups/ --progress
Przed przesłaniem plików można je również zaszyfrować:
rclone copy /backup/ remote:db-backups/ --progress --crypt
Bezpieczeństwo i kontrola
- Przechowuj kopie zapasowe w co najmniej dwóch lokalizacjach — lokalnie i zdalnie.
- Regularnie sprawdzaj, czy kopie zapasowe są tworzone i przesyłane pomyślnie.
- Przynajmniej raz w miesiącu przeprowadzaj testowe przywracanie danych.
- Jeśli korzystasz z chmur publicznych, szyfruj pliki zawierające dane wrażliwe:
gpg -c /backup/mysql_mydatabase.sql.gz - Upewnij się, że uprawnienia do katalogu
/backupsą prawidłowe, oraz zabezpiecz dane logowania do bazy danych.
Przywracanie z kopii zapasowej
PostgreSQL:
gunzip < backup.sql.gz | psql -U myuser -d mydatabase
MySQL:
gunzip < backup.sql.gz | mysql -u myuser -p mydatabase
Podsumowanie
Tworzenie kopii zapasowych baz danych PostgreSQL i MySQL to prosta, ale niezwykle ważna procedura. Nawet najbardziej niezawodna infrastruktura nie ochroni Cię przed błędami ludzkimi ani awariami technicznymi. Najlepszą strategią jest regularne, zautomatyzowane tworzenie kopii zapasowych przechowywanych na co najmniej jednym serwerze zewnętrznym oraz w chmurze, połączone z okresowymi testami przywracania danych.
Korzystając z kombinacji narzędzi pg_dump, mysqldump, rsync, rclone i cron, można zbudować niezawodny, w pełni zautomatyzowany system tworzenia kopii zapasowych bez konieczności korzystania z płatnego oprogramowania innych firm. To podejście jest łatwe do wdrożenia i nadaje się do wszystkich systemów Linux.