Instrukcja backup PostgreSQL Dotyczy wersji:
Spis treści 1. Cel... 3 2. Konfiguracja... 3 2.1. Słownik pojęć... 3 2.2. Procedura... 4 3. Tworzenie... pełnej kopii zapasowej 8 4. Odzyskiwanie... danych z kopii zapasowej 9 2
1 Cel Mechanizm kopii przyrostowej zapewnia ciągłe (w czasie rzeczywistym) zabezpieczanie danych przed ich utratą pomiędzy momentami wykonania pełnej kopii zapasowej. Mechanizmy bazy danych na bieżąco archiwizują wszystkie zmiany w bazie danych do tzw. plików WAL i przesyłają je we wskazane miejsce, np. na zdalny serwer kopii zapasowej. Dzięki połączeniu informacji zapisanych w plikach WAL oraz ostatnio wykonanej pełnej kopii zapasowej, w przypadku awarii bazy danych (spowodowanej np. nagłym brakiem zasilania) lub utraty danych wskutek przypadkowego bądź celowego (wirus) działania, można odzyskać dane z ostatniej chwili przed wystąpieniem incydentu. Co ważne, proces ten, w odróżnieniu od procesu tworzenia pełnej kopii zapasowej, jest szybki (jest to niejako skutek uboczny funkcjonowania serwera bazy danych w tym trybie) i nie wymaga zatrzymywania serwera bazy danych. Jeśli pełna kopia zapasowa wykonywana jest w krótkich odstępach czasu, nie potrzeba także znacznych ilości wolnego miejsca na docelowym dysku nowa pełna kopia zapasowa zastąpi poprzednią, a także wszystkie pliki kopii przyrostowej (WAL). Uwaga: jeśli pełna kopia zapasowa wykonywana jest rzadko, pliki kopii przyrostowej mogą zająć relatywnie dużo miejsca na dysku. Pliki takie mają (domyślnie) 16MB i w trakcie pracy tworzy się ich spora liczba. 2 Konfiguracja 2.1 Słownik pojęć W niniejszym dokumencie używane będą następujące terminy: a. Katalog serwera katalog, w którym został zainstalowany serwer bazy danych PostgreSQL c:\program files\postgresql\9.2\ b. Katalog danych serwera podkatalog katalogu serwera noszący nazwę data c:\program files\postgresql\9.2\data Rozdział 1 - Cel 3
c. Katalog kopii przyrostowej katalog, do którego serwer bazy danych będzie zapisywał pliki kopii przyrostowej (WAL). Najlepiej, aby katalog ten znajdował się na innym fizycznie dysku niż serwer bazy danych. Katalog ten tworzy użytkownik zanim jeszcze serwer zostanie skonfigurowany do generowania kopii zapasowej! d:\backup\partial d. Katalog pełnej kopii zapasowej katalog, do którego zapisana zostanie pełna kopia zapasowa danych. Najlepiej, aby katalog ten znajdował się na innym fizycznie dysku niż serwer bazy danych. Katalog ten tworzy użytkownik zanim jeszcze serwer zostanie skonfigurowany do generowania kopii zapasowej! d:\backup\full 2.2 Procedura Aby móc skorzystać z mechanizmów kopii przyrostowej, należy najpierw odpowiednio skonfigurować serwer bazy danych. W tym celu przeprowadzić trzeba następujące kroki: 1. Upewnić się, że w jednym miejscu (katalogu) zgromadzone są następujące pliki: a. sed.exe b. 7za.exe c. FullBackup.bat d. ListServices.bat e. GetServiceData.bat f. RemoveData.bat g. Process_pg_tblspc.bat 2. Założyć katalogi dla częściowej i pełnej kopii zapasowej danych. W niniejszej dokumentacji dla przykładu katalogi te nazywać się będą odpowiednio: Rozdział 2 - Konfiguracja 4
a. D:\backup\partial dla kopii przyrostowej b. D:\backup\full dla pełnej kopii 3. Sprawdzić, jakie są dostępne serwery bazy danych w celu wyboru żądanego. Należy w tym celu uruchomić plik ListServices.bat. W rezultacie zostanie wyświetlona lista serwisów baz danych wraz z katalogami, w których zostały zainstalowane oraz z katalogami, w których przechowują swe dane. Przykładowy rezultat wywołania: 4. Nadać uprawnienia usłudze sieciowej do katalogu danych serwera cacls "[ścieżka_do_katalogu_danych]" /E /T /G "USŁUGA SIECIOWA":F cacls "C:/Program Files/PostgreSQL3/data" /E /T /G "USŁUGA SIECIOWA":F Uwaga: Nazwa użytkownika USŁUGA SIECIOWA zależy od wersji językowej Rozdział 2 - Konfiguracja 5
systemu operacyjnego. Przykładowo w wersji angielskiej nosi ona nazwę NETWORK SERVICE. 5. Następnie należy skonfigurować wybrany serwer. W tym celu w katalogu danych wybranego serwera należy znaleźć plik postgresql.conf i odpowiednio go zmodyfikować. Modyfikacji podlegać będą wpisy w postaci: Parametr = Wartość Prawdopodobnie wszystkie podane niżej wpisy będą poprzedzone znakiem # czyli będą wyłączone. Należy je włączyć poprzez usunięcie znaku # z początku linii 6. Oto lista wpisów, które należy odszukać i ich oczekiwana postać po zmianie: Wpis do odszukania Wpis po zmianie #max_wal_senders = 0 max_wal_senders = 1 #wal_level = minimal wal_level = archive #archive_mode = off archive_mode = on #archive_timeout = 0 archive_timeout = 0 #archive_command = '' Przykład archive_command = 'copy "%p" "[katalog_kopii_przyrostowej]\\%f"' archive_command = 'copy "%p" "d:\\backup\ \partial\\%f"' Osobna uwaga dotyczy ostatniego wpisu, tj. archive_command. Jego wartością jest polecenie, które serwer bazy danych będzie wywoływał w celu skopiowania plików przyrostowej kopii zapasowej do wskazanego przez użytkownika Rozdział 2 - Konfiguracja 6
katalogu. Ukośniki (tj. \) muszą być podwojone (\\), a katalog kopii przyrostowej musi istnieć na dysku. Po dokonaniu zmian należy zapisać i zamknąć plik. Zamknięcie pliku jest bardzo ważne. 7. W katalogu danych wybranego serwera należy znaleźć plik pg_hba.conf i odpowiednio go zmodyfikować. Należy odszukać w nim wpis: # host replication postgres 127.0.0.1/32 md5 Wpis ten może nie istnieć, wówczas należy go dodać na końcu pliku. Jeśli wpis istnieje, usuwamy ewentualny znak # zaś skrót md5 zamieniamy na trust : W rezultacie plik powinien zawierać (poza innymi) następujący wpis: host replication postgres 127.0.0.1/32 trust Zapisujemy i zamykamy plik. 8. Resetujemy serwis serwera bazy danych wydając kolejno dwa polecenia: net stop [nazwa_usługi_serwera] net start [nazwa_usługi_serwera] Rozdział 2 - Konfiguracja 7
net stop postgresql-9.2 net start postgresql-9.2 9. W tym momencie serwer jest gotowy do tworzenia przyrostowej kopi zapasowej. W trakcie jego pracy, do wskazanego katalogu będą trafiać pliki kopii przyrostowej WAL, które zawierają informacje o aktualnie dokonywanych zmianach. Można się o tym przekonać śledząc zawartość katalogu w trakcie pracy serwera bazy danych. Będą tu pojawiać się pliki o długich nazwach w rodzaju 000000010000000000000027 i rozmiarze 16MB. 3 Tworzenie pełnej kopii zapasowej Po skonfigurowaniu serwera należy wykonać ręcznie pierwszą kopię zapasową. Po jej utworzeniu, w katalogu pełnej kopii zapasowej pojawi się plik base.tar.gz, stanowiący skompresowaną kopię zapasową. Jeśli w katalogu znajdował się wcześniej plik poprzedniej kopii zapasowej to powstanie drugi katalog, do którego zostanie przeniesiona wcześniejsza wersja pliku base.tar.gz. Do wykonania pełnej kopii potrzebny jest plik FullBackup.bat, który uruchamia się w następujący sposób: fullbackup.bat katalog_backupu dokladna_nazwa_uslugi_bazy fullbackup.bat "c:\backup\full" postgresql-9.2 UWAGA: Ważne jest podawanie ścieżek do katalogów w cudzysłowach. Rozdział 2 - Konfiguracja 8
4 Odzyskiwanie danych z kopii zapasowej UWAGA Przed przystąpieniem do odzyskiwania danych zalecany jest kontakt z działem wsparcia Comarch Healthcare S.A.! Jeśli awaria bazy danych zdarzyła się na tyle późno od wykonania kompletnej kopii zapasowej, że do bazy wprowadzono już dużą ilość istotnych danych, należy przeprowadzić procedurę odzyskiwania z przyrostowej kopii zapasowej. W tym celu należy: 1. Zatrzymać serwer bazy danych poleceniem net stop [nazwa_usługi_serwera] net stop postgresql-9.2 2. Usunąć zawartość katalogu z danymi serwera bazy danych. Jest to podkatalog data katalogu serwera. Przykładowo: C:/Program Files/PostgreSQL/9.2/data Można w tym celu wydać komendę: RemoveData.bat "C:\Program Files\PostgreSQL\9.2\data" 3. Rozpakować archiwum z kopią danych jest to plik base.tar.gz, który znajduje się we wskazanej uprzednio lokalizacji pełnej kopii zapasowej. W tym celu należy wydać komendę: Rozdział 3 - Tworzenie pełnej k opii zapasowej 9
7za e [ścieżka_do_pliku_pełnej_kopii.tar.gz] o[katalog_danych_serwera] 7za e "C:\backup\full\base.tar.gz" o"c:\program Files\postgresql\9.2\data" Uwaga: Ścieżki dostępu do pliku zawsze obejmujemy cudzysłowami. 4. W efekcie w katalogu z danymi bazy danych pojawi się znacznie większy plik o rozszerzeniu.tar. Również ten plik należy rozpakować (uwaga zmiana opcji na x ): 7za x [ścieżka_do_otrzymanego_pliku.tar] o[katalog_danych_serwera] 7za x "c:\program Files\PostgreSQL\9.2\data\base.tar" o"c:\program Files\PostgreSQL\9.2\data" 5. Następnie należy usunąć plik base.tar z katalogu danych serwera. Nie jest to bezwzględnie konieczne, ale plik zajmuje dużo miejsca na dysku: del [ścieżka_do_otrzymanego_pliku.tar] del "c:\program Files\PostgreSQL\9.2\data\base.tar" 6. W katalogu danych serwera znajduje się podkatalog pg_xlog. Należy usunąć jego zawartość za wyjątkiem zawartości katalogu archive_status - jeśli takowy istnieje. del /Q [ścieżka_do_katalogu_pg_xlog]\*.* Rozdział 4 - Odzysk iwanie danych z k opii zapasowej 10
del /Q "c:\program Files\PostgreSQL\9.2\data\pg_xlog\*.*" 7. Z linii należy poleceń wykonać poniższe polecenie, które utworzy plik recovery.conf, zawierający komendę kopiującą pliki WAL z katalogu częściowej kopii zapasowej do katalogu pg_xlog: echo restore_command = 'copy "[ścieżka_do_katalogu_kopii_częściowej]\\%f" "%p"' > "[katalog_danych_serwera_bazy_danych]\recovery.conf" echo restore_command = 'copy "C:\\backup\\partial\\%f" "%p"' > "c:\program Files \PostgreSQL\9.2\data\recovery.conf" Uwaga: Pamiętamy o podwojeniu lewych ukośników (backslashe), cudzysłowach i apostrofach we fragmencie zaznaczonym na czerwono. 8. Może się okazać, że w podkatalogu pg_tblspc katalogu danych serwera znajdą się pewne pliki, które należy odpowiednio przetworzyć. Jeśli katalog jest pusty krok 8. należy pominąć. W tym celu należy wydać polecenie: process_pg_tblspc.bat "[ścieżka_do_katalogu_danych]\pg_tblspc" Rozdział 4 - Odzysk iwanie danych z k opii zapasowej 11
process _pg_tblspc.bat "c:\program Files\PostgreSQL3\data\pg_tblspc" Uwaga: przy pierwszym uruchomieniu może pojawić się okno z informacjami o warunkach użytkowania programu. W oknie tym należy wyrazić zgodę na te warunki. Efekt wykonania polecenia: 9. Włączyć usługę bazy danych. net start postgresql-9.2 10. Usługa wykryje plik recovery.conf i przejdzie w tryb odzyskiwania danych. Po zakończeniu tego procesu plik recovery.conf zmieni nazwę na recovery.done. Po zakończeniu procesu przywracania danych należy go usunąć. del [ścieżka_do_katalogu_danych_serwera]\recovery.done Przykład del "c:\program Files\PostgreSQL\9.2\data\recovery.done" Rozdział 4 - Odzysk iwanie danych z k opii zapasowej 12
11. Dane zostały odzyskane. Rozdział 4 - Odzysk iwanie danych z k opii zapasowej 13