Kopia zapasowa bazy danych: PostgreSQL, MySQL, rsync, rclone, CloudBox
Kopia zapasowa bazy danych jest jednym z najważniejszych procedur zapewniających bezpieczeństwo i niezawodność stron internetowych oraz aplikacji. Utrata danych może nastąpić z wielu powodów: awaria serwera, błąd administratora, problemy z aktualizacją, złośliwe oprogramowanie lub po prostu błąd ludzki. Regularne kopie zapasowe pozwalają szybko przywrócić projekt bez utraty danych.
Ten przewodnik wyjaśnia, jak tworzyć kopie zapasowe baz danych PostgreSQL i MySQL, jak przechowywać kopie zapasowe na zdalnym serwerze Linux za pomocą rsync lub scp oraz jak przesyłać je do chmury za pomocą rclone.
Kopia zapasowa PostgreSQL
PostgreSQL udostępnia standardowe narzędzie pg_dump, które pozwala na utworzenie pełnej kopii bazy danych jako pliku SQL.
Przykład tworzenia kopii zapasowej:
pg_dump -U myuser -h localhost mydatabase > /backup/mydatabase_$(date +%F).sql
Wyjaśnienie parametrów:
- -U myuser — nazwa użytkownika bazy danych;
- -h localhost — adres serwera (można pominąć, jeśli lokalny);
- mydatabase — nazwa bazy danych;
- /backup/... — ścieżka docelowa;
- $(date +%F) — dodaje bieżącą datę do nazwy pliku.
Aby zaoszczędzić miejsce, skompresuj kopię zapasową natychmiast:
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
Dla MySQL i MariaDB użyj narzędzia mysqldump.
Przykład kopii zapasowej pojedynczej bazy danych:
mysqldump -u myuser -p mydatabase > /backup/mydatabase_$(date +%F).sql
Po uruchomieniu tego polecenia system poprosi o hasło 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 składowane i wyzwalacze, dodaj opcje --routines --triggers.
Kopia zapasowa do CloudBox
CloudBox od INTROSERV to rozwiązanie do przechowywania 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 przesyłania, zarządzania i odzyskiwania danych.
Możesz używać go jako zdalnej lokalizacji do przechowywania kopii zapasowych bazy danych. Poniżej znajdują się szczegóły konfiguracji i przykłady skryptów.
Krok 1. Uzyskanie dostępu do CloudBox
Zamów jeden z dostępnych planów CloudBox na naszej stronie — https://introserv.com/solutions/cloudbox/
Po dokonaniu płatności usługa staje się dostępna w ciągu kilku minut. Po aktywacji usługi otrzymasz dane do połączenia:
- adres serwera (box$$$$$.introserv.cloud)
- nazwa użytkownika (box$$$$$) i hasło
Krok 2. Połączenie i synchronizacja za pomocą rsync lub scp
Używając rsync (zalecane):
rsync -avz -e "ssh -p 22" /backup/ user@cloudbox-server:/path_to_cloudbackups/
Gdzie:
- user — nazwa użytkownika CloudBox;
- cloudbox-server — adres połączenia;
- /path_to_cloudbackups/ — ścieżka na CloudBox.
Dla zautomatyzowanej pracy zaleca się skonfigurowanie kluczy SSH.
1) Wygeneruj klucz publiczny:
ssh-keygen -t rsa
2) Skopiuj zawartość utworzonego pliku klucza publicznego, np. /root/.ssh/id_rsa.pub do schowka.
3) Przejdź do sekcji "Profil" (najedź na ikonę użytkownika w prawym górnym rogu), dodaj zawartość klucza do pola "Klucze publiczne" i zapisz ustawienia.


