Backup serwera www na Linuksie
Serwer www na Linuksie np. LAMP Linux Apache MySQL PHP jest najpopularniejszym zestawem oprogramowanie do stworzenia platformy serwerowej pod strony www. Takie środowisko wymaga tworzenia kopii zapasowych w razie wystąpienia awarii. Metod jest kilka.
I ogólna przykładowa procedura tworzenia backupów serwera www na linuksie
- Backup plików - ścieżka to zwykle /var/www/folderstrony tar
- Backup bazy danych mysqldump
- Kopiowanie backupów na sieciowy serwer ftp i trzymanie 5 ostatnich backupów curl oraz find
- Stworzenie skryptu automatyzującego zadania .sh
- Stworzenie crona uruchamiającego skrypt crontab
- Jeśli serwer www jest zwirtualizowany to można wykonywać kopie całej maszyny
II Backup plików strony
Założenia: Backup całego folderu zawierającego stronę (jest to jakiś CMS). W linuksie zwykle jest to /var/www/ Archiwizowanie poleceniem Tar do folderu docelowego na razie na tym samym dysku. Dodatkowo zrzucenie wyników sukces lub błąd do odpowiednich plików z logami.
- Zarchwiwizowanie folderu /var/www/akademia_xxx do pliku akademia-xxx-files.tar.gz w folderze /var/www/akademia_xxx
tar cvfzP /home/administrator/backupy_akademia_xxx/akademia-xxx-files.tar.gz /var/www/akademia_xxx
- Do powyższego polecenia dodajemy logowanie do plików akademia-xxx-tar-log.log oraz akademia-xxx-tar-error.log
tar cvfzP /home/administrator/backupy_akademia_xxx/akademia-xxx-files.tar.gz /var/www/akademia_xxx > /home/administrator/backupy_akademia_xxx/log/akademia-xxx-tar-log.log 2> /home/administrator/backupy-akademia-xxx/log/akademia-xxx-tar-error.log
- W kolejnym kroku zmieniamy nazwę pliku poleceniem mv aby dodać do niej format daty i czasu. Potrzebujemy tego aby pliki miały różne nazwy inaczej ciągle nadpisywałby się jeden plik. Zatem dodajemy kod `date +%F_%H%M` dołączając go do wynikowej nazwy pliku z przodu.
mv /home/administrator/backupy_akademia_xxx/akademia-xxx-files.tar.gz /home/administrator/backupy_akademia_xxx/`date +%F_%H%M`_akademia-xxx-files.tar.gz
III Backup bazy danych
Założenia: Stworzenie pełnej kopii bazy danych strony na MySQL
- Na początek sprawdzamy nazwę bazy danych. Logujemy się do mysql i wydajemy polecenie SHOW DATABASES;
mysql -u root -p SHOW DATABASES;
- Teraz używając polecenia mysqldump stworzymy plik backupu całej bazy. Ogólna składnia jest następująca
mysqldump -hlocalhost -uroot -ppassword nazwabazy > database_backup.sql
- Teraz zmodyfikujemy składnię do naszego przykładu
mysqldump -hlocalhost -uroot -pmojehaslo akademia_xxx > /home/administrator/backupy_akademia_xxx/akademia-xxx-database.sql
- Tak jak w przypadku polecenia tar zmieniamy stworzone nazwy plików na unikatowe aby się nie nadpisywały - tym samym systemem z dodaniem formaty czasu i daty.
mv /home/administrator/backupy_akademia_xxx/akademia-xxx-database.sql /home/administrator/backupy_akademia_xxx/`date +%Y%m%d`_akademia-xxx-database.sql
IV Kopiowanie backupów na sieciowy serwer ftp
Założenia: kopiowanie stworzonych plików na zewnętrzną lokalizację sieciową. W tym przypadku jest to sieciowy dysk NAS z włączoną usługą FTP.
- Poleceniem curt -T wyślemy oba pliki .tar.gz oraz .sql na lokalny dysk sieciowy na serwer ftp. Najpierw plik tr.gz
curl -T /home/administrator/backupy_akademia_xxx/`date +%Y%m%d`_akademia-xxx-files.tar.gz ftp://admin:This email address is being protected from spambots. You need JavaScript enabled to view it./akademia-xxx-backup/
- Teraz plik z bazą danych.
curl -T /home/administrator/backupy_akademia_xxx/`date +%Y%m%d`_akademia-xxx-database.sql ftp://admin:This email address is being protected from spambots. You need JavaScript enabled to view it./akademia-xxx-backup/
- Polecenie find z odpowiednimi parametrami spowoduje zachowanie ostatnich pięciu plików backupu w lokalizacji źródłowej więc kopiować się będzie zawsze ostatnich 5 najnowszych. Jako, że crone (o czym poniżej) jest ustawiony na wykonanie skryptu 2 razy na dobę plików będzie 20 - po 10 z .sql i 10 tar.gz)
find /home/administrator/backupy_akademia_xxx -type f -mtime +5 -delete
V Stworzenie skryptu automatyzującego zadania
Założenia: Chcemy aby wszystkie powyższe zadania wykonywały się automatycznie. Skrypt przed uruchamianiem z crona należy dokładnie przetestować.
- Tworzymy plik np. make-akademia.backup.sh i edytujemy go na edytorem nano
- Przykładowy skrypt dla tego konkretnego przypadku będzie wyglądał tak
tar cvfz /home/administrator/backupy_akademia_xxx/akademia-xxx-files.tar.gz /var/www/akademia_xxx mv /home/administrator/backupy_akademia_xxx/akademia-xxx-files.tar.gz /home/administrator/backupy_akademia_xxx/`date +%Y%m%d`_akademia-xxx-files.tar.gz mysqldump -hlocalhost -uroot -ppassword akademia_xxx > /home/administrator/backupy_akademia_xxx/akademia-xxx-database.sql mv /home/administrator/backupy_akademia_xxx/akademia-xxx-database.sql /home/administrator/backupy_akademia_xxx/`date +%Y%m%d`_akademia-xxx-database.sql curl -T /home/administrator/backupy_akademia_xxx/`date +%Y%m%d`_akademia-xxx-files.tar.gz ftp://admin:This email address is being protected from spambots. You need JavaScript enabled to view it./akademia-xxx-backup/ curl -T /home/administrator/backupy_akademia_xxx/`date +%Y%m%d`_akademia-xxx-database.sql ftp://admin:This email address is being protected from spambots. You need JavaScript enabled to view it./akademia-xxx-backup/ find /home/administrator/backupy_akademia_xxx -type f -mtime +5 -delete
VI Stworzenie crona uruchamiającego skrypt
- W ustawieniu crona bardzo pomocne będzie narzędzie online Crontab Guru https://crontab.guru/
- Uruchamiamy narzędzie crontab z uprawnieniami administratora (użytkownika, który ma uprawnienia do uruchamiania crona) sudo crontab -e i dodajemy odpowienie wpisy. W tym przypadku crone będzie uruchamiał skrypt make-akademia-backup.sh dwa razy na dobę o godzinie 00:00 i o 12:00
- Sprawdzenie poprawności wykonywania backupów. Jak widać stworzone na serwerze www pliki kopii strony i bazy prawidłowo zostały przekopiowane na dysk sieciowy do foldery FTP.
VII Kopia całej wirtualnej maszyny
- O wykonywaniu eksportu całej maszyny wirtualnej pisaliśmy w tym artykule: Skrypt eksportu maszyn Hyper-V