{"id":4665,"date":"2026-06-14T19:31:06","date_gmt":"2026-06-14T19:31:06","guid":{"rendered":"https:\/\/cloudsave.app\/?p=4665"},"modified":"2026-06-15T15:10:21","modified_gmt":"2026-06-15T15:10:21","slug":"tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa","status":"publish","type":"post","link":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/","title":{"rendered":"Tich\u00fd zabij\u00e1k: Jak odhalit po\u0161kozen\u00e9 z\u00e1lohy datab\u00e1ze d\u0159\u00edve, ne\u017e ude\u0159\u00ed katastrofa"},"content":{"rendered":"<p>Ve sv\u011bt\u011b spr\u00e1vy datab\u00e1z\u00ed a in\u017een\u00fdrstv\u00ed spolehlivosti web\u016f (SRE) s vysok\u00fdmi n\u00e1roky existuje zn\u00e1m\u00fd axiom: <em>Schr\u00f6dingerova z\u00e1loha<\/em>. Stav jak\u00e9koli z\u00e1lohy je nezn\u00e1m\u00fd, dokud se ji nepokus\u00edte obnovit. Do t\u00e9 chv\u00edle existuje v kvantov\u00e9m stavu, kdy je z\u00e1rove\u0148 dokonale funk\u010dn\u00ed i zcela po\u0161kozen\u00e1.<\/p>\n<p>Pro DevOps in\u017een\u00fdry a spr\u00e1vce datab\u00e1z\u00ed (DBA) je zji\u0161t\u011bn\u00ed, \u017ee kritick\u00e1 datab\u00e1zov\u00e1 z\u00e1loha je b\u011bhem aktivn\u00edho incidentu po\u0161kozen\u00e1, t\u00edm nejhor\u0161\u00edm no\u010dn\u00edm sc\u00e9n\u00e1\u0159em. M\u011bn\u00ed rutinn\u00ed operaci obnovy v katastrofickou ztr\u00e1tu dat. Tento \u201etich\u00fd zabij\u00e1k\u201c integrity dat \u010dasto z\u016fst\u00e1v\u00e1 nepov\u0161imnut, proto\u017ee z\u00e1lohovac\u00ed \u00falohy \u010dasto hl\u00e1s\u00ed \u00fasp\u011b\u0161n\u00fd <code>Exit Code 0<\/code>, i kdy\u017e je samotn\u00fd obsah kompromitov\u00e1n.<\/p>\n<p>V t\u00e9to obs\u00e1hl\u00e9 p\u0159\u00edru\u010dce rozebereme anatomii po\u0161kozen\u00ed z\u00e1loh, prozkoum\u00e1me techniky validace specifick\u00e9 pro datab\u00e1ze a uk\u00e1\u017eeme si, jak vytvo\u0159it automatizovan\u00e9, nepr\u016fst\u0159eln\u00e9 procesy obnovy pro produk\u010dn\u00ed prost\u0159ed\u00ed.<\/p>\n<h2>Anatomie po\u0161kozen\u00ed z\u00e1lohy<\/h2>\n<p>Abyste mohli detekovat po\u0161kozen\u00ed, mus\u00edte nejprve pochopit, jak k n\u011bmu doch\u00e1z\u00ed. Po\u0161kozen\u00ed z\u00e1lohy obecn\u011b spad\u00e1 do dvou kategori\u00ed: fyzick\u00e9 (na \u00farovni infrastruktury) a logick\u00e9 (na \u00farovni aplikace).<\/p>\n<h3>Fyzick\u00e9 po\u0161kozen\u00ed<\/h3>\n<p>K fyzick\u00e9mu po\u0161kozen\u00ed doch\u00e1z\u00ed, kdy\u017e jsou zm\u011bn\u011bny skute\u010dn\u00e9 bity na pam\u011b\u0165ov\u00e9m m\u00e9diu. K tomu m\u016f\u017ee doj\u00edt b\u011bhem procesu \u010dten\u00ed ze zdrojov\u00e9ho disku, b\u011bhem p\u0159enosu po s\u00edti nebo p\u0159i ulo\u017een\u00ed na c\u00edlov\u00e9m \u00falo\u017ei\u0161ti.<br \/>\n*   <strong>Bitov\u00e1 degradace (Bit Rot):<\/strong> Postupn\u00e1 degradace pam\u011b\u0165ov\u00fdch m\u00e9di\u00ed m\u016f\u017ee zp\u016fsobit tich\u00e9 p\u0159eklopen\u00ed bit\u016f.<br \/>\n*   <strong>Chyby p\u0159i p\u0159enosu:<\/strong> I kdy\u017e TCP pou\u017e\u00edv\u00e1 kontroln\u00ed sou\u010dty, jsou notoricky slab\u00e9 (16bitov\u00e9). Prost\u0159ed\u00ed s vysokou propustnost\u00ed mohou zaznamenat tich\u00e9 po\u0161kozen\u00ed dat b\u011bhem p\u0159enosu, kter\u00e9 TCP nedok\u00e1\u017ee zachytit.<br \/>\n*   <strong>Poruchy \u0159adi\u010d\u016f \u00falo\u017ei\u0161\u0165:<\/strong> Hardwarov\u00e9 chyby v RAID \u0159adi\u010d\u00edch nebo SAN struktur\u00e1ch mohou zapsat nesmysln\u00e1 data, zat\u00edmco opera\u010dn\u00edmu syst\u00e9mu nahl\u00e1s\u00ed \u00fasp\u011bch.<\/p>\n<h3>Logick\u00e9 po\u0161kozen\u00ed<\/h3>\n<p>Logick\u00e9 po\u0161kozen\u00ed je pravd\u011bpodobn\u011b nebezpe\u010dn\u011bj\u0161\u00ed, proto\u017ee samotn\u00fd soubor z\u00e1lohy je naprosto v po\u0159\u00e1dku, ale data uvnit\u0159 jsou po\u0161kozen\u00e1.<br \/>\n*   <strong>Garbage In, Garbage Out (GIGO):<\/strong> Pokud m\u00e1 va\u0161e \u017eiv\u00e1 datab\u00e1ze po\u0161kozen\u00fd index nebo nekonzistentn\u00ed str\u00e1nku, v\u00e1\u0161 z\u00e1lohovac\u00ed n\u00e1stroj m\u016f\u017ee tuto po\u0161kozenou str\u00e1nku v\u011brn\u011b zkop\u00edrovat. Z\u00e1lohovac\u00ed \u00faloha prob\u011bhne \u00fasp\u011b\u0161n\u011b, ale obnova sel\u017ee nebo vytvo\u0159\u00ed nefunk\u010dn\u00ed datab\u00e1zi.<br \/>\n*   <strong>Nekompletn\u00ed transakce:<\/strong> Sn\u00edmky (snapshoty) na \u00farovni souborov\u00e9ho syst\u00e9mu po\u0159\u00edzen\u00e9 bez \u0159\u00e1dn\u00e9ho zmrazen\u00ed I\/O datab\u00e1ze (nap\u0159. nepou\u017eit\u00ed <code>FLUSH TABLES WITH READ LOCK<\/code> v MySQL) vedou k nekonzistentn\u00edm str\u00e1nk\u00e1m a neobnoviteln\u00fdm stav\u016fm.<\/p>\n<h2>Proaktivn\u00ed detekce: Kontroln\u00ed sou\u010dty a kryptografick\u00e9 ha\u0161ov\u00e1n\u00ed<\/h2>\n<p>Prvn\u00ed lini\u00ed obrany proti fyzick\u00e9mu po\u0161kozen\u00ed je kryptografick\u00e1 validace. Spol\u00e9hat se na velikost soubor\u016f nebo data \u00faprav je nedostate\u010dn\u00e9.<\/p>\n<h3>Povolen\u00ed kontroln\u00edch sou\u010dt\u016f na \u00farovni datab\u00e1ze<\/h3>\n<p>Modern\u00ed rela\u010dn\u00ed datab\u00e1zov\u00e9 syst\u00e9my (RDBMS) podporuj\u00ed kontroln\u00ed sou\u010dty na \u00farovni str\u00e1nek. Pokud jsou povoleny, datab\u00e1ze vypo\u010d\u00edt\u00e1 kontroln\u00ed sou\u010det pro ka\u017edou str\u00e1nku p\u0159ed jej\u00edm z\u00e1pisem na disk. P\u0159i \u010dten\u00ed str\u00e1nky (a\u0165 u\u017e dotazem nebo z\u00e1lohovac\u00edm procesem) je kontroln\u00ed sou\u010det ov\u011b\u0159en.<\/p>\n<p>Pro <strong>PostgreSQL<\/strong> m\u016f\u017eete povolit kontroln\u00ed sou\u010dty dat b\u011bhem inicializace clusteru:<\/p>\n<pre><code class=\"language-bash\"># Inicializace nov\u00e9ho clusteru PostgreSQL s povolen\u00fdmi kontroln\u00edmi sou\u010dty\ninitdb --data-checksums -D \/var\/lib\/postgresql\/data\n<\/code><\/pre>\n<p><em>Pozn\u00e1mka: Pokud ji\u017e m\u00e1te existuj\u00edc\u00ed cluster PostgreSQL, m\u016f\u017eete pou\u017e\u00edt n\u00e1stroj <code>pg_checksums<\/code> k jejich povolen\u00ed offline.<\/em><\/p>\n<p>Pro <strong>Microsoft SQL Server<\/strong> se ujist\u011bte, \u017ee <code>PAGE_VERIFY<\/code> je nastaveno na <code>CHECKSUM<\/code> (v\u00fdchoz\u00ed nastaven\u00ed v modern\u00edch verz\u00edch, ale u star\u0161\u00edch syst\u00e9m\u016f stoj\u00ed za ov\u011b\u0159en\u00ed):<\/p>\n<pre><code class=\"language-sql\">ALTER DATABASE [ProductionDB] SET PAGE_VERIFY CHECKSUM;\nGO\n<\/code><\/pre>\n<h3>Validace z\u00e1loh v klidov\u00e9m stavu<\/h3>\n<p>Jakmile z\u00e1loha doraz\u00ed na c\u00edlov\u00e9 \u00falo\u017ei\u0161t\u011b, jej\u00ed integrita mus\u00ed b\u00fdt kryptograficky ov\u011b\u0159ena. Podnikov\u00e9 z\u00e1lohovac\u00ed platformy jako CloudSave automaticky vypo\u010d\u00edt\u00e1vaj\u00ed a ov\u011b\u0159uj\u00ed SHA-256 ha\u0161e blok\u016f z\u00e1loh b\u011bhem p\u0159enosu i v klidov\u00e9m stavu. Pokud spravujete vlastn\u00ed skripty, mus\u00edte to implementovat ru\u010dn\u011b:<\/p>\n<pre><code class=\"language-bash\"># Vygenerov\u00e1n\u00ed SHA-256 ha\u0161e po vytvo\u0159en\u00ed z\u00e1lohy\nsha256sum prod_db_backup.tar.gz &gt; prod_db_backup.tar.gz.sha256\n\n# Ov\u011b\u0159en\u00ed ha\u0161e na serveru \u00falo\u017ei\u0161t\u011b\nsha256sum -c prod_db_backup.tar.gz.sha256\n<\/code><\/pre>\n<h2>Techniky validace specifick\u00e9 pro datab\u00e1ze<\/h2>\n<p>R\u016fzn\u00e9 datab\u00e1zov\u00e9 stroje nab\u00edzej\u00ed nativn\u00ed n\u00e1stroje pro ov\u011b\u0159en\u00ed integrity sv\u00fdch z\u00e1lohovac\u00edch artefakt\u016f.<\/p>\n<h3>PostgreSQL: <code>pg_verifybackup<\/code><\/h3>\n<p>N\u00e1stroj <code>pg_verifybackup<\/code>, p\u0159edstaven\u00fd v PostgreSQL 13, p\u0159edstavuje z\u00e1sadn\u00ed zm\u011bnu pro fyzick\u00e9 z\u00e1lohy vytvo\u0159en\u00e9 pomoc\u00ed <code>pg_basebackup<\/code>. \u010cte soubor <code>backup_manifest<\/code> vygenerovan\u00fd b\u011bhem z\u00e1lohov\u00e1n\u00ed a ov\u011b\u0159uje, zda jsou v\u0161echny soubory p\u0159\u00edtomny a zda jejich kontroln\u00ed sou\u010dty souhlas\u00ed.<\/p>\n<pre><code class=\"language-bash\"># Spu\u0161t\u011bn\u00ed verifikace proti adres\u00e1\u0159i fyzick\u00e9 z\u00e1kladn\u00ed z\u00e1lohy\npg_verifybackup \/mnt\/backups\/postgres\/base_backup_20231025\/\n<\/code><\/pre>\n<p>Pokud se v n\u011bkter\u00e9m z datov\u00fdch soubor\u016f zm\u011bnil jedin\u00fd bit, <code>pg_verifybackup<\/code> vyhod\u00ed fat\u00e1ln\u00ed chybu, co\u017e umo\u017en\u00ed va\u0161im monitorovac\u00edm syst\u00e9m\u016fm okam\u017eit\u011b upozornit t\u00fdm DBA.<\/p>\n<h3>Microsoft SQL Server: <code>RESTORE VERIFYONLY<\/code><\/h3>\n<p>SQL Server poskytuje nativn\u00ed p\u0159\u00edkaz pro ov\u011b\u0159en\u00ed fyzick\u00e9 integrity souboru z\u00e1lohy bez nutnosti jeho skute\u010dn\u00e9 obnovy. Kontroluje hlavi\u010dky z\u00e1lohy a validuje kontroln\u00ed sou\u010dty str\u00e1nek (pokud byly b\u011bhem z\u00e1lohov\u00e1n\u00ed povoleny).<\/p>\n<pre><code class=\"language-sql\">RESTORE VERIFYONLY \nFROM DISK = 'Z:BackupsProdDB_Full.bak' \nWITH CHECKSUM;\n<\/code><\/pre>\n<p><strong>Varov\u00e1n\u00ed:<\/strong> <code>RESTORE VERIFYONLY<\/code> pouze potvrzuje, \u017ee soubor z\u00e1lohy je \u010diteln\u00fd a fyzick\u00e9 kontroln\u00ed sou\u010dty souhlas\u00ed. <em>Nezaru\u010duje<\/em> logickou integritu. Pro zaji\u0161t\u011bn\u00ed logick\u00e9 integrity mus\u00edte prov\u00e9st \u00faplnou obnovu a spustit <code>DBCC CHECKDB<\/code>.<\/p>\n<h3>MySQL \/ InnoDB: Percona XtraBackup<\/h3>\n<p>Pro prost\u0159ed\u00ed MySQL jsou fyzick\u00e9 z\u00e1lohy \u010dasto \u0159e\u0161eny pomoc\u00ed Percona XtraBackup. Proces z\u00e1lohov\u00e1n\u00ed spo\u010d\u00edv\u00e1 v kop\u00edrov\u00e1n\u00ed soubor\u016f, ale z\u00e1loha nen\u00ed konzistentn\u00ed, dokud nejsou aplikov\u00e1ny transak\u010dn\u00ed protokoly (redo logs). F\u00e1ze <code>--prepare<\/code> funguje jako vestav\u011bn\u00e1 kontrola integrity.<\/p>\n<pre><code class=\"language-bash\"># P\u0159\u00edprava z\u00e1lohy aplikuje redo logy. \n# Pokud je z\u00e1loha po\u0161kozen\u00e1, tento krok sel\u017ee.\nxtrabackup --prepare --target-dir=\/data\/backups\/mysql\/\n<\/code><\/pre>\n<h2>Zlat\u00fd standard: Automatizovan\u00e9 testov\u00e1n\u00ed obnovy<\/h2>\n<p>Kontroln\u00ed sou\u010dty a verifika\u010dn\u00ed p\u0159\u00edkazy jsou nezbytn\u00e9, ale samy o sob\u011b nesta\u010d\u00ed. Jedin\u00fdm zp\u016fsobem, jak definitivn\u011b prok\u00e1zat, \u017ee je z\u00e1loha \u017eivotaschopn\u00e1, je jej\u00ed obnova. V modern\u00edch DevOps prost\u0159ed\u00edch mus\u00ed b\u00fdt tento proces pln\u011b automatizov\u00e1n.<\/p>\n<p>T\u00edm, \u017ee se z\u00e1lohami zach\u00e1z\u00edte jako s k\u00f3dem, m\u016f\u017eete vytvo\u0159it CI\/CD pipeline pro obnovu datab\u00e1z\u00ed. Tato pipeline by m\u011bla z\u0159\u00eddit do\u010dasnou infrastrukturu, prov\u00e9st obnovu, spustit valida\u010dn\u00ed dotazy a n\u00e1sledn\u011b prost\u0159ed\u00ed odstranit.<\/p>\n<h3>Vytvo\u0159en\u00ed automatizovan\u00e9 pipeline pro obnovu<\/h3>\n<p>N\u00ed\u017ee je p\u0159\u00edklad Bash skriptu, kter\u00fd m\u016f\u017ee b\u00fdt denn\u011b spou\u0161t\u011bn cron \u00falohou nebo CI runnerem (jako GitLab CI nebo GitHub Actions) pro validaci logick\u00e9ho dumpu PostgreSQL.<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\nset -e\n\nBACKUP_FILE=&quot;\/mnt\/storage\/prod_db_latest.dump&quot;\nDB_NAME=&quot;prod_db&quot;\nCONTAINER_NAME=&quot;pg_restore_test&quot;\n\necho &quot;[INFO] Spou\u0161t\u011bn\u00ed automatizovan\u00e9ho testu obnovy...&quot;\n\n# 1. Spu\u0161t\u011bn\u00ed do\u010dasn\u00e9ho kontejneru PostgreSQL\ndocker run --name $CONTAINER_NAME \n  -e POSTGRES_PASSWORD=testpass \n  -d postgres:15\n\n# \u010cek\u00e1n\u00ed na p\u0159ipravenost PostgreSQL\necho &quot;[INFO] \u010cek\u00e1n\u00ed na inicializaci datab\u00e1ze...&quot;\nuntil docker exec $CONTAINER_NAME pg_isready -U postgres; do\n  sleep 2\ndone\n\n# 2. Vytvo\u0159en\u00ed c\u00edlov\u00e9 datab\u00e1ze\ndocker exec $CONTAINER_NAME psql -U postgres -c &quot;CREATE DATABASE $DB_NAME;&quot;\n\n# 3. Proveden\u00ed obnovy\necho &quot;[INFO] Obnova z\u00e1lohy...&quot;\ndocker cp $BACKUP_FILE $CONTAINER_NAME:\/tmp\/backup.dump\ndocker exec $CONTAINER_NAME pg_restore -U postgres -d $DB_NAME -1 \/tmp\/backup.dump\n\n# 4. Spu\u0161t\u011bn\u00ed logick\u00fdch valida\u010dn\u00edch dotaz\u016f\necho &quot;[INFO] Spou\u0161t\u011bn\u00ed valida\u010dn\u00edch dotaz\u016f...&quot;\n# Kontrola, zda tabulka u\u017eivatel\u016f obsahuje v\u00edce ne\u017e 10 000 z\u00e1znam\u016f\nUSER_COUNT=$(docker exec $CONTAINER_NAME psql -U postgres -d $DB_NAME -t -c &quot;SELECT COUNT(*) FROM users;&quot;)\n\nif [ &quot;$USER_COUNT&quot; -lt 10000 ]; then\n    echo &quot;[ERROR] Logick\u00e1 validace selhala. O\u010dek\u00e1v\u00e1no &gt;10000 u\u017eivatel\u016f, nalezeno $USER_COUNT&quot;\n    # Zde aktivujte upozorn\u011bn\u00ed PagerDuty \/ Slack\n    exit 1\nelse\n    echo &quot;[SUCCESS] Logick\u00e1 validace prob\u011bhla \u00fasp\u011b\u0161n\u011b. Po\u010det u\u017eivatel\u016f: $USER_COUNT&quot;\nfi\n\n# 5. Odstran\u011bn\u00ed do\u010dasn\u00e9ho prost\u0159ed\u00ed\necho &quot;[INFO] \u010ci\u0161t\u011bn\u00ed...&quot;\ndocker rm -f $CONTAINER_NAME\n\necho &quot;[INFO] Automatizovan\u00fd test obnovy byl \u00fasp\u011b\u0161n\u011b dokon\u010den.&quot;\n<\/code><\/pre>\n<h3>Co byste m\u011bli validovat?<\/h3>\n<p>P\u0159i prov\u00e1d\u011bn\u00ed automatizovan\u00e9ho testov\u00e1n\u00ed obnovy nekontrolujte pouze to, zda datab\u00e1ze nastartuje. Spou\u0161t\u011bjte valida\u010dn\u00ed dotazy specifick\u00e9 pro aplikaci:<br \/>\n1.  <strong>Po\u010dty \u0159\u00e1dk\u016f:<\/strong> Ujist\u011bte se, \u017ee kl\u00ed\u010dov\u00e9 tabulky maj\u00ed o\u010dek\u00e1van\u00fd po\u010det \u0159\u00e1dk\u016f (nap\u0159. tabulka <code>users<\/code> by nem\u011bla b\u00fdt pr\u00e1zdn\u00e1).<br \/>\n2.  <strong>Ned\u00e1vn\u00e1 data:<\/strong> Vyhledejte z\u00e1znamy vytvo\u0159en\u00e9 za posledn\u00edch 24 hodin, abyste zajistili, \u017ee z\u00e1loha nen\u00ed zastaral\u00e1.<br \/>\n3.  <strong>Referen\u010dn\u00ed integrita:<\/strong> Spou\u0161t\u011bjte skripty pro kontrolu osi\u0159el\u00fdch ciz\u00edch kl\u00ed\u010d\u016f, kter\u00e9 indikuj\u00ed logick\u00e9 po\u0161kozen\u00ed.<\/p>\n<h2>Monitoring a upozor\u0148ov\u00e1n\u00ed na anom\u00e1lie v z\u00e1loh\u00e1ch<\/h2>\n<p>Detekce po\u0161kozen\u00ed d\u0159\u00edve, ne\u017e dojde ke katastrof\u011b, vy\u017eaduje robustn\u00ed pozorovatelnost. Krom\u011b bin\u00e1rn\u00edch stav\u016f \u00fasp\u011bch\/selh\u00e1n\u00ed byste m\u011bli monitorovat metadata sv\u00fdch z\u00e1lohovac\u00edch \u00faloh, abyste odhalili anom\u00e1lie.<\/p>\n<h3>Heuristick\u00fd monitoring<\/h3>\n<p>Integrujte metadata z\u00e1loh do syst\u00e9mu Prometheus a vizualizujte je pomoc\u00ed Grafany. Nastavte upozorn\u011bn\u00ed pro n\u00e1sleduj\u00edc\u00ed heuristiky:<br \/>\n*   <strong>N\u00e1hl\u00fd pokles velikosti:<\/strong> Pokud m\u00e1 va\u0161e denn\u00ed z\u00e1loha konzistentn\u011b 500 GB a dne\u0161n\u00ed z\u00e1loha m\u00e1 50 MB, \u00faloha mohla sice skon\u010dit \u00fasp\u011b\u0161n\u011b (Exit Code 0), ale pravd\u011bpodobn\u011b z\u00e1lohovala pouze pr\u00e1zdn\u00e9 sch\u00e9ma.<br \/>\n*   <strong>Anom\u00e1lie v trv\u00e1n\u00ed:<\/strong> Pokud z\u00e1loha, kter\u00e1 obvykle trv\u00e1 2 hodiny, skon\u010d\u00ed za 5 minut, n\u011bco bylo vynech\u00e1no. Naopak, pokud trv\u00e1 10 hodin, m\u016f\u017eete m\u00edt degradaci diskov\u00e9ho I\/O, kter\u00e1 m\u016f\u017ee v\u00e9st k po\u0161kozen\u00ed.<br \/>\n*   <strong>Akumulace WAL\/archivn\u00edch log\u016f:<\/strong> Pokud va\u0161e datab\u00e1ze generuje Write-Ahead Logs (WAL), ale z\u00e1lohovac\u00ed syst\u00e9m je nearchivuje dostate\u010dn\u011b rychle, riskujete mezeru v \u0159et\u011bzci obnovy k ur\u010dit\u00e9mu bodu v \u010dase (PITR).<\/p>\n<h2>Implementace pravidla 3-2-1 s kontrolami integrity<\/h2>\n<p>Pr\u016fmyslov\u00fd standard, pravidlo z\u00e1lohov\u00e1n\u00ed 3-2-1 (3 kopie dat, 2 r\u016fzn\u00e1 m\u00e9dia, 1 mimo lokalitu), je \u00fa\u010dinn\u00fd pouze tehdy, jsou-li v\u0161echny kopie ov\u011b\u0159eny.<\/p>\n<p>Zde vyu\u017eit\u00ed podnikov\u00e9ho \u0159e\u0161en\u00ed, jako je CloudSave, dramaticky sni\u017euje provozn\u00ed re\u017eii. M\u00edsto psan\u00ed a \u00fadr\u017eby slo\u017eit\u00fdch bash skript\u016f pro ka\u017ed\u00fd datab\u00e1zov\u00fd uzel se CloudSave integruje p\u0159\u00edmo do va\u0161\u00ed infrastruktury a automatizuje \u017eivotn\u00ed cyklus 3-2-1. Poskytuje nem\u011bnn\u00e9 \u00falo\u017ei\u0161t\u011b (chr\u00e1n\u00edc\u00ed p\u0159ed ransomwarem) a obsahuje vestav\u011bn\u00e9 pl\u00e1ny automatizovan\u00e9ho ov\u011b\u0159ov\u00e1n\u00ed obnovy. CloudSave m\u016f\u017ee automaticky spustit izolovan\u00e1 sandboxov\u00e1 prost\u0159ed\u00ed, p\u0159ipojit z\u00e1lohu, spustit va\u0161e vlastn\u00ed SQL valida\u010dn\u00ed skripty a nahl\u00e1sit stav zdrav\u00ed zp\u011bt na v\u00e1\u0161 centr\u00e1ln\u00ed panel.<\/p>\n<h2>Z\u00e1v\u011br<\/h2>\n<p>Po\u0161kozen\u00e9 datab\u00e1zov\u00e9 z\u00e1lohy jsou tich\u00fdm zabij\u00e1kem, kter\u00fd m\u016f\u017ee zni\u010dit podnik\u00e1n\u00ed. Spol\u00e9hat se pouze na <code>Exit Code 0<\/code> z\u00e1lohovac\u00edho skriptu je nebezpe\u010dn\u00fd hazard.<\/p>\n<p>Abyste skute\u010dn\u011b ochr\u00e1nili sv\u00e1 produk\u010dn\u00ed prost\u0159ed\u00ed, mus\u00edte p\u0159ijmout strategii hloubkov\u00e9 obrany:<br \/>\n1.  Povolte kontroln\u00ed sou\u010dty na \u00farovni str\u00e1nek v r\u00e1mci va\u0161eho datab\u00e1zov\u00e9ho stroje.<br \/>\n2.  Ihned po vytvo\u0159en\u00ed z\u00e1lohy pou\u017eijte nativn\u00ed verifika\u010dn\u00ed n\u00e1stroje (<code>pg_verifybackup<\/code>, <code>RESTORE VERIFYONLY<\/code>).<br \/>\n3.  Monitorujte metadata z\u00e1loh (velikost, trv\u00e1n\u00ed) kv\u016fli heuristick\u00fdm anom\u00e1li\u00edm.<br \/>\n4.  Implementujte automatizovan\u00e9, do\u010dasn\u00e9 testov\u00e1n\u00ed obnovy jako sou\u010d\u00e1st sv\u00e9 ka\u017edodenn\u00ed provozn\u00ed pipeline.<\/p>\n<p>P\u0159echodem od pasivn\u00ed mentality \u201enastavit a zapomenout\u201c k modelu \u201ekontinu\u00e1ln\u00ed validace obnovy\u201c zajist\u00edte, \u017ee a\u017e nevyhnuteln\u011b dojde ke katastrof\u011b, budou va\u0161e data p\u0159ipraven\u00e1, spolehliv\u00e1 a pln\u011b obnoviteln\u00e1.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Detect Corrupted Database Backups Before Disaster","rank_math_description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","rank_math_focus_keyword":"corrupted database backups","footnotes":""},"categories":[383],"tags":[3322,3323,3324,384,892,2129,3325],"class_list":["post-4665","post","type-post","status-publish","format-standard","hentry","category-database-backup","tag-backup-testing","tag-corrupted-backups","tag-data-integrity","tag-data-loss-prevention","tag-database-administration","tag-devops","tag-restore-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.7 (Yoast SEO v27.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Detect Corrupted Database Backups Before Disaster<\/title>\n<meta name=\"description\" content=\"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tich\u00fd zabij\u00e1k: Jak odhalit po\u0161kozen\u00e9 z\u00e1lohy datab\u00e1ze d\u0159\u00edve, ne\u017e ude\u0159\u00ed katastrofa\" \/>\n<meta property=\"og:description\" content=\"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/\" \/>\n<meta property=\"og:site_name\" content=\"CloudSave\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-14T19:31:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-15T15:10:21+00:00\" \/>\n<meta name=\"author\" content=\"shervinrv\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napsal(a)\" \/>\n\t<meta name=\"twitter:data1\" content=\"shervinrv\" \/>\n\t<meta name=\"twitter:label2\" content=\"Odhadovan\u00e1 doba \u010dten\u00ed\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/\"},\"author\":{\"name\":\"shervinrv\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\"},\"headline\":\"Tich\u00fd zabij\u00e1k: Jak odhalit po\u0161kozen\u00e9 z\u00e1lohy datab\u00e1ze d\u0159\u00edve, ne\u017e ude\u0159\u00ed katastrofa\",\"datePublished\":\"2026-06-14T19:31:06+00:00\",\"dateModified\":\"2026-06-15T15:10:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/\"},\"wordCount\":1656,\"publisher\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\"},\"keywords\":[\"backup testing\",\"corrupted backups\",\"data integrity\",\"data loss prevention\",\"Database Administration\",\"devops\",\"restore testing\"],\"articleSection\":[\"Database Backup\"],\"inLanguage\":\"cs\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/\",\"url\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/\",\"name\":\"Detect Corrupted Database Backups Before Disaster\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/#website\"},\"datePublished\":\"2026-06-14T19:31:06+00:00\",\"dateModified\":\"2026-06-15T15:10:21+00:00\",\"description\":\"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/#breadcrumb\"},\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tich\u00fd zabij\u00e1k: Jak odhalit po\u0161kozen\u00e9 z\u00e1lohy datab\u00e1ze d\u0159\u00edve, ne\u017e ude\u0159\u00ed katastrofa\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/#website\",\"url\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/\",\"name\":\"CloudSave\",\"description\":\"CloudSave\",\"publisher\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"cs\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/#\\\/schema\\\/person\\\/286beefe68281d868e87f46603a7ae4d\",\"name\":\"shervinrv\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@id\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\",\"url\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\",\"contentUrl\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\",\"width\":859,\"height\":150,\"caption\":\"shervinrv\"},\"logo\":{\"@id\":\"https:\\\/\\\/cloudsave.app\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/Logo_Name-2.png\"},\"sameAs\":[\"http:\\\/\\\/cloudsave.app\"],\"url\":\"https:\\\/\\\/cloudsave.app\\\/cs\\\/knowledge-base\\\/author\\\/shervinrv\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Detect Corrupted Database Backups Before Disaster","description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/","og_locale":"cs_CZ","og_type":"article","og_title":"Tich\u00fd zabij\u00e1k: Jak odhalit po\u0161kozen\u00e9 z\u00e1lohy datab\u00e1ze d\u0159\u00edve, ne\u017e ude\u0159\u00ed katastrofa","og_description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","og_url":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/","og_site_name":"CloudSave","article_published_time":"2026-06-14T19:31:06+00:00","article_modified_time":"2026-06-15T15:10:21+00:00","author":"shervinrv","twitter_card":"summary_large_image","twitter_misc":{"Napsal(a)":"shervinrv","Odhadovan\u00e1 doba \u010dten\u00ed":"10 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/#article","isPartOf":{"@id":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/"},"author":{"name":"shervinrv","@id":"https:\/\/cloudsave.app\/cs\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d"},"headline":"Tich\u00fd zabij\u00e1k: Jak odhalit po\u0161kozen\u00e9 z\u00e1lohy datab\u00e1ze d\u0159\u00edve, ne\u017e ude\u0159\u00ed katastrofa","datePublished":"2026-06-14T19:31:06+00:00","dateModified":"2026-06-15T15:10:21+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/"},"wordCount":1656,"publisher":{"@id":"https:\/\/cloudsave.app\/cs\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d"},"keywords":["backup testing","corrupted backups","data integrity","data loss prevention","Database Administration","devops","restore testing"],"articleSection":["Database Backup"],"inLanguage":"cs"},{"@type":"WebPage","@id":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/","url":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/","name":"Detect Corrupted Database Backups Before Disaster","isPartOf":{"@id":"https:\/\/cloudsave.app\/cs\/#website"},"datePublished":"2026-06-14T19:31:06+00:00","dateModified":"2026-06-15T15:10:21+00:00","description":"** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.","breadcrumb":{"@id":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/#breadcrumb"},"inLanguage":"cs","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cloudsave.app\/cs\/knowledge-base\/tich%c3%bd-zabij%c3%a1k-jak-odhalit-po%c5%a1kozen%c3%a9-z%c3%a1lohy-datab%c3%a1ze-d%c5%99%c3%adve-ne%c5%be-ude%c5%99%c3%ad-katastrofa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudsave.app\/cs\/"},{"@type":"ListItem","position":2,"name":"Tich\u00fd zabij\u00e1k: Jak odhalit po\u0161kozen\u00e9 z\u00e1lohy datab\u00e1ze d\u0159\u00edve, ne\u017e ude\u0159\u00ed katastrofa"}]},{"@type":"WebSite","@id":"https:\/\/cloudsave.app\/cs\/#website","url":"https:\/\/cloudsave.app\/cs\/","name":"CloudSave","description":"CloudSave","publisher":{"@id":"https:\/\/cloudsave.app\/cs\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudsave.app\/cs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"cs"},{"@type":["Person","Organization"],"@id":"https:\/\/cloudsave.app\/cs\/#\/schema\/person\/286beefe68281d868e87f46603a7ae4d","name":"shervinrv","image":{"@type":"ImageObject","inLanguage":"cs","@id":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png","url":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png","contentUrl":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png","width":859,"height":150,"caption":"shervinrv"},"logo":{"@id":"https:\/\/cloudsave.app\/wp-content\/uploads\/2026\/02\/Logo_Name-2.png"},"sameAs":["http:\/\/cloudsave.app"],"url":"https:\/\/cloudsave.app\/cs\/knowledge-base\/author\/shervinrv\/"}]}},"_links":{"self":[{"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/posts\/4665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/comments?post=4665"}],"version-history":[{"count":2,"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/posts\/4665\/revisions"}],"predecessor-version":[{"id":5731,"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/posts\/4665\/revisions\/5731"}],"wp:attachment":[{"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/media?parent=4665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/categories?post=4665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudsave.app\/cs\/wp-json\/wp\/v2\/tags?post=4665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}