Kerran hävitin tuotantotunnisteeni uneliaalla UPDATE: llä ja minulla ei ollut tuoreita varmuuskopioita. Menetin ~30% tuloista, hermojen joukon ja niin liian monta tuntia. Table of content Avoimen lähdekoodin PostgreSQL-varmuuskopiointi Tarina siitä, miten rikkoin DB: n enkä voinut täysin toipua Miten aloitin projektin rakentamisen Roadmap ja tulevaisuuden suunnitelmat DB-turvallisuussäännöt, joita noudatan nyt kaikissa hankkeissa Ympäröi Avoimen lähdekoodin PostgreSQL-varmuuskopiointi Olen avannut oman työkalun seurantaan ja varmuuskopiointiin PostgreSQL. Olen rakentanut ja käyttänyt sitä hieman yli kaksi vuotta. Aluksi olen kehittänyt sen päivittäiseen työhöni ja pari lemmikkiprojektia varten. Vasta äskettäin se osui minuun, että hanke todella näyttää tarpeeksi hyvältä näyttää julkisesti, se auttaa jo ystäviäni ja voisi olla hyödyllistä yhteisölle. Go, gin, gorm, React, TypeScript, PostgreSQL – kaikki pakattu Dockerissa. Stack: Pohjimmiltaan se on UI-kokoelma standardin ympärillä mukautetussa muodossa, jossa on joukko lisäosia, jotka tekevät UX: stä vähemmän tuskallisen ja lisäävät integraatioita ulkoisiin tallennus- ja ilmoituspalveluihin. pg_dump What it can do: Suunnittele varmuuskopioita (esim. joka päivä klo 4 aamulla tai joka sunnuntai keskiyöllä) PostgreSQL 13–17:lle. Säilytä pakatut varmuuskopiot paikallisesti palvelimessa, S3- tai Google Drive -laitteessa (NS-palvelimet ja FTP ovat etenemissuunnitelmassa). Lähetä sinulle viesti jokaisen varmuuskopion jälkeen, että kaikki on kunnossa... tai ei. Ilmoitukset ovat valinnaisia. Ping sinut Discordissa, sähköpostissa, Telegramissa ja Slackissa, jos DB lakkaa vastaamasta. Se varoittaa vain n epäonnistuneiden tarkastusten jälkeen (verkkohäiriöiden aiheuttamien väärien positiivisten tulosten välttämiseksi) ja näyttää käytettävyysgraafin. Luonnollisesti hanke on ilmainen, avoimen lähdekoodin (MIT), itse isännöity ja mukana inhimillinen web UI. Hankkeen sivusto: https://postgresus.com/ https://postgresus.com/ Käyttäjä Github: https://github.com/RostislavDugin/postgresus https://github.com/RostislavDugin/postgresus P.S. Jos projekti näyttää hyödylliseltä ja sinulla on GitHub-tili, ⭐️ Ensimmäiset tähdet ovat todella vaikeimpia saada. I’d really appreciate a Tarina siitä, miten rikkoin DB: n enkä voinut täysin toipua Vuonna 2023 minulla oli lemmikkiprojekti, joka oli ChatGPT: n pakkaus (3.5). Periaatteessa se oli vain API-käyttöoikeuden jälleenmyynti mukavalla käyttöliittymällä ja pikakuvakkeilla. Projekti kasvoi, sitten alkoi laskea ja lopulta myin sen. DB varmuuskopioitiin kerran päivässä konsolin kaltaisella työkalulla toiseen palvelimeen. PgBackRest Kun hanke tuotti noin 1 500 dollaria passiivisesti ja osui tulojen huipulle, tapahtui jotain pahaa: . I broke the data in the DB Se oli perjantai-iltana. olin väsynyt, olin välittömästi siirtymässä koodauksesta viesteihin vastaamiseen, täysin keskittymätön. SSH:n kautta ja Hyppäsin tuotantoon VPS:ään ja kirjoitin jotain tällaista: psql UPDATE users SET email = 'customer@email.com' WHERE email ILIKE '%%'; Sitten minua häiritsi kopioida oikea sähköposti chatista ja... napauta Enter "autopilotti". . AFFECTED ROWS: 10 000 Se oli ainoa kerta monien, monien vuosien aikana, kun tunsin kirjaimellisesti kylmän hikoilun selässäni. tietenkin, tiesin, että minun olisi pitänyt tehdä Ensinnäkin, ehkä asettaa a Mutta kuten kaikissa kauhutarinoissa, perusturvallisuussääntöjä jätettiin huomiotta, ja kaikki muuttui katastrofiksi. Disclaimers SELECT SAVEPOINT Kaikki käyttäjän sähköpostiviestit kirjoitettiin yli.Ja tässä on keskeinen yksityiskohta: maksujärjestelmillä on tiukat säännöt - jos käyttäjä ei pääse maksettuun palveluun, se on valtava rikkomus. Juoksin varmuuskopioihin - ja kylmä hikoilu paheni vieläkin. Viimeisin varmuuskopio oli noin kuukausi vanha . Ei ole mitään keinoa palauttaa siitä. Siitä lähtien uusia maksuja tuli, tilaukset peruutettiin (mikä tarkoittaa, että en voinut vain palauttaa kaikkia - jotkut ihmiset olivat jo lähteneet), jne. Jotenkin, lopun yön ja aamun aikana onnistuin rekonstruoimaan noin 65% DB: stä skriptien avulla käyttäjätunnuksia käyttäen. Oppitunti on opittu. Miten aloitin projektin rakentamisen Päätöksen aika: Aion rakentaa itselleni varmuuskopiointityökalun, joka pinguttaa minua joka päivä, että kaikki on kunnossa! Ja palauttaa muutamassa napsautuksessa! Ja blackjack ja microservices! Tein ensimmäisen version Postgresuksesta noin kuukaudessa Java. Aloin käyttää sitä. Anna muutaman ystävän kokeilla sitä. Jatka kiillotusta tarpeideni ja heidän palautteensa perusteella. Kävi ilmi: se on hyödyllistä. Muutamia kertoja nämä varmuuskopiot pelasivat minut (eikä vain minua). Nimi "Postgresus" ilmestyi vain kaksi kuukautta sitten, ennen kuin repo kutsuttiin yksinkertaisesti . ”pg-web backup” Tällä hetkellä Postgresus ratkaisee nämä ongelmat minulle: Se on tärkein varmuuskopiointityökalu, jos projekti on pieni tai asuu VPS:llä pilvipalvelun sijaan. Se varmuuskopioi "vain tapauksessa" (jos pilvi kuolee, se estetään, DB poistetaan vahingossa yhdessä pilvipohjaisten varmuuskopioiden kanssa maksamatta jättämisen vuoksi jne.). Roadmap & tulevaisuuden suunnitelmat suunnittelen työntää hanketta näihin suuntiin: 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. DB-turvallisuussäännöt, joita noudatan nyt kaikissa hankkeissa Haluan muistuttaa teitä kahdesta kansan viisaudesta: Järjestelmän ylläpitäjät kuuluvat kahteen luokkaan: ne, jotka eivät vielä varmuuskopioi ja ne, jotka jo tekevät. Järjestelmän ylläpitäjät kuuluvat kahteen luokkaan: ne, jotka eivät vielä varmuuskopioi ja ne, jotka jo tekevät. Älä vain tee varmuuskopioita - testaa säännöllisesti, että voit todella palauttaa niistä. Älä vain tee varmuuskopioita - testaa säännöllisesti, että voit todella palauttaa niistä. Hankkeeni DB: n roskaamisen jälkeen olen hyväksynyt nämä säännöt poikkeuksetta: Ennen päivitystä suorita aina SELECT ja varmista, että kosketat täsmälleen 1-2 riviä. Jos muutos on suuri, aseta SAVEPOINT manuaalisesti. Suorita ”palohälytykset” palauttamalla vähintään 3 kuukauden välein: palauta pilvipalvelusta ja paikallisesta kopiota.Joten kun se on tärkeää, et huomaa, ettei ole tietoja, varmuuskopioita ei toimi, tai palautukset kestävät ikuisesti. Viimeisten kahden vuoden aikana on ollut muutamia tapauksia, joissa meidän piti palauttaa varmuuskopioista – joka kerta, kun se toimi, sekä pilvessä että Postgresuksen kautta. Ei ongelmia, koska prosessi oli jo testattu. Ympäröi Toivon, että tämä projekti on hyödyllinen monille kehittäjille, DBA:lle ja DevOps-ihmisille. Aion kehittää sitä edelleen, jotta se olisi entistä hyödyllisempi todellisissa skenaarioissa.