Po tym rsync będzie działać bez monitów o hasło, co jest wygodne dla 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 interakcji z CloudBox, skonfiguruj go w następujący sposób.
1) Zainstaluj rclone:
sudo apt install rclone
2) Rozpocznij konfigurację:
rclone config
Podczas konfiguracji wybierz:
- n — aby utworzyć nowe zdalne połączenie;
- nazwa, np.
cloudbox; - typ przechowywania — wybierz
sftplubssh; - wprowadź adres serwera w formacie
box$$$$$.introserv.cloud, nazwę użytkownika w formaciebox$$$$$, port (SSH — domyślnie 22), ścieżkę katalogu; - przeprowadź autoryzację (jeśli wymagana).
Przetestuj połączenie:
rclone ls cloudbox:/path_to_cloudbackups/
Skopiuj dane kopii zapasowej:
rclone copy /backup/ cloudbox:/db-backups/ --progress
Synchronizuj z usunięciem plików brakujących lokalnie:
rclone sync /backup/ cloudbox:/db-backups/ --progress
Jeśli potrzebne — zaszyfruj pliki przed przesłaniem:
rclone copy /backup/ cloudbox:/db-backups/ --progress --crypt
Krok 4. Przykład skryptu automatyzacji z CloudBox
Utwórz skrypt /usr/local/bin/db_backup_cloudbox.sh:
#!/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 (skrypt uruchamia się codziennie o 2:00):
0 2 * * * /usr/local/bin/db_backup_cloudbox.sh
Ważne uwagi:
- Upewnij się, że połączenie z CloudBox jest stabilne i przepustowość jest wystarczająca.
- Skonfiguruj monitorowanie: sprawdź, czy pliki są faktycznie kopiowane.
- Okresowo testuj przywracanie z kopii zapasowych CloudBox.
- W przypadku używania poufnych danych — rozważ szyfrowanie kopii zapasowych.
Kopiowanie na zdalny serwer Linux przez SSH
Jeśli chcesz przechowywać kopie zapasowe nie tylko lokalnie, ale także na innym serwerze, użyj rsync lub scp.
Używając rsync (zalecane, ponieważ kopiuje tylko zmiany):
rsync -avz -e "ssh -p 22" /backup/ [email protected]:/remote_backups/
Wyjaśnienie parametrów:
- user — nazwa użytkownika na zdalnym serwerze;
- remote.server — adres IP lub nazwa domeny zdalnego serwera;
- /remote_backups/ — ścieżka do przechowywania kopii zapasowych.
Aby działać bez wprowadzania hasła, skonfiguruj klucze SSH.
Wygeneruj klucze SSH:
ssh-keygen -t rsa
Skopiuj klucz na zdalny serwer:
ssh-copy-id [email protected]
Po tym rsync będzie działać bez monitów o hasło, co jest wygodne dla zadań cron.
Alternatywa — użycie scp:
scp /backup/mysql_mydb.sql.gz [email protected]:/remote_backups/
Kopiowanie do chmury za pomocą rclone
Jeśli potrzebujesz 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 krokami konfiguracji:
- Wybierz n aby utworzyć nowe połączenie;
- Wprowadź nazwę, np.
remote; - Wybierz typ przechowywania (np.
s3,drive,dropbox); - Wprowadź klucze dostępu lub autoryzuj przez przeglądarkę.
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 brakujące lokalnie):
rclone sync /backup/ remote:db-backups/ --progress
Możesz także zaszyfrować pliki przed przesłaniem:
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.
- Przeprowadzaj testowe przywracanie co najmniej raz w miesiącu.
- Szyfruj pliki zawierające poufne dane, jeśli używasz publicznych chmur:
gpg -c /backup/mysql_mydatabase.sql.gz
- Zapewnij odpowiednie uprawnienia do plików dla
/backupi zabezpiecz swoje dane uwierzytelniające 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łędem ludzkim lub awarią techniczną. Najlepszą strategią są regularne, zautomatyzowane kopie zapasowe przechowywane na co najmniej jednym zewnętrznym serwerze i w chmurze, z okresowym testowaniem przywracania.
Używając kombinacji pg_dump, mysqldump, rsync, rclone i cron, możesz zbudować niezawodny, w pełni zautomatyzowany system kopii zapasowych bez żadnego płatnego oprogramowania firm trzecich. To podejście jest łatwe do wdrożenia i odpowiednie dla wszystkich systemów Linux.