V tomto návode si ukážeme postup obnovy webu alebo aplikácie zo zálohy, ktorá je dostupná na virtuálnom serveri. Stránky si najčastejšie ukladajú údaje do súborov a do databázy – popíšeme si preto ako obnoviť zvlášť súbory a ako obnoviť databázu.
PREDTÝM NEŽ ZAČNEME
Požiadavky na server
- Návod je písaný pre aktuálne distribúcie OS Ubuntu LTS (18.04, 20.04, 22.04)
- Na server je potrebné mať prístup cez protokol SSH, s root užívateľom (alebo sudo privilégiá)
- K serveru je potrebné mať zakúpenú službu Zálohovanie servera
Ako prvý krok skontrolujeme prístup k zálohám. Zálohy sa nachádzajú mimo Vášho servera, aby sa nezarátavali do diskovej kapacity a aby boli dostupné aj v prípade, že by sa s Vaším serverom niečo stalo. K Vášmu serveru su pripojené cez sieť, tzv. mountom do priečinka /backups. Pre jednoduchosť si to môžete predstaviť ako USB kľúč zapojený do Vášho počítača, ktorý ale môžete odpojiť a bezpečne odložiť, či pripojiť do iného zariadenia. Mount skontrolujeme príkazom:
root@vps:~# mount | grep /backup
backup8.websupport.sk:/ssd_backups/vps-cust/abcdefgh-1234-5678-ijkl-mnoprstuvxyz/ on /backups type nfs
OBNOVA
Obnova súborov
Na obnovu súborov použijeme program rsync, ktorý je pri kopírovaní dát veľmi efektívny. V prípade že sa na Vašom VPS nenachádza, inštalácia je jednoduchá:
root@vps:~# apt-get install rsync -y
Samotné kopírovanie súborov spustíme príkazom nižšie. Pre rsync príkaz určíme prepínače na kompresiu (rýchlejší prenos dát -a), na detailnejší priebeh kopírovania (verbose -v), a na prepísanie súborov tými zo zálohy (teda aby sme obnovili všetko zo zálohy –delete).
root@vps:~# rsync -av --delete <zdroj> <ciel>
Zdroj bude v našom prípade záloha, z ktorej ideme súbory obnovovať, cieľ zasa miesto, kam obnovujeme. Za predpokladu, že obnovujeme celý adresár /data/web/domena.tld/web z dátumu 2.4.2023, odporúčame použiť nasledovný príkaz:
root@vps:~# rsync -av --delete /backups/.zfs/snapshot/2023-04-02-13:40:23/root/data/web/domena.tld/web/ /data/web/domena.tld/web
Samotný dátum, ako aj cestu k dátam môžete samozrejme dynamicky meniť podľa potreby. Zálohy sú dostupné po dobu posledných 14 dní, vylistovať si ich viete pomocou príkazu ls, ktorý použijete na priečinok /backups/.zfs/snapshot:
root@vps:/backups/.zfs/snapshot# ls -al
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-22-13:21:34
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-23-13:20:48
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-24-13:22:08
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-25-13:32:22
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-26-13:24:22
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-27-13:30:08
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-28-13:30:53
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-29-13:34:27
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-30-13:35:19
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-03-31-13:35:10
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-04-01-13:39:30
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-04-02-13:40:23
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-04-03-13:44:52
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-04-04-13:48:38
drwxr-xr-x 4 root root 4 Aug 25 2022 2023-04-05-13:49:40
Obnova databázy
Kompletná obnova webu je väčšinou podmienená aj obnovou databázy, ktorá je k nemu pripojená. Buďte ale opatrní, nakoľko databáza môže obsahovať dáta, o ktoré nechcete prísť (napr. v prípade eshopov sú to objednávky). Pri takejto obnove prídete o všetko, čo bolo do databázy zapísané po vytvorení zálohy.
Tento krok odporúčame spraviť z rovnakého času, z akého boli obnovené súbory. Dodatočné zálohy databáz môžeme nájsť vylistovaním daného priečinku (teda napríklad pre dátum 2.4.2023):
root@vps:/backups/.zfs/snapshot/2023-04-02-13:40:23/mysql# ls -al
total 39
drwxr-xr-x 4 root root 4 Apr 2 13:40 .
drwxr-xr-x 4 root root 4 Aug 25 2022 ..
drwxr-xr-x 2 root root 7 Apr 1 13:30 2023-04-01_13-30
drwxr-xr-x 2 root root 7 Apr 2 13:31 2023-04-02_13-30
Nakoľko chceme obnoviť databázu čo najbližšie k dátumu obnovy súborov, vyberieme priečinok 2023-04-02_13-30:
(Managed) root@inlibri:/backups/.zfs/snapshot/2023-04-02-13:40:23/mysql/2023-04-02_13-30# ls -al
-rw-r--r-- 1 root root 59913 Apr 2 13:31 databaza.sql.gz
-rw-r--r-- 1 root root 32571502 Apr 2 13:31 databaza_dev.sql.gz
-rw-r--r-- 1 root root 382999 Apr 2 13:31 databaza_test.sql.gz
Následne môžeme obnoviť konkrétnu databázu z dumpu – teda .sql súboru, ktorý obsahuje dáta z databázy. Do príkazu zadávame meno databázy, meno používateľa a heslo používateľa – v prípade root prístupu však nemusia byť tieto údaje potrebné.
Najprv zálohu databázy odporúčame skopírovať napríklad do home priečinku:
root@vps:~# cp /backups/.zfs/snapshot/2023-04-02-13:40:23/mysql/2023-04-02_13-30/databaza.sql.gz ~/databaza.sql.gz
Najjednoduchší spôsob obnovy je kombinácia príkazu zcat na prečítanie komprimovaného súboru, a následne mysql na nahratie obsahu do databázy:
root@vps:~# zcat databaza.sql.gz | mysql -u user_name -p -h localhost db_name
user_name = užívateľ, s ktorým sa pripájate do databázy
db_name = názov databázy
Po spustení príkazu bude potrebné ešte zadať heslo pre databázového užívateľa (z hľadiska bezpečnosti ho neodporúčame vkladať priamo do príkazu). Ak máte root užívateľa bez nutnosti zadávania hesla, bude stačiť aj takáto forma príkazu:
root@vps:~# zcat ~/databaza.sql.gz | mysql db_name
Druhá možnosť je dump najprv dekomprimovať príkazom gunzip, čím vznikne súbor databaza.sql, a potom ho nahrať do databázy:
root@vps:~# gunzip ~/databaza.sql.gz
root@vps:~# mysql -u user_name -p -h localhost db_name < ~/databaza.sql
Hotovo, dáta sú obnovené. Ak sa web po obnove nenachádza v želanom stave, skúste postup zopakovať so staršou zálohou.