Raz som zničil svoju produkčnú databázu s ospalým UPDATE a nemal som žiadne nové zálohy. Stratil ~30% príjmov, veľa nervov a príliš veľa hodín. Table of content O open-source záložnom projekte PostgreSQL Príbeh o tom, ako som zlomil DB a nedokázal sa úplne zotaviť Ako som začal budovať projekt Roadmap a budúce plány Bezpečnostné pravidlá DB, ktoré teraz uplatňujem na každý projekt Vložiť O projekte Open Source PostgreSQL Backup Otvoril som zdrojový vlastný nástroj na monitorovanie a zálohovanie PostgreSQL. Budujem a používam ho už o niečo viac ako dva roky. Spočiatku som ho vyvinul pre svoju dennú prácu a niekoľko projektov pre domáce zvieratá. Až nedávno ma zasiahlo, že projekt naozaj vyzerá dosť dobre na to, aby sa ukázal verejne, už pomáha mojim priateľom a mohol by byť užitočný pre komunitu. Go, gin, gorm, React, TypeScript, PostgreSQL – všetko bolo zabalené do Dockeru. Stack: V podstate je to obal UI okolo štandardu vo vlastnom formáte, s množstvom doplnkov, ktoré robia UX menej bolestivým a pridávajú integrácie s externými úložnými a notifikačnými službami. pg_dump What it can do: Plánujte zálohy (napr. každý deň o 4:00 alebo každú nedeľu o polnoci) pre PostgreSQL 13-17. Ukladajte komprimované zálohy lokálne na serveri, v S3 alebo Google Drive (NS servery a FTP sú na cestnej mape). Po každej zálohe vám pošleme správu, že všetko je v poriadku... alebo nie. Ping vás v Discord, e-mail, Telegram a Slack, ak DB prestane reagovať. upozorňuje iba po n neúspešných kontrolách (aby sa predišlo falošným pozitívam v dôsledku porúch siete) a zobrazí graf dostupnosti. Samozrejme, projekt je zadarmo, open source (MIT), self-hosted a prichádza s humánnym web UI. Projektová stránka : https://postgresus.com/ https://postgresus.com/ Na GitHub: https://github.com/RostislavDugin/postgresus https://github.com/RostislavDugin/postgresus P.S. Ak sa projekt zdá užitočný a máte účet GitHub, Prvé hviezdy sú naozaj najťažšie získať. I’d really appreciate a Príbeh o tom, ako som zlomil DB a nedokázal sa úplne zotaviť V roku 2023 som mal projekt s domácimi zvieratami, ktorý bol obalený ChatGPT (3.5). V podstate to bol len predaj prístupu k API s pekným rozhraním používateľa a skratkami. Projekt rástol, potom začal klesať a nakoniec som ho predal. na iný server. PgBackRest V okamihu, keď projekt pasívne priniesol asi 1 500 dolárov a dosiahol vrchol príjmov, stalo sa niečo zlé: . I broke the data in the DB Bola to piatková noc. Bol som unavený, okamžite som prepínal z kódovania na odpovede na správy, úplne nezameraný. zákazník ma požiadal o zmenu e-mailu pre jeho účet. Pomocou SSH a Vyskočil som do produkčného VPS a napísal som niečo ako: psql UPDATE users SET email = 'customer@email.com' WHERE email ILIKE '%%'; Potom som sa rozptýlil, aby som skopíroval správny e-mail z chatu a... stlačil Enter na "autopilot". . AFFECTED ROWS: 10 000 Bolo to len raz za mnoho, mnoho rokov, keď som doslova cítil studený pot na chrbte. Samozrejme, vedel som, že by som mal urobiť Najprv možno nastaviť a Ale ako v každom hororovom príbehu, základné bezpečnostné pravidlá boli ignorované a všetko sa zmenilo na katastrofu. Disclaimers SELECT SAVEPOINT A tu je kľúčový detail: platobné systémy majú prísne pravidlá – ak používateľ nemôže pristupovať k plateným službám, je to obrovské porušenie. Bežal som na zálohy - a studený pot sa ešte zhoršil. Najnovšia záloha bola asi mesiac stará 😐. Žiadny spôsob, ako sa zotaviť z toho. Od tej doby prišli nové platby, predplatné boli zrušené (to znamená, že som nemohol len obnoviť všetkých - niektorí ľudia už odišli), atď. Nejako som počas zvyšku noci a rána dokázal rekonštruovať asi 65% databázy pomocou skriptov pomocou používateľských ID. Pre zvyšok som musel zrušiť predplatné a vrátiť ľudí. Lekcia sa naučila. Ako som začal budovať projekt Rozhodovací čas: Budem si vytvárať nástroj na zálohovanie, ktorý ma každý deň ping, že všetko je v poriadku! A obnoviť v niekoľkých kliknutiach! A blackjack a microservices! Prvá verzia Postgresusa som vytvorila asi za mesiac v jazyku Java. Začala som ju používať. Nechajte niekoľko priateľov vyskúšať. Ukázalo sa: je to užitočné. Niekoľkokrát tie zálohy ma zachránili (a nielen mňa). Názov „Postgresus“ sa objavil len pred dvoma mesiacmi, predtým, než bol repo jednoducho nazývaný . „pg-web backup“ Práve teraz, Postgresus rieši tieto problémy pre mňa: Je to hlavný záložný nástroj, ak je projekt malý alebo žije na VPS namiesto služby cloud DB. Je to nástroj pre zálohovanie, ak je projekt veľký a žije v DBaaS s vlastnými cloudovými zálohami.Zálohuje sa „v prípade“ (ak cloud zomrie, je zablokovaný, DB je náhodne odstránený spolu s cloudovými zálohami v dôsledku neplatenia atď.).Vždy je lepšie mať duplicitnú zálohu ako skončiť v tom nešťastnom 0,01% keď dokonca aj cloud zmizne a nie je žiadny plán B. Roadmap a budúce plány, ktoré plánujem posunúť projekt v týchto smeroch: Add more PostgreSQL-specific load monitoring (pg_stat_activity, pg_stat_system, pg_locks) with a friendly UI. Think of it as an alternative to postgres_exporter + Grafana, but bundled out of the box with backups. Observe and alert on slowdown of key queries. In my work project, there are tables and specific functions that are too early to optimize (if the hypothesis fails, we might drop them), but they could grow and slow down. For example, if INSERT INTO users (...) VALUES (...) starts taking more than 100 ms while the flow of new users is growing - we'll get a notification and go optimize. Collect query stats by CPU time and execution frequency to see where resources are actually going and what’s worth improving. Add more channels for notifications and more storage providers. Bezpečnostné pravidlá DB, ktoré teraz uplatňujem na každý projekt Dovoľte mi pripomenúť vám dve kúsky ľudovej múdrosti: Správcovia systému spadajú do dvoch kategórií: tí, ktorí ešte nevykonávajú zálohy a tí, ktorí to už robia. Správcovia systému spadajú do dvoch kategórií: tí, ktorí ešte nevykonávajú zálohy a tí, ktorí to už robia. Nerobte len zálohy - pravidelne testujte, či z nich môžete skutočne obnoviť. Nerobte len zálohy - pravidelne testujte, či z nich môžete skutočne obnoviť. Od doby, čo som vyhodil DB môjho projektu, som bez výnimky prijal tieto pravidlá: Pred akýmkoľvek UPDATE vždy spustite SELECT a uistite sa, že sa dotýkate presne 1-2 riadkov. Ak je zmena veľká, nastavte SAVEPOINT manuálne. Vykonajte "požiarne poplachy" s obnovou aspoň raz za 3 mesiace: obnoviť z cloudovej kópie a z lokálnej kópie. takže keď je to dôležité, nezistíte, že nie sú žiadne dáta, zálohy nefungujú, alebo obnovy trvajú navždy. V posledných dvoch rokoch sa vyskytlo niekoľko prípadov, keď sme potrebovali obnoviť zo zálohovania – zakaždým, keď to fungovalo, a to v cloude aj prostredníctvom služby Postgresus. Vložiť Dúfam, že tento projekt bude užitočný pre širokú škálu vývojárov, DBA a ľudí DevOps. Plánujem ho ďalej vyvíjať, aby bol ešte užitočnejší v reálnych scenároch. Som rád, že počujem akékoľvek návrhy a spätnú väzbu na zlepšenie.