{"id":92367,"date":"2020-08-26T07:42:09","date_gmt":"2020-08-26T05:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/putevoditel-po-rezervnomu-kopirovaniyu-baz-dannyh"},"modified":"2020-08-26T07:42:09","modified_gmt":"2020-08-26T05:42:09","slug":"putevoditel-po-rezervnomu-kopirovaniyu-baz-dannyh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/putevoditel-po-rezervnomu-kopirovaniyu-baz-dannyh","title":{"rendered":"Przewodnik po tworzeniu kopii zapasowych baz danych","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<blockquote><p>\u2013 O, \u017cadne schronienie nie wytrzyma uderzenia meteorytu. Ale jak ka\u017cdy, macie zapas, wi\u0119c nie musicie si\u0119 martwi\u0107.<\/p>\n<p><i>Stanis\u0142aw Lem, \u201eDzienniki gwiazdowe Ijona Tichnego\u201d<\/i><\/p><\/blockquote>\n<p>\nKopie zapasowe to zapisanie kopii danych w miejscu innym ni\u017c g\u0142\u00f3wne miejsce ich przechowywania.<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik po tworzeniu kopii zapasowych baz danych\" src=\"\/wp-content\/uploads\/2020\/08\/c1dba0d8999cab69315560dfc57546e0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nG\u0142\u00f3wnym celem tworzenia kopii zapasowych jest przywracanie danych po ich utracie. W zwi\u0105zku z tym cz\u0119sto s\u0142ycha\u0107, \u017ce posiadanie repliki bazy danych pozwala zawsze na odzyskanie danych i kopie zapasowe s\u0105 niepotrzebne. W rzeczywisto\u015bci kopie zapasowe pozwalaj\u0105 rozwi\u0105za\u0107 co najmniej trzy problemy, kt\u00f3re nie mog\u0105 by\u0107 rozwi\u0105zane za pomoc\u0105 repliki, a sam\u0105 replik\u0119 bez kopii zapasowej nie mo\u017cna zainicjowa\u0107.<\/p>\n<p>Po pierwsze, kopia zapasowa umo\u017cliwia przywr\u00f3cenie danych po b\u0142\u0119dzie logicznym. Na przyk\u0142ad, ksi\u0119gowy usun\u0105\u0142 grup\u0119 zapis\u00f3w lub administrator bazy danych zlikwidowa\u0142 przestrze\u0144 tabeli. Obie operacje s\u0105 absolutnie legitymne z punktu widzenia bazy danych, a proces replikacji powieli je w bazie-repliki.<\/p>\n<p>Po drugie, nowoczesne systemy zarz\u0105dzania bazami danych to bardzo niezawodne pakiety oprogramowania, jednak czasami dochodzi do uszkodzenia wewn\u0119trznych struktur bazy danych, po kt\u00f3rym dost\u0119p do danych zostaje utracony. Co gorsza, takie uszkodzenie zazwyczaj wyst\u0119puje przy du\u017cym obci\u0105\u017ceniu lub przy instalacji jakiej\u015b aktualizacji. Ale zar\u00f3wno du\u017ce obci\u0105\u017cenie, jak i regularne aktualizacje \u015bwiadcz\u0105, \u017ce baza danych jest z pewno\u015bci\u0105 u\u017cywana, a przechowywane w niej dane s\u0105 cenne.<\/p>\n<p>Ostatecznie trzecim problemem, kt\u00f3rego rozwi\u0105zanie wymaga posiadania kopii zapasowej, jest klonowanie bazy, na przyk\u0142ad w celach testowych.<\/p>\n<p>Kopie zapasowe baz danych w mniejszym lub wi\u0119kszym stopniu opieraj\u0105 si\u0119 na jednej z dw\u00f3ch zasad:<\/p>\n<ul>\n<li>Wyodr\u0119bnienie danych z p\u00f3\u017aniejszym zapisaniem w dowolnym formacie;<\/li>\n<li>Zrzut stanu plik\u00f3w bazy danych i zachowanie dziennik\u00f3w.<\/li>\n<\/ul>\n<p>\nPrzyjrzyjmy si\u0119 tym zasadom i narz\u0119dziom je realizuj\u0105cym bardziej szczeg\u00f3\u0142owo.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Eksport danych<\/h3>\n<p>\nW zestawie narz\u0119dzi towarzysz\u0105cych ka\u017cdemu systemowi zarz\u0105dzania baz\u0105 danych znajduj\u0105 si\u0119 narz\u0119dzia do eksportu i importu danych. Dane s\u0105 zapisywane w formacie tekstowym lub w formacie binarnym, specyficznym dla danego systemu zarz\u0105dzania baz\u0105 danych. W poni\u017cszej tabeli znajduje si\u0119 lista takich narz\u0119dzi:<\/p>\n<p>Format binarny<br \/>\nFormat tekstowy<\/p>\n<p>Oracle<br \/>\nDataPump Export\/DataPump Import<br \/>\nEksport\/Import<br \/>\nSQL*Plus\/SQL*Loader<\/p>\n<p>PostgreSQL<br \/>\npg_dump, pg_dumpall\/pg_restore<br \/>\npg_dump, pg_dumpall\/psql<\/p>\n<p>Microsoft SQL Server<br \/>\nbcp<br \/>\nbcp<\/p>\n<p>DB2<br \/>\nwy\u0142adunek\/\u0142adowanie<br \/>\nwy\u0142adunek\/\u0142adowanie<\/p>\n<p>MySQL<\/p>\n<p>mysqldump, mysqlpump\/mysql, mysqlimport<\/p>\n<p>MongoDB<br \/>\nmongodump\/mongorestore<br \/>\nmongoexport\/mongoimport<\/p>\n<p>Cassandra<br \/>\nnodetool snapshot\/sstableloader<br \/>\ncqlsh<\/p>\n<p>\nFormat tekstowy ma t\u0119 zalet\u0119, \u017ce mo\u017cna go edytowa\u0107 lub tworzy\u0107 za pomoc\u0105 zewn\u0119trznych program\u00f3w, a format binarny z kolei jest dobry, poniewa\u017c pozwala szybciej eksportowa\u0107 i importowa\u0107 dane dzi\u0119ki oszcz\u0119dno\u015bci zasob\u00f3w na konwersj\u0119 format\u00f3w.<\/p>\n<p>Mimo prostoty i oczywisto\u015bci idei exportu danych, w przypadku zape\u0142nionych przemys\u0142owych baz danych taki spos\u00f3b rzadko jest stosowany. Oto powody, dla kt\u00f3rych eksport nie nadaje si\u0119 do pe\u0142noprawnego tworzenia kopii zapasowych:<\/p>\n<ul>\n<li>proces wy\u0142adunku generuje znaczne obci\u0105\u017cenie systemu \u017ar\u00f3d\u0142owego;<\/li>\n<li>eksport zajmuje du\u017co czasu \u2013 w momencie uko\u0144czenia eksportu, dane mog\u0105 sta\u0107 si\u0119 ju\u017c nieaktualne;<\/li>\n<li>wykonanie sp\u00f3jnego eksportu ca\u0142ej bazy danych przy du\u017cym obci\u0105\u017ceniu jest praktycznie niemo\u017cliwe, poniewa\u017c SGBD musi zachowa\u0107 migawk\u0119 swojego stanu w momencie rozpocz\u0119cia eksportu. Im wi\u0119cej transakcji zosta\u0142o wykonanych od momentu rozpocz\u0119cia eksportu, tym wi\u0119kszy wolumen migawki (nieaktualnych kopii danych w PostgreSQL, przestrzeni undo w Oracle, tempdb w Microsoft SQL Server itp.);<\/li>\n<li>eksport zachowuje logiczn\u0105 struktur\u0119 danych, ale nie zachowuje ich fizycznej struktury \u2013 parametry fizycznego przechowywania tabel, indeksy i inne.<\/li>\n<\/ul>\n<p>\nNiemniej jednak, eksport ma tak\u017ce swoje zalety:<\/p>\n<ul>\n<li>wysoka selektywno\u015b\u0107: mo\u017cna wyeksportowa\u0107 pojedyncze tabele, pojedyncze pola, a nawet pojedyncze wiersze;<\/li>\n<li>wyeksportowane dane mo\u017cna za\u0142adowa\u0107 do bazy danych innej wersji, a je\u015bli eksport odby\u0142 si\u0119 w formacie tekstowym, to r\u00f3wnie\u017c do innej bazy danych.<\/li>\n<\/ul>\n<p>\nW ten spos\u00f3b eksport jest g\u0142\u00f3wnie stosowany w takich zadaniach jak tworzenie kopii zapasowych ma\u0142ych tabel (na przyk\u0142ad s\u0142ownik\u00f3w) lub dystrybucja zestaw\u00f3w danych z kolejn\u0105 wersj\u0105 aplikacji. <\/p>\n<p>Najcz\u0119\u015bciej stosowan\u0105 metod\u0105 tworzenia kopii zapasowych baz danych jest kopiowanie plik\u00f3w bazy.<\/p>\n<h3>\u00abZimne\u00bb zapisywanie plik\u00f3w bazy danych<\/h3>\n<p>\nOczywista idea \u2013 zatrzyma\u0107 baz\u0119 danych i skopiowa\u0107 wszystkie jej pliki. Taka kopia zapasowa nazywana jest \u00abzimn\u0105\u00bb. Metoda ta jest niezwykle niezawodna i prosta, ale ma dwa oczywiste wady:<\/p>\n<ul>\n<li>Z \"zimnej\" kopii zapasowej mo\u017cna przywr\u00f3ci\u0107 jedynie to, co by\u0142o w bazie danych w momencie zatrzymania; transakcje wykonane po ponownym uruchomieniu bazy nie b\u0119d\u0105 uwzgl\u0119dnione w \"zimnej\" kopii zapasowej;<\/li>\n<li>Nie ka\u017cda baza danych ma okno technologiczne, w kt\u00f3rym mo\u017cna j\u0105 zatrzyma\u0107.<\/li>\n<\/ul>\n<p>\nJe\u015bli jednak \"zimna\" kopia zapasowa Ci odpowiada, musisz pami\u0119ta\u0107, \u017ce<\/p>\n<ul>\n<li>\"zimna\" kopia czasami powinna obejmowa\u0107 r\u00f3wnie\u017c dzienniki. Metody okre\u015blania dziennik\u00f3w, kt\u00f3re powinny trafi\u0107 do \"zimnej\" kopii, s\u0105 indywidualne dla ka\u017cdej SGBD. Na przyk\u0142ad w Oracle nale\u017cy skopiowa\u0107 tzw. online redo, czyli okre\u015blon\u0105 liczb\u0119 plik\u00f3w dziennika w specjalnym katalogu, nawet gdy baza jest poprawnie zatrzymana. W PostgreSQL nale\u017cy zachowa\u0107 wszystkie dzienniki pocz\u0105wszy od dziennika zawieraj\u0105cego ostatni punkt kontrolny, kt\u00f3ry jest zawarty w pliku steruj\u0105cym.<\/li>\n<li>Katalog bazy danych mo\u017ce zawiera\u0107 do\u015b\u0107 du\u017ce pliki tymczasowych przestrzeni tabel, kt\u00f3re nie musz\u0105 by\u0107 uwzgl\u0119dniane w kopii zapasowej. Nawiasem m\u00f3wi\u0105c, to spostrze\u017cenie jest te\u017c prawdziwe w przypadku \"gor\u0105cego\" tworzenia kopii zapasowych.<\/li>\n<\/ul>\n<p><\/p>\n<h3>\"Gor\u0105ce\" zapisywanie plik\u00f3w<\/h3>\n<p>\nWi\u0119kszo\u015b\u0107 kopii zapasowych nowoczesnych baz danych wykonywana jest poprzez kopiowanie plik\u00f3w bazy danych bez zatrzymywania bazy. W tym przypadku pojawia si\u0119 kilka problem\u00f3w:<\/p>\n<ul>\n<li>W momencie rozpocz\u0119cia kopiowania zawarto\u015b\u0107 bazy danych mo\u017ce nie zgadza\u0107 si\u0119 z zawarto\u015bci\u0105 plik\u00f3w, poniewa\u017c cz\u0119\u015b\u0107 informacji znajduje si\u0119 w pami\u0119ci podr\u0119cznej i jeszcze nie zosta\u0142a zapisana na dysku.<\/li>\n<li>Podczas kopiowania zawarto\u015b\u0107 bazy mo\u017ce si\u0119 zmienia\u0107. Je\u015bli u\u017cywane s\u0105 zmieniane struktury danych, zawarto\u015b\u0107 plik\u00f3w si\u0119 zmienia, a przy u\u017cyciu niezmiennych struktur zmienia si\u0119 zestaw plik\u00f3w: nowe pliki si\u0119 pojawiaj\u0105, a stare s\u0105 usuwane.<\/li>\n<li>Poniewa\u017c zapis danych w bazie i odczyt plik\u00f3w bazy danych nie s\u0105 w \u017caden spos\u00f3b zsynchronizowane, program tworz\u0105cy kopi\u0119 zapasow\u0105 mo\u017ce odczyta\u0107 niepoprawn\u0105 stron\u0119, w kt\u00f3rej po\u0142owa b\u0119dzie pochodzi\u0107 ze starej wersji strony, a druga po\u0142owa \u2013 z nowej.<\/li>\n<\/ul>\n<p>\nAby kopia zapasowa okaza\u0142a si\u0119 sp\u00f3jna, ka\u017cda SGBD ma polecenie, kt\u00f3re informuje, \u017ce rozpocz\u0119to proces tworzenia kopii zapasowej. Sk\u0142adniowo to polecenie mo\u017ce wygl\u0105da\u0107 r\u00f3\u017cnie: <\/p>\n<ul>\n<li>W Oracle to osobne polecenie ALTER DATABASE\/TABLESPACE BEGIN BACKUP;<\/li>\n<li>W PostgreSQL \u2013 funkcja pg_start_backup();<\/li>\n<li>W Microsoft SQL Server i DB2 przygotowanie do tworzenia kopii zapasowej odbywa si\u0119 niejawnie podczas wykonywania polecenia BACKUP DATABASE;<\/li>\n<li>W MySQL Enterprise, Cassandra i MongoDB przygotowanie odbywa si\u0119 niejawnie za pomoc\u0105 zewn\u0119trznych narz\u0119dzi \u2013 mysqlbackup, OpsCenter i Ops Manager odpowiednio.<\/li>\n<\/ul>\n<p>\nMimo r\u00f3\u017cnic w sk\u0142adni, proces przygotowania do tworzenia kopii zapasowej wygl\u0105da identycznie.<\/p>\n<p>Oto jak wygl\u0105da przygotowanie do tworzenia kopii zapasowej w systemach DBMS z zmiennymi strukturami dyskowymi, tzn. we wszystkich tradycyjnych relacyjnych systemach dyskowych:<\/p>\n<ol>\n<li>Zapisywany jest moment rozpocz\u0119cia tworzenia kopii zapasowej; kopia zapasowa b\u0119dzie zawiera\u0107 dzienniki bazy danych zaczynaj\u0105c od tego momentu.<\/li>\n<li>Wykonywana jest kontrolna punktacja, co oznacza, \u017ce wszystkie zmiany, kt\u00f3re zasz\u0142y w stronach danych przed zapami\u0119tanym momentem, s\u0105 zapisywane na dysku. To gwarantuje, \u017ce dzienniki do momentu rozpocz\u0119cia tworzenia kopii zapasowej nie b\u0119d\u0105 potrzebne przy odzyskiwaniu.<\/li>\n<li>W\u0142\u0105czany jest szczeg\u00f3lny tryb rejestrowania: je\u015bli strona danych zmienia si\u0119 po raz pierwszy po za\u0142adowaniu z dysku, zamiast zapisywa\u0107 w dzienniku zmiany strony, baza zapisuje tam ca\u0142\u0105 stron\u0119. Podczas wykonywania procedury przygotowawczej wszystkie strony s\u0105 wypychane na dysk, wi\u0119c przy pierwszej zmianie blok zawsze zostanie zapisany w dzienniku w ca\u0142o\u015bci. Ale je\u015bli podczas tworzenia kopii zapasowej strona zostanie ponownie wypchni\u0119ta na dysk, to nast\u0119puj\u0105ca jej zmiana r\u00f3wnie\u017c spowoduje pojawienie si\u0119 w dzienniku pe\u0142nej kopii strony. To gwarantuje, \u017ce je\u015bli podczas kopiowania pliku z danymi strona stanie si\u0119 nieprawid\u0142owa, zastosowanie dziennika przywr\u00f3ci j\u0105 do poprawno\u015bci.<\/li>\n<li>Blokowane s\u0105 zmiany w nag\u0142\u00f3wkach plik\u00f3w danych, co oznacza, \u017ce ta cz\u0119\u015b\u0107, kt\u00f3rej zmiany nie s\u0105 odzwierciedlane w dziennikach, nie podlega modyfikacji. To zapewnia, \u017ce nag\u0142\u00f3wek b\u0119dzie poprawnie skopiowany, a p\u00f3\u017aniej do pliku danych prawid\u0142owo zastosowane b\u0119d\u0105 dzienniki.<\/li>\n<\/ol>\n<p>\nPo wykonaniu wszystkich wymienionych powy\u017cej procedur mo\u017cna kopiowa\u0107 pliki danych z wykorzystaniem systemu operacyjnego \u2013 cp, rsync i innych. W\u0142\u0105czenie trybu tworzenia kopii zapasowej obni\u017ca wydajno\u015b\u0107 bazy danych: po pierwsze, zwi\u0119ksza si\u0119 obj\u0119to\u015b\u0107 dziennik\u00f3w, a po drugie, je\u015bli wyst\u0105pi awaria podczas tworzenia kopii zapasowej, przywracanie zajmie wi\u0119cej czasu, poniewa\u017c nag\u0142\u00f3wki plik\u00f3w danych nie s\u0105 aktualizowane. Im szybciej zako\u0144czy si\u0119 tworzenie kopii zapasowej, tym lepiej dla bazy danych, dlatego stosowanie takich narz\u0119dzi jak zrzut (snapshot) systemu plik\u00f3w lub przerwanie lustra (BCV) w macierzy dyskowej jest uzasadnione. Niekt\u00f3re systemy baz danych (Oracle, PostgreSQL) daj\u0105 administratorowi mo\u017cliwo\u015b\u0107 samodzielnego wyboru metody kopiowania, inne (Microsoft SQL Server) oferuj\u0105 interfejs do integracji w\u0142asnych narz\u0119dzi do tworzenia kopii zapasowych z mechanizmami system\u00f3w plik\u00f3w lub macierzy dyskowych.<\/p>\n<p>Po zako\u0144czeniu tworzenia kopii zapasowej nale\u017cy przywr\u00f3ci\u0107 baz\u0119 danych do normalnego stanu. W Oracle robi si\u0119 to poleceniem ALTER DATABASE\/TABLESPACE END BACKUP, w PostgreSQL \u2013 wywo\u0142uj\u0105c funkcj\u0119 pg_stop_backup(), a w innych bazach \u2013 wewn\u0119trznymi podprogramami odpowiednich polece\u0144 lub zewn\u0119trznych us\u0142ug.<\/p>\n<p>Oto jak wygl\u0105da tymczasowa diagram procesu tworzenia kopii zapasowej:<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik po tworzeniu kopii zapasowych baz danych\" src=\"\/wp-content\/uploads\/2020\/08\/4e74f865e9f35acec083b747da4449cf.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Przygotowanie do tworzenia kopii zapasowej (begin backup) zajmuje czas, czasami znaczny. Nawet je\u015bli u\u017cywane s\u0105 lustrzane wolumeny lub systemy plik\u00f3w z mo\u017cliwo\u015bci\u0105 tworzenia zrzut\u00f3w, proces tworzenia kopii zapasowej nie b\u0119dzie natychmiastowy.<\/li>\n<li>Wraz z plikami danych nale\u017cy zachowa\u0107 dzienniki, zaczynaj\u0105c od momentu rozpocz\u0119cia przygotowa\u0144 do tworzenia kopii zapasowej i ko\u0144cz\u0105c w momencie przywracania bazy do normalnego stanu.<\/li>\n<li>Mo\u017cna przywr\u00f3ci\u0107 si\u0119 z tej kopii zapasowej <b>w momencie przywracania bazy do normalnego stanu<\/b>. Przywr\u00f3cenie do wcze\u015bniejszego momentu nie jest mo\u017cliwe.<\/li>\n<\/ul>\n<p>\nW przypadku baz danych wykorzystuj\u0105cych niezmienne struktury danych (zrzuty pami\u0119ci, drzewa LSM) sytuacja jest prostsza. Przygotowanie do tworzenia kopii zapasowej sk\u0142ada si\u0119 z nast\u0119puj\u0105cych krok\u00f3w:<\/p>\n<ol>\n<li>Dane z pami\u0119ci s\u0105 zapisywane na dysku.<\/li>\n<li>Zostaje zarejestrowana lista plik\u00f3w, kt\u00f3re trafiaj\u0105 do kopii zapasowej. Dop\u00f3ki proces tworzenia kopii zapasowej nie zostanie zako\u0144czony, bazie zabrania si\u0119 usuwania tych plik\u00f3w, nawet je\u015bli staj\u0105 si\u0119 niepotrzebne.<\/li>\n<\/ol>\n<p>\nPo sygnale o zako\u0144czeniu tworzenia kopii zapasowej, baza z niezmiennymi strukturami mo\u017ce ponownie usun\u0105\u0107 zb\u0119dne pliki.<\/p>\n<h3>Przywracanie do punktu<\/h3>\n<p>\nTworzenie kopii zapasowej umo\u017cliwia przywr\u00f3cenie stanu bazy danych do momentu, w kt\u00f3rym zako\u0144czono polecenie powrotu z trybu kopii zapasowej. Jednak awaria, po kt\u00f3rej mo\u017ce by\u0107 konieczne przywr\u00f3cenie, mo\u017ce zdarzy\u0107 si\u0119 w dowolnym momencie. Zadanie przywracania stanu bazy danych do dowolnego momentu nazywa si\u0119 \u201eprzywracaniem do punktu\u201d (point-in-time recovery).<\/p>\n<p>Aby zapewni\u0107 tak\u0105 mo\u017cliwo\u015b\u0107, nale\u017cy zachowa\u0107 dzienniki bazy danych od momentu zako\u0144czenia tworzenia kopii zapasowej, a w trakcie przywracania kontynuowa\u0107 stosowanie dziennik\u00f3w do przywr\u00f3conej kopii. Po tym, jak baza danych zostanie przywr\u00f3cona z kopii do momentu zako\u0144czenia kopiowania, stan bazy (plik\u00f3w i pami\u0119ci podr\u0119cznej) jest gwarantowane poprawny, dlatego specjalny tryb dziennikowania nie jest potrzebny. Stosuj\u0105c dzienniki do odpowiedniego momentu, mo\u017cna uzyska\u0107 stan bazy danych na dowolny punkt w czasie.<\/p>\n<p>Je\u015bli szybko\u015b\u0107 przywracania kopii zapasowej jest ograniczona jedynie przepustowo\u015bci\u0105 dysku, to szybko\u015b\u0107 stosowania dziennik\u00f3w jest zazwyczaj ograniczona wydajno\u015bci\u0105 procesora. Je\u015bli w g\u0142\u00f3wnej bazie danych zmiany zachodz\u0105 r\u00f3wnolegle, to podczas przywracania wszystkie zmiany s\u0105 wykonywane sekwencyjnie - w kolejno\u015bci odczytu z dziennika. W ten spos\u00f3b czas przywracania jest liniowo zale\u017cny od tego, jak daleko punkt przywracania jest od punktu zako\u0144czenia tworzenia kopii zapasowej. Z tego powodu trzeba do\u015b\u0107 cz\u0119sto robi\u0107 pe\u0142ne kopie zapasowe - przynajmniej raz w tygodniu dla baz z niewielkim obci\u0105\u017ceniem transakcyjnym i do codziennego kopiowania dla baz o wysokim obci\u0105\u017ceniu.<\/p>\n<h3>Przyrostowe tworzenie kopii zapasowych<\/h3>\n<p>\nAby przyspieszy\u0107 przywracanie do punktu, chcia\u0142oby si\u0119 mie\u0107 mo\u017cliwo\u015b\u0107 wykonywania tworzenia kopii zapasowych jak najcz\u0119\u015bciej, ale jednocze\u015bnie nie zajmowa\u0107 zbyt du\u017co miejsca na dyskach i nie obci\u0105\u017ca\u0107 bazy zadaniami tworzenia kopii zapasowych.<\/p>\n<p>Rozwi\u0105zaniem problemu jest przyrostowe tworzenie kopii zapasowych, czyli kopiowanie tylko tych stron danych, kt\u00f3re zmieni\u0142y si\u0119 od ostatniego tworzenia kopii zapasowej.<br \/>\nKopie przyrostowe s\u0105 sensowne tylko dla baz danych, kt\u00f3re u\u017cywaj\u0105 zmiennych struktur danych.<\/p>\n<p>Przyrost mo\u017ce by\u0107 liczony zar\u00f3wno od pe\u0142nej kopii zapasowej (kopii skumulowanej), jak i od dowolnej poprzedniej kopii (kopii r\u00f3\u017cnicowej). <\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik po tworzeniu kopii zapasowych baz danych\" src=\"\/wp-content\/uploads\/2020\/08\/10e3bb87445cb36693c7b5469d62eeaf.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNiestety, nie ma jednolitej terminologii, a r\u00f3\u017cni producenci u\u017cywaj\u0105 r\u00f3\u017cnych termin\u00f3w:<\/p>\n<p>R\u00f3\u017cnicowa<br \/>\nSkumulowana<\/p>\n<p>Oracle<br \/>\nR\u00f3\u017cnicowa<br \/>\nSkumulowana<\/p>\n<p>PostgresPro<br \/>\nPrzyrostowa<br \/>\n\u2014<\/p>\n<p>Microsoft SQL Server<br \/>\n\u2014<br \/>\nR\u00f3\u017cnicowa<\/p>\n<p>IBM DB2<br \/>\nDelta<br \/>\nPrzyrostowa<\/p>\n<p>\nW przypadku posiadania kopii przyrostowych proces przywracania do punktu wygl\u0105da nast\u0119puj\u0105co:<\/p>\n<ul>\n<li>przywracana jest ostatnia pe\u0142na kopia zapasowa, wykonana przed momentem przywracania;<\/li>\n<li>na pe\u0142nej kopii przywracane s\u0105 kopie przyrostowe;<\/li>\n<li>nak\u0142adane s\u0105 dzienniki od momentu rozpocz\u0119cia tworzenia kopii zapasowej do punktu przywracania.<\/li>\n<\/ul>\n<p>\nPosiadanie kopii skumulowanej przyspiesza proces przywracania. Na przyk\u0142ad, aby przywr\u00f3ci\u0107 stan bazy do punktu mi\u0119dzy T3 a T4, nale\u017cy przywr\u00f3ci\u0107 dwie kopie przyrostowe, a aby przywr\u00f3ci\u0107 do punktu po T4 \u2013 tylko jedn\u0105.<br \/>\nOczywi\u015bcie obj\u0119to\u015b\u0107 jednej kopii skumulowanej jest mniejsza ni\u017c obj\u0119to\u015b\u0107 kilku kopii r\u00f3\u017cnicowych, poniewa\u017c niekt\u00f3re strony zmieni\u0142y si\u0119 wielokrotnie, a ka\u017cda kopia przyrostowa zawiera swoj\u0105 wersj\u0119 strony.<\/p>\n<p>Istniej\u0105 trzy sposoby tworzenia kopii przyrostowej:<\/p>\n<ol>\n<li>tworzenie pe\u0142nej kopii i obliczanie r\u00f3\u017cnicy z poprzedni\u0105 pe\u0142n\u0105 kopi\u0105;<\/li>\n<li>analiza dziennik\u00f3w, tworzenie listy zmienionych stron i rezerwowanie stron, kt\u00f3re zosta\u0142y uwzgl\u0119dnione w li\u015bcie;<\/li>\n<li>zapytanie o zmienione strony w bazie danych.<\/li>\n<\/ol>\n<p>\nPierwszy spos\u00f3b oszcz\u0119dza miejsce na dysku, ale nie rozwi\u0105zuje problemu zmniejszenia obci\u0105\u017cenia bazy danych. Co wi\u0119cej, je\u015bli mamy pe\u0142n\u0105 kopi\u0119 zapasow\u0105, to przekszta\u0142canie jej w kopi\u0119 przyrostow\u0105 jest bezsensowne, poniewa\u017c przywr\u00f3cenie pe\u0142nej kopii jest szybsze ni\u017c przywracanie poprzedniej pe\u0142nej kopii i przyrost\u00f3w. Problem oszcz\u0119dno\u015bci miejsca na dysku lepiej przekaza\u0107 specjalnym komponentom z wbudowanymi mechanizmami deduplikacji. Mog\u0105 to by\u0107 zar\u00f3wno specjalne systemy pami\u0119ci masowej (EMC DataDomain, HPE StorageWorks VLS, ca\u0142a linia NetApp), jak i produkty programowe (ZFS, Veritas NetBackup PureFile, deduplikacja danych systemu Windows Server).<\/p>\n<p>Drugi i trzeci spos\u00f3b r\u00f3\u017cni\u0105 si\u0119 mechanizmem okre\u015blania listy zmienionych stron. Analiza dziennik\u00f3w jest bardziej zasobo\u017cerna, a ponadto do jej realizacji nale\u017cy zna\u0107 struktur\u0119 plik\u00f3w dziennika. Najpro\u015bciej jest zapyta\u0107 sam\u0105 baz\u0119 danych, kt\u00f3re strony si\u0119 zmieni\u0142y, ale do tego j\u0105dro DBMS musi mie\u0107 funkcjonalno\u015b\u0107 \u015bledzenia zmienionych blok\u00f3w (block change tracking).<\/p>\n<p>Funkcjonalno\u015b\u0107 inkrementalnego tworzenia kopii zapasowych zosta\u0142a po raz pierwszy wprowadzona w oprogramowaniu Oracle Recovery Manager (RMAN), kt\u00f3re pojawi\u0142o si\u0119 w wersji Oracle 8i. Oracle od razu zaimplementowa\u0142 \u015bledzenie zmienionych blok\u00f3w, wi\u0119c nie ma potrzeby analizy dziennik\u00f3w.<\/p>\n<p>PostgreSQL nie \u015bledzi zmienionych blok\u00f3w, dlatego narz\u0119dzie pg_probackup, opracowane przez rosyjsk\u0105 firm\u0119 Postgres Professional, okre\u015bla zmienione strony poprzez analiz\u0119 dziennika. Jednak firma dostarcza r\u00f3wnie\u017c DBMS PostgresPro, kt\u00f3ra zawiera rozszerzenie ptrack \u015bledz\u0105ce zmiany stron. Przy u\u017cyciu pg_probackup z DBMS PostgresPro narz\u0119dzie pyta o zmienione strony sam\u0105 baz\u0119 \u2013 dok\u0142adnie tak, jak RMAN.<\/p>\n<p>Microsoft SQL Server, podobnie jak Oracle, \u015bledzi zmienione strony, ale polecenie BACKUP pozwala na tworzenie tylko pe\u0142nych i kumulacyjnych kopii zapasowych.<\/p>\n<p>W DB2 istnieje mo\u017cliwo\u015b\u0107 \u015bledzenia zmienionych stron, ale domy\u015blnie jest ona wy\u0142\u0105czona. Po w\u0142\u0105czeniu DB2 umo\u017cliwia tworzenie pe\u0142nych, r\u00f3\u017cnicowych i kumulacyjnych kopii zapasowych.<\/p>\n<p>Wa\u017an\u0105 r\u00f3\u017cnic\u0105 mi\u0119dzy opisanymi w tej sekcji narz\u0119dziami (z wyj\u0105tkiem pg_probackup) a plikowymi narz\u0119dziami tworzenia kopii zapasowych jest to, \u017ce pytaj\u0105 one o obrazy stron bezpo\u015brednio z bazy danych, a nie odczytuj\u0105 danych z dysku samodzielnie. Wad\u0105 takiego podej\u015bcia jest niewielkie obci\u0105\u017cenie bazy danych. Jednak ta wada jest w pe\u0142ni rekompensowana tym, \u017ce przeczytana strona zawsze jest poprawna, dlatego nie ma potrzeby w\u0142\u0105czania specjalnego trybu dziennika podczas tworzenia kopii zapasowej.<\/p>\n<p>Jeszcze raz zwracamy uwag\u0119, \u017ce obecno\u015b\u0107 inkrementalnych kopii zapasowych nie zwalnia z wymogu posiadania dziennik\u00f3w do przywracania do dowolnego momentu w czasie. Dlatego w systemach baz danych dzienniki s\u0105 stale zapisywane na zewn\u0119trznych no\u015bnikach, a kopie zapasowe, pe\u0142ne i\/lub inkrementalne, s\u0105 tworzone zgodnie z harmonogramem.<\/p>\n<p>Najlepsz\u0105 realizacj\u0105 idei inkrementalnego tworzenia kopii zapasowych jest kompleks sprz\u0119towo-programowy (w terminologii Oracle \u2013 engineered system) Zero Data Loss Recovery Appliance \u2013 specjalistyczne rozwi\u0105zanie Oracle do tworzenia kopii zapasowych w\u0142asnej bazy danych. Kompleks stanowi klaster <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/\"   title=\"serwer\u00f3w\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1521\">serwer\u00f3w<\/a> z du\u017cym wolumenem dysk\u00f3w, na kt\u00f3re zainstalowana jest zmodyfikowana wersja oprogramowania Recovery Manager i mo\u017ce pracowa\u0107 zar\u00f3wno z innymi kompleksami sprz\u0119towo-programowymi Oracle (Database Appliance, Exadata, SPARC Supercluster), jak i z bazami Oracle w tradycyjnej infrastrukturze. W przeciwie\u0144stwie do \u201ezwyk\u0142ego\u201d RMAN, w ZDLRA wdro\u017cona jest koncepcja \u201ewiecznego inkrementu\u201d (incremental forever). System tworzy jednokrotnie pe\u0142n\u0105 kopi\u0119 bazy danych, a nast\u0119pnie wykonuje jedynie kopie inkrementalne. Dodatkowe modu\u0142y RMAN umo\u017cliwiaj\u0105 \u0142\u0105czenie kopii, tworz\u0105c nowe pe\u0142ne kopie z inkrementalnych. <\/p>\n<p>Na cze\u015b\u0107 rosyjskich programist\u00f3w nale\u017cy zauwa\u017cy\u0107, \u017ce pg_probackup r\u00f3wnie\u017c potrafi \u0142\u0105czy\u0107 kopie inkrementalne.<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik po tworzeniu kopii zapasowych baz danych\" src=\"\/wp-content\/uploads\/2020\/08\/275b649ce74614c04410618a062dddbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW przeciwie\u0144stwie do wielu podobnych pyta\u0144, pytanie \u201ejaka metoda tworzenia kopii zapasowych jest najlepsza\u201d ma jednoznaczn\u0105 odpowied\u017a \u2013 najlepiej u\u017cywana jest natywna dla danej bazy danych narz\u0119dzie, kt\u00f3re zapewnia mo\u017cliwo\u015b\u0107 tworzenia kopii inkrementalnych.<\/p>\n<p>Dla administratora bazy danych znacznie wa\u017cniejsze s\u0105 kwestie wyboru strategii tworzenia kopii zapasowych oraz integracja narz\u0119dzi do tworzenia kopii zapasowych z infrastruktur\u0105 korporacyjn\u0105. Jednak te pytania wykraczaj\u0105 poza ramy tego artyku\u0142u.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/516428\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u2013 \u041e, \u043d\u0438\u043a\u0430\u043a\u043e\u0435 \u0443\u0431\u0435\u0436\u0438\u0449\u0435 \u043d\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0435\u043e\u0440\u0438\u0442\u0430. \u041d\u043e \u0432\u0435\u0434\u044c \u0443 \u0432\u0430\u0441, \u043a\u0430\u043a \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u0440\u0435\u0437\u0435\u0440\u0432, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f. \u0421\u0442\u0430\u043d\u0438\u0441\u043b\u0430\u0432 \u041b\u0435\u043c, \u00ab\u0417\u0432\u0451\u0437\u0434\u043d\u044b\u0435 \u0434\u043d\u0435\u0432\u043d\u0438\u043a\u0438 \u0418\u0439\u043e\u043d\u0430 \u0422\u0438\u0445\u043e\u0433\u043e\u00bb \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u0434\u0435-\u0442\u043e \u0432\u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2013 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043f\u043e\u0442\u0435\u0440\u0438. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92368,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92367","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u2013 \u041e, \u043d\u0438\u043a\u0430\u043a\u043e\u0435 \u0443\u0431\u0435\u0436\u0438\u0449\u0435 \u043d\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0435\u043e\u0440\u0438\u0442\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/putevoditel-po-rezervnomu-kopirovaniyu-baz-dannyh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u043c\u0443 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u2013 \u041e, \u043d\u0438\u043a\u0430\u043a\u043e\u0435 \u0443\u0431\u0435\u0436\u0438\u0449\u0435 \u043d\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0435\u043e\u0440\u0438\u0442\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/putevoditel-po-rezervnomu-kopirovaniyu-baz-dannyh\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-26T05:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-26T05:42:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Przewodnik po tworzeniu kopii zapasowych baz danych | ProHoster","description":"\u2013 O, \u017cadne schronienie nie wytrzyma uderzenia meteorytu.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/putevoditel-po-rezervnomu-kopirovaniyu-baz-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0443\u0442\u0435\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043f\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u043c\u0443 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster","og:description":"\u2013 \u041e, \u043d\u0438\u043a\u0430\u043a\u043e\u0435 \u0443\u0431\u0435\u0436\u0438\u0449\u0435 \u043d\u0435 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0435\u043e\u0440\u0438\u0442\u0430.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/putevoditel-po-rezervnomu-kopirovaniyu-baz-dannyh","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-26T05:42:09+00:00","article:modified_time":"2020-08-26T05:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92367","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:09:36","updated":"2026-02-09 16:50:36","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=92367"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92367\/revisions"}],"predecessor-version":[{"id":158765,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92367\/revisions\/158765"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/92368"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=92367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=92367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=92367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}