Skip to content

Ukuphela Kokukhiqiza Ngengozi, Okhiye Abavuzayo be-API, noma Ingqalasizinda Yefu Esusiwe

Wonke unjiniyela we-software, umlawuli wezinhlelo, kanye nesisebenzi esikude sobuchwepheshe ekugcineni babhekana nesikhathi sokwehla lapho umyalo uhloselwe localhost noma staging ikhiphe ngokumelene production: okungakhonjwanga DELETE ngaphandle a WHERE isigatshana, a DROP TABLE noma terraform destroy, a git push --force esula igatsha eliyinhloko, noma isibopho somphakathi esiqukethe i-AWS ebukhoma noma okhiye abayimfihlo be-Stripe. Okuhlukanisa i-hiccup yemizuzu engu-15 kusuka enhlekeleleni yedatha eqeda umsebenzi ukumisa izandla zakho ngokushesha, ukuqandisa kwethrafikhi yokubhala ngaphambi kokuba amabhulokhi esitoreji abhalwe ngaphezulu, kanye nokusebenzisa umthetho olandelwayo wokutakula.

Yenza lokhu manje

  1. Misa izandla zakho futhi UNGAgijimi imiyalo "yokulungisa" ngokuxhamazela, qala kabusha iseva egciniwe, noma vala iwindi letheminali yakho. Ibhafa yakho yamanje yokuskrola, umlando wegobolondo, kanye nendawo .git/logs i-reflog iqukethe izitembu zesikhathi eziqondile zokwenziwe, ama-SHA hash, nama-ID wensiza adingekayo ukuze kuhlehliswe umonakalo. Kopisha konke ukuskrola emuva kwetheminali yakho kufayela lombhalo eliphephile kuqala.
  2. Memezela Isigameko Esibucayi-1 (SEV-1) esehlakalweni sethimba lakho lesiteshi se-Slack/Teams phakathi nemizuzu emi-2. Ungalokothi uchithe imizuzu engu-45 uzama ukulungisa ngokuyimfihlo isizindalwazi sokukhiqiza esiphukile sisodwa kuyilapho amakhasimende enza amaphutha angu-500 futhi imisebenzi engemuva ezenzakalelayo yonakalisa amathebula asele. Cacisa i-on-call Database Administrator (DBA) noma i-Site Reliability Engineer (SRE) ngokushesha.
  3. Uma uvuze ukhiye we-API, .env ifayela, noma imfihlo yefu ku-repo yasesidlangalaleni ye-GitHub, HOXA ukhiye kudeshibhodi yomhlinzeki KUQALA (ngaphambi kokuzama ukubhala kabusha umlando we-Git). Amabhothithi azenzakalelayo aklwebha i-GitHub Firehose API yomphakathi futhi asebenzise okhiye abantshontshiwe be-AWS, i-OpenAI, Stripe, ne-GCP phakathi nesekhondi3 lika-1 git push. Ukususa ifayela ekubopheni kwesibili noma ukuphusha ngenkani akuvimbi umhlaseli osevele enze ukhiye.
  4. Uma ugijime ngephutha DELETE, UPDATE, noma DROP kusizindalwazi sokukhiqiza, sika isicelo BHALA ithrafikhi ngokushesha. Faka uhlelo lokusebenza lwewebhu Kumodi Yokulungisa noma uhoxise izimvume zokubhala zomsebenzisi wohlelo lokusebenza ukuze okwenziwayo okusha okungenayo kungasusi amakhophi afile angavaliwe noma enze kube nzima Ukutholwa Kwephoyinti Lokusebenza (PITR).
  5. Ungalokothi ugijime VACUUM, OPTIMIZE TABLE, noma git gc --prune=now ngemva kokususwa ngephutha. Kokubili isizindalwazi esihlobene (i-PostgreSQL MVCC, MySQL InnoDB) kanye ne-Git zigcina imigqa esusiwe futhi izintandane ziyazibophezela kudiski kuze kube yilapho iphasi yokuqoqwa kukadoti/i-vacuum ifuna kabusha amakhasi.
  6. Uma a terraform destroy noma umbhalo wokususa ifu usasebenza kutheminali yakho, cindezela Ctrl + C KANYE (hhayi kabili) noma bulala ithokheni yeseshini ye-IAM. Iyacindezela Ctrl + C kanye nokucupha ukuguquguquka kwezwe okuhle ukuze i-Terraform ilondoloze ingxenye .tfstate ngalokho okusekhona; ngokucindezela Ctrl + C iphoqa kabili ukukhipha isisu okungenamusa okungase konakalise noma kulahlekelwe ifayela lakho lendawo.

Danger

Iphutha Eliyingozi elingu-#1 Ngemva Kokuvuza Imfihlo ku-Git: Ungalokothi ucabange ukuthi uphephile ngoba ugijime git rm .env && git commit -m "remove secret" && git push. Konke ukuzinikela okungokomlando ku-Git kuhlala kufundeka esidlangalaleni kuze kube phakade kugrafu yokuzibophezela, futhi noma ubhala phezu kwegatsha nge git push --force, umsebenzi wezintandane we-SHA uhlala ufinyeleleka nge-GitHub API kanye neziseshi zengobo yomlando yomphakathi (GHArchive). Noma iyiphi imfihlo ethinta ikhosombe elikude ngisho nangesekhondi elingu-1 kufanele ithathwe njengeyonakala engamaphesenti angu-100 futhi ihoxiswe/ezungeziswe kumhlinzeki okhiphayo ngokushesha.

Ukugeleza komsebenzi we-Emergency triage: ukwehla kwesizindalwazi, i-git force-push, noma ukuvuza okuyimfihlo

Landela lesi sihlahla sesinqumo ukuze uhambise imizuzu yakho yokuqala emi-5 yokuqukatha kobuchwepheshe.

flowchart TD
    A["Isimo Esiphuthumayo Sobunjiniyela Bokukhiqiza"] --> B{"Yikuphi ukwehluleka okusanda kwenzeka?"}
    B -->|"I-SQL DROP / DELETE / UPDATE ngengozi ku-Prod"| C["Misa Uhlelo Lokubhala / Imodi Yokulungisa; Ungasebenzisi i-VACUUM"]
    B -->|"Ukhiye we-API oputshuziwe / .env / Ukhiye Oyimfihlo ku-Git"| D["Hoxisa futhi Zungezisa Imfihlo Kudeshibhodi Yamafu Ngaphakathi kwamasekhondi angu-60"]
    B -->|"Ngengozi git push --force / Igatsha elisusiwe"| E["Qalisa i-git reflog Endaweni; Kopisha Ukuzinikela Okuhle Kokugcina kwe-SHA"]
    B -->|"I-terraform ngengozi ibhubhisa / Isusiwe i-S3 noma i-VM"| F["Bulala Iseshini ye-IAM noma Cindezela u-Ctrl+C Kanye; Gcina i-.tfstate"]
    C --> G["Rekhoda Isitembu sesikhathi se-UTC Esinembile; Qalisa i-Cloud PITR Clone noma i-Binlog Flashback"]
    D --> H["Audit CloudTrail / Finyelela Izingodo ze-Spin-Ups Engagunyaziwe; Hlanza i-Repo nge-git-filter-repo"]
    E --> I["Imibuzo ye-GitHub Events / Reflog & Buyisela Igatsha nge-git push --force-with-lease"]
    F --> J["Bheka i-S3 Versioning Delete Markers, i-EBS Snapshots, noma i-Cloud Recycle Bin"]

Ingxenye 1: Isizindalwazi sokukhiqiza ngengozi DROP, TRUNCATE, noma DELETE ngaphandle WHERE

Uma umbuzo olimazayo we-SQL ufika kusizindalwazi sokukhiqiza bukhoma, indlela yokuphinda ithole incike enjinini yakho yesizindalwazi (i-PostgreSQL, MySQL/MariaDB, SQL Server, MongoDB, noma DynamoDB) kanye nokuthi isitatimende besiyi DML (DELETE / UPDATE) noma DDL (DROP TABLE / TRUNCATE) ukusebenza.

Isinyathelo 1: Rekhoda ngqo isitembu sesikhathi se-UTC wehle uye kwesesibili

Ngaphambi kokuthinta noma iyiphi ikhonsoli eyisipele, bhala phansi isikhathi esiqondile samanje se-UTC (date -u ku-terminal ye-Linux/macOS, noma SELECT NOW(); ngaphakathi kokwaziswa kwe-SQL) bese ulinganisela isekhondi ngqo ngaphambi kokuba umbuzo wakho olimazayo uqale ukusebenza. I-Point-In-Time Recovery (PITR) isebenza ngokudlala kabusha Ilogi ye-Write-Ahead yesizindalwazi (WAL ku-PostgreSQL) noma i-Binary Log (binlog ku-MySQL) kuze kube T_minus_1_second ngaphambi kokuba umbuzo wakho omubi ufike.

Isinyathelo sesi-2: Misa imisebenzi yasemuva kanye nokubhala kwezicelo (Vikela ama-tuples e-MVCC)

Ku-PostgreSQL, yenza DELETE FROM users; noma UPDATE orders SET status = 'cancelled'; ingabe ayisuli empeleni i-byte eyodwa yedatha efayeleni letafula kudiski ngokushesha. Ngoba i-PostgreSQL isebenzisa i-Multi-Version Concurrency Control (MVCC)**, a DELETE umane usetha i xmax Isihloko se-ID yokwenziwayo ku-tuple yomugqa ngamunye ukuze uyiphawule njengengabonakali emibuzweni yesikhathi esizayo, okushiya idatha yomugqa ephelele ihlezi injalo ngaphakathi base/ heap kuze kube yilapho i-autovacuum ifika ukuze iphawule isikhala ukuthi singasetshenziswa kabusha.

  • Uma uku-self-hosted noma i-VM PostgreSQL futhi ungenayo ikhophi yasenqolobaneni yakamuva: Ngokushesha xhuma njengo superuser futhi ukhubaze i-autovacuum kulelo thebula (ALTER TABLE table_name SET (autovacuum_enabled = false);), noma misa isevisi ye-PostgreSQL bese uthatha isifinyezo sesistimu yefayela elingahluziwe (LVM / EBS isithombe) se /var/lib/postgresql/data umkhombandlela. Izandiso ezikhethekile ze-PostgreSQL (pg_dirtyread) ingafunda futhi ithole amaphesenti angu-100 emigqa esusiwe noma yokubuyekeza kusengaphambili ngokuqondile kuthebula lenqwaba elingavaliwe ngamaminithi.

I-matrix yokubuyisela isizindalwazi ngenjini neplathifomu yamafu

I-Database Platform Indlela Yokubuyisela Esheshayo Yengozi DROP / DELETE Isinyathelo Ngesinyathelo Ukwenziwa Kwezobuchwepheshe
AWS RDS / Aurora (PostgreSQL / MySQL) I-Automated Point-In-Time Recovery (PITR) kuya Esimeni Esisha (Ibuyisela kunoma yimuphi umzuzwana ngaphakathi kwewindi lokugcinwa losuku olungu-1 kuya kwezingu-35) 1. Vula i-AWS RDS Console -> Izipele ezizenzakalelayo -> Khetha i-Prod DB yakho -> Buyisela ukuze ukhombe ngesikhathi.
2. Khetha Idethi nesikhathi ngokwezifiso bese ufaka isitembu sesikhathi se-UTC esinembile imizuzwana eyi-10 kuya kwengama-30 NGAPHAMBI kombuzo wakho omubi.
3. I-RDS iphenya i-parallel clone (prod-db-recovery) emizuzwini eyi-10 kuye kwengama-25. Lahla ithebula elingaphelele (pg_dump -t my_table noma mysqldump) kusuka ku-clone yokutakula futhi uyingenise uyibuyisele ku-Prod DB ebukhoma (noma ushintshe i-DNS CNAME/iphoyinti lokugcina ku-clone etholiwe).
I-Google Cloud SQL / Isizindalwazi se-Azure I-Point-In-Time Clone Ku-GCP Console -> Khetha isibonelo se-Cloud SQL -> Clone -> Khetha Clone kusuka endaweni yangaphambilini (UTC) -> Khipha imigqa engekho ku-clone nge pg_dump / mysqldump noma Isisonga Sedatha Yangaphandle (postgres_fdw).
Supabase / Neon / PlanetScale Igatsha Elisheshayo / Ukubuyiselwa Kohambo Lwesikhathi I-Neon: Dala ikhophi-on-ubhala esheshayo Igatsha kusuka kusitembu sesikhathi somlando (Timestamp noma LSN 1 iminithi edlule) emizuzwaneni engu-2 bese ukopisha ithebula emuva.
I-Supabase: Ideshibhodi -> Isizindalwazi -> Izipele -> Khomba Ekubuyiselweni Kwesikhathi.
I-PlanetScale: Sebenzisa inkinobho ye-schema buyisela / buyisela emuva inkinobho yephoyinti lokuhlola ku-UI yesicelo sokuphakelwa.
Izibambele ngokwakho i-MySQL / MariaDB (Nge binlog_format = ROW) I-Binlog Inversion (binlog2sql / mysqlbinlog --flashback) Lapho i-MySQL isebenza nge binlog_format = ROW (okuzenzakalelayo kusukela ku-MySQL 5.7.7), njalo DELETE noma UPDATE ibhala isithombe esiphelele sangaphambi nangemuva sayo yonke irowu ethintekile kulogi kanambambili (mysql-bin.0000XX). Gijima binlog2sql --flashback (noma i-MariaDB mysqlbinlog --flashback) kuleso sikhundla sokungena ngqo ukuze ukhiqize ngokuzenzakalelayo okuphambene ngqo INSERT noma UPDATE Isikripthi se-SQL bese usidlala futhi kumasekhondi angu-60 ngaphandle kokubuyisela isipele esigcwele.
I-Snowflake / I-BigQuery (I-Cloud Data Warehouses) ** Uhambo Lwesikhathi Lwe-SQL Okwakhelwe Ngaphakathi (AT / BEFORE)** Kudingeka ukubuyisela ikhophi yasenqolobaneni enguziro. Buza ithebula njengoba belikhona emizuzwini emi-5 edlule:
Ikhekheba leqhwa: CREATE OR REPLACE TABLE my_table AS SELECT * FROM my_table AT(OFFSET => -60*5); (noma UNDROP TABLE my_table;).
Umbuzo Omkhulu: SELECT * FROM dataset.my_table FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 10 MINUTE);
I-MongoDB Atlas / Replica Set I-Oplog PITR Buyisela noma Ilungu Lesibili Elibambezelekile Ku-MongoDB Atlas: Isipele -> Buyisela -> Khomba Ngesikhathi (idlala kabusha local.oplog.rs iqoqo kuze kufike kusekhondi eliqondile ngaphambi kokuwa).

Ingxenye 2: Okhiye be-API abaputshuziwe, .env izimfihlo, noma okhiye abayimfihlo abazibophezele ku-Git

Uma wenze iphutha ngephutha .env ifayela, i id_rsa Ukhiye we-SSH, ifayela le-akhawunti yesevisi ye-Firebase/GCP ye-JSON, ukhiye oyimfihlo we-Stripe (sk_live_...), noma i-AWS AKIA... ukhiye wokufinyelela ku-Git, landela lokhu kulandelana okuyizigaba ezimbili okuqondile: Isigaba A (Bulala ukhiye emafini) kuqala, kanye Isigaba B (Khuhla inqolobane ye-Git) okwesibili.

Isigaba A: Isiqukathi sesiqinisekiso sefu semizuzwana engama-60 (Yenza lokhu KUQALA)

1. AWS (AKIA... I-ID Yokhiye Wokungena + Ukhiye Wokungena Oyimfihlo)

Lapho ama-bot entshontsha ukhiye we-AWS ku-GitHub, umbhalo wawo ozenzakalelayo ushaya i-akhawunti yakho phakathi nemizuzwana engu-10 ukuze ujikelezise izimo ze-GPU EC2 ezinosayizi omkhulu (p4d.24xlarge / g5.48xlarge) kuzo zonke izifunda zomhlaba wonke ezingama-30+ ze-AWS (okuhlanganisa nezifunda zokukhetha ukungena njenge-Jakarta, Osaka, kanye ne-Middle East) ukuze imayini ye-cryptocurrency, noma idale umsebenzisi we-IAM ongemuva nge AdministratorAccess ngaphambi kokuthi ususe ukhiye wangempela.

  1. Yenza kungasebenzi futhi Susa ukhiye wokufinyelela oputshuziwe ngokushesha:
    • Vula Ikhonsoli ye-AWS -> I-IAM -> Abasebenzisi -> [Umsebenzisi Osengozini] -> Ukuqinisekisa ukuphepha -> Okhiye bokufinyelela -> Chofoza Yenza kungasebenzi, bese Susa (noma nge-CLI: aws iam update-access-key --access-key-id AKIAIOSFODNN7EXAMPLE --status Inactive --user-name MyUser).
  2. Namathisela okubekela sobala DenyAll inqubomgomo yokunqanda okwesikhashana aws sts amathokheni esikhathi:
    • Isicupho esibalulekile: Ngisho nangemva kokususa i- AKIA... Ukhiye wokufinyelela we-IAM, uma umhlaseli esefonile sts:GetSessionToken noma sts:AssumeRole phakathi nemizuzwana yokuqala engu-30, eyesikhashana ASIA... ithokheni yeseshini ihlala isemthethweni kuze kube yihora elingu-1 kuye kwayi-12 ngaphandle uma unamathisela inqubomgomo ebhalwe ngembaba ethi Yenqaba (njengokuthi AWSCompromisedKeyQuarantineV2 noma inqubomgomo yokuphika konke yamathokheni akhishwe ngaphambi kwesitembu sesikhathi samanje) kumsebenzisi noma indima.
  3. Hlola i-AWS CloudTrail ukuze uthole ukuphikelela kwangemuva:
    • Vula I-AWS CloudTrail -> Umlando womcimbi bese uhlunga nge-I-ID Yokungena Ebucayini noma Igama lomsebenzisi emahoreni angu-2 adlule.
    • Hlola ngokukhethekile lezi zingcingo ezi-5 zokuphikelela: CreateUser, CreateAccessKey, AttachUserPolicy, AssumeRole, futhi RunInstances. Hlola okuthi I-AWS Cost Explorer kanye ne-EC2 Global View kuzo zonke zonke izifunda ukuze unqamule noma yiziphi izimo ezimbi, futhi uvule Ikesi Lokusekela Le-AWS (I-akhawunti Nezinkokhelo -> I-akhawunti Esengozini). I-AWS ivamise ukuyekelela izikweletu zekhompiyutha eziwumgunyathi uma ubika ukuvuza okubalulekile futhi unqamula izimo ngokushesha.

2. Umthende (sk_live_...), i-OpenAI (sk-...), SendGrid, Twilio, kanye ne-Slack Tokens

  • Umucu: Iya kokuthi Onjiniyela -> Okhiye be-API -> Okhiye abajwayelekile / Okhiye Abakhawulelwe -> Chofoza amachashazi amathathu (...) -> Roll key. Khetha "Kuphelelwa yisikhathi manje" (noma setha iwindi lomusa lehora elingu-1 kuphela uma usebenzisa ukhiye omusha ezintweni eziguquguqukayo zendawo yakho yokukhiqiza njengamanje).
  • I-OpenAI / Anthropic: Iya kudeshibhodi Yokhiye Be-API bese uchofoza okuthi Hoxisa / Susa ngokushesha ukuze ama-proxy scrapers azenzakalelayo angakwazi ukukhipha izinkulungwane zamadola zamakhredithi ethokheni ye-LLM ngemizuzu.
  • Amathokheni Okufinyelela Komuntu Siqu we-GitHub (ama-PAT), Amathokheni Alungisiwe Kahle, Nokhiye Bokuthumela: Iya kokuthi Izilungiselelo ze-GitHub -> Izilungiselelo zikanjiniyela -> Amathokheni okufinyelela komuntu siqu bese uchofoza okuthi Susa / Hoxisa kuthokheni eputshuziwe, bese uhlola Ilogi Yokuhlola yenhlangano yakho (Settings -> Audit log) ngoba repo.clone, repo.access, noma ukudalwa kwe-webhook okungagunyaziwe phakathi newindi lokudalulwa.
  • Izintambo zokuxhuma kusizindalwazi (DATABASE_URL / postgres:// / mongodb+srv://) kanye nama-URL we-Redis: Shintsha iphasiwedi yomsebenzisi wesizindalwazi ngaphakathi kwenjini yolwazi (ALTER USER app_user WITH PASSWORD 'new_random_secret';), bese inqamula konke ukuxhumana okuvuliwe okusebenzayo okwamanje kwe-TCP okuyingxenye yemininingwane endala (SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'app_user' AND pid <> pg_backend_pid(); ku-PostgreSQL), ngoba ukushintsha igama-mfihlo lesizindalwazi ku-PostgreSQL noma ku-MySQL kuvimbela kuphela ukungena okusha futhi kushiye uxhumano lomhlaseli oseluvele luvuliwe bukhoma kuze kube lukhahlelwa.

Isigaba B: Ukukhuhla imfihlo emlandweni we-Git (git filter-repo kanye nokukhishwa kwenqolobane ye-GitHub)

Uma ukhiye oputshuziwe usufile futhi usuzungezisiwe ekukhiqizweni, hlanza iyunithi yezinhlamvu eyimfihlo emlandweni wakho wokuzibophezela we-Git ukuze izikena zokuphepha ziyeke ukuxwayisa:

  1. Bhala kabusha umlando wendawo yokugcina usebenzisa git filter-repo (noma i-BFG Repo-Cleaner):
    • Thatha isibuko esisha esingenalutho senqolobane yakho bese ususa ifayela eliputshuziwe (isibonelo, .env) kuzo zonke izibophezelo zomlando kuwo wonke amagatsha nomaki:
      # 1. Remove a specific file (.env) from all commits in history:
      git filter-repo --invert-paths --path .env
      
      # OR 2. Replace a specific secret string with ***REMOVED*** everywhere:
      echo "sk_live_YOUR_SECRET_STRING==>***REMOVED***" > replacements.txt
      git filter-repo --replace-text replacements.txt
      
  2. Phusha ngokuphoqelela umlando ohlanziwe futhi ukhiphe inqolobane ye-GitHub Donsa Isicelo / Ukubuka kokuzibophezela:
    • Phusha umlando ohlanziwe ubuyele kokwangempela (git push origin --force --all futhi git push origin --force --tags).
    • Isinyathelo sokuzibophezela esibalulekile se-GitHub: Ngisho nangemva kokuphoqelela ukuphusha umlando ohlanziwe, noma ubani owazi i-URL endala enezinhlamvu ezingu-40 yenza i-SHA URL (github.com/org/repo/commit/abc1234...) usengabuka isithembiso esidala esingahlanzekile ku-UI yewebhu ye-GitHub kuze kube i-GitHub isebenzisa ukuqoqwa kukadoti ohlangothini lweseva. Xhumana no-GitHub Support (noma sebenzisa Ukwelulekwa Kwezokuphepha / Ingosi Yokusekela yenqolobane) nesibopho esidala esidala se-SHA bese ubacela ukuthi bakhiphe isithembiso esihoxisiwe/ezilengayo kunqolobane yewebhu futhi baqalise. git gc endaweni yokugcina ekude.

Ingxenye 3: Ukuhlehlisa iphutha git push --force, git reset --hard, noma igatsha elisusiwe

Uma ugijime ngephutha git push --force futhi wesula izibophezelo zabalingani bakho beqembu main, noma wagijima git reset --hard HEAD-5 futhi ulahlekelwe usuku olugcwele lomsebenzi wendawo, ungethuki, ngoba u-Git cishe akalokothi asuse izinto ezizibophezele ngokushesha.

Kungani ukuzibophezela kwakho "okulahlekile" kusahlezi ngokuphephile ngaphakathi .git/logs (I-Reflog)

Noma nini lapho udala isibopho, shintsha amagatsha, wehlise phansi, noma usetha kabusha, i-Git iqopha okwedlule HEAD kanye nezikhombisi ze-SHA-1/SHA-256 zegatsha ngaphakathi kweleja yendawo ebizwa ngokuthi Reference Log (git reflog), futhi igcina izinto eziyizintandane zangempela kudiski okungenani izinsuku ezingu-14 kuya kwezingu-90 ngaphambi kokuthi ukuqoqwa kukadoti kuzikhiphe.

Isinyathelo ngesinyathelo Izindlela zokupheka zokuthola izimo eziphuthumayo ze-Git

Isimo 1: Ugijimile git push --force futhi weqe origin/main

  1. Thola isibopho esiqondile se-SHA lokho origin/main ukhombe kwesokudla ngaphambi kokucindezela kwakho:
    • Indlela A (Hlola i-reflog yakho yasendaweni yokulandelela kude): Qalisa lo myalo kutheminali lapho ophushe khona:
      git reflog show origin/main
      
      Uzobona okukhiphayo okufana nalokhu:
      a1b2c3d (HEAD -> main, origin/main) refs/remotes/origin/main@{0}: update by push
      9f8e7d6 refs/remotes/origin/main@{1}: fetch: fast-forward
      
      Lapha, 9f8e7d6 (origin/main@{1}) kuyisibopho esiqondile origin/main ibilungile ngaphambi kokuthi i-force-push yakho ikuqedele.
    • Indlela B (Buza noma yimuphi ozakwabo ongakagijimanga git pull okwamanje): Noma yimuphi umuntu osebenza naye olande main ekuqaleni namuhla kusenomlando wokuzibophezela ophelele ohlezi endaweni yangakubo origin/main igatsha.
    • Indlela C (Buza ilogu yemicimbi ye-GitHub REST API): Uma i-reflog yakho yasendaweni ingenaso isimo esikude, buza nge-API yemicimbi yokuphusha ye-GitHub ukuze ubone "before" I-SHA hash yomcimbi we-force-push:
      gh api /repos/OWNER/REPO/events --jq '.[] | select(.type=="PushEvent") | {actor: .actor.login, before: .payload.before, head: .payload.head, time: .created_at}'
      
  2. Buyisela origin/main ekuzinikeleni kwangaphambilini kwe-SHA ngokuphephile:
    • Qinisekisa ukuzibophezela kubukeka kulungile (git log -n 5 9f8e7d6), bese uphushela leyo SHA ngqo emuva kusilawuli kude main igatsha usebenzisa --force-with-lease:
      git push --force-with-lease origin 9f8e7d6:refs/heads/main
      

Isimo sesi-2: Ugijimile git reset --hard noma ususe igatsha lendawo ngaphambi kokuphusha

  1. Gijima git reflog endaweni yangakini:
    git reflog --date=iso
    
  2. Thola i-SHA yokubophezela ngaphambi kokuthi reset: ukungena (isb., HEAD@{2}: commit: feat: add payment webhook), futhi udale igatsha elisha lokuhlenga elikhomba ngqo kuleyo SHA:
    git switch -c rescue-branch HEAD@{2}
    
  3. Kungenzekani uma ulahlekelwe ifayela elingabophezelekile olilahlile git added (esiteji) bese isula nge git reset --hard?
    • Isikhathi ogijima ngaso git add myfile.ts, I-Git icindezela futhi ibhale okuqukethwe okuphelele kwalelo fayela kukho .git/objects/ njenge-blob elengayo, ngisho noma ungakaze ugijime git commit. Ithole ngokufaka kuhlu wonke ama-blobs alengayo ahlelwe ngesikhathi sokulungiswa:
      git fsck --lost-found
      # Inspect the recovered blobs written into .git/lost-found/other/
      

Ingxenye 4: Ngengozi terraform destroy noma isitoreji samafu esisusiwe (S3, EBS, VMs)

Uma ipayipi le-Infrastructure-as-Code (IaC) noma umyalo we-CLI owenziwe ngesandla uqala ukudiliza izinsiza zamafu zokukhiqiza:

  1. Misa ukwenza ngokuphepha:
    • Uma isebenza endaweni kutheminali yakho, cindezela Ctrl + C KANYE ngakho i-Terraform iqeda ucingo lwayo lwamanje lwe-API futhi ibhala okubuyekeziwe .tfstate ifayela ngokuhlanzekile. Uma isebenza ngaphakathi kwe-GitHub Actions, GitLab CI, noma Terraform Cloud, chofoza okuthi Khansela Run futhi ukhubaze ngokushesha indima yomgijimi we-CI AWS/GCP IAM kukhonsoli yamafu ukuze ukususwa kwe-API endizeni kuhluleke AccessDenied.
  2. Yenza ikhophi yasenqolobaneni yamanje .tfstate ifayela ngokushesha:
    • Landa ikhophi yendawo yefayela lakho lesifunda esikude (terraform state pull > emergency-backup.tfstate) bese uhlola inguqulo yebhakede le-S3 kubhakede lakho lesifunda se-Terraform ukuze ubambe inguqulo yesimo sangaphambilini emizuzwini eyi-10 edlule.
  3. Hlola umhlinzeki wamafu "Soft-Delete" kanye namanetha okuphepha e-Recycle Bin:
    • I-Amazon S3 (Enikwe amandla Inguqulo Yebhakede): Isusa amafayela ebhakedeni lenguqulo ye-S3 (aws s3 rm --recursive) ayisusi** into eyodwa; imane ifaka i-zero-byte Susa Umaka phezu kwento ngayinye. Susa Omaka Delete (nge-S3 Batch Operations noma iPython enemigqa emi-5 boto3 script) ukuze ubuyisele amaphesenti angu-100 amafayela akho ngokushesha.
    • Izifinyezo ze-AWS EBS Nezifinyezo ze-RDS (Recycle Bin): Hlola I-AWS Recycle Bin kukhonsoli uma imisiwe, bese uhlola Izipele ze-AWS ezigcina amanzi.
    • I-Google Cloud Platform (GCP) kanye ne-Microsoft Azure: Amaphrojekthi E-GCP Asusiwe kanye Namaqembu Ensiza Ye-Azure / Ama-Vault Abalulekile / Ama-Akhawunti Esitoreji ane-Soft Delete enikwe amandla ahlala etholakala 7 kuya kwezingu-30 izinsuku ngokuchofoza okukodwa kokubuyisela kukhonsoli.

Ungayithola kanjani kabusha i-Terraform ephukile .tfstate ifayela lombuso noma ungenise kabusha ingqalasizinda eyizintandane

Lapho a terraform apply noma ngephutha terraform destroy kuphazamiseka phakathi nendiza, noma lapho othile esusa ngephutha ifayela lesimo esikude ku-S3/GCS, ingqalasizinda yakho yefu ingena esimweni esiyingozi sobuchopho obuhlukene lapho ezinye izinsiza zisekhona ku-AWS/GCP kuyilapho ezinye zingekho .tfstate:

  1. Ithola isilawuli kude esibhalwe phezu noma esisusiwe .tfstate ifayela kusuka ku-S3 / GCS Versioning:
    • Ungalokothi uhlele i-JSON mathupha .tfstate ifayela ngesandla kusihleli sombhalo ngaphandle uma zonke ezinye izinketho zehlulekile, ngenxa yokuthi eyodwa ayifani "serial" noma "lineage" Iyunithi yezinhlamvu ye-UUID izovimba i-Terraform ukuthi ingaphinde isebenze.
    • Vula ibhakede lakho le-S3 (noma ibhakede le-Google Cloud Storage / Terraform Cloud Workspace States ithebhu) lapho kuhlala khona isilawuli kude, chofoza okuthi Bonisa izinguqulo guqula phezulu kukhonsoli ye-S3, thola terraform.tfstate inguqulo ifakwe isitembu sesikhathi ngaphambi kokuthi kusebenze kabi, yilande, bese uyibuyisela emuva ngokuphepha njengesimo esisha:
      # Push a recovered historical state file back to the remote backend safely
      terraform state push recovered-pre-incident.tfstate
      
  2. Ukuphula i-state lock lock (Error acquiring the state lock):
    • Lapho ukhipha isisu esibi terraform destroy nge Ctrl + C noma ubulale umgijimi olengayo we-CI, ithebula le-DynamoDB elikude noma ifayela lokukhiya i-GCS lihlala likhiyiwe yi-ID yenqubo efile.
    • Okokuqala qinisekisa kudeshibhodi yakho ye-CI kanye nozakwenu ukuthi i-zero ezinye izinqubo ze-Terraform zisasebenza kuleyo ndawo yokusebenza, bese ukhulula ukhiye oyintandane usebenzisa I-ID Yokukhiya i-UUID ephrintwe kumlayezo wephutha:
      terraform force-unlock <LOCK_ID_UUID>
      
  3. Ukwakha kabusha imvelo ecekeleke phansi ngaphandle kokuvuselela imininingwane egciniwe (terraform import):
    • Uma a terraform destroy usule Izibhalansi zakho Zomthwalo Wokucela (aws_lb) kanye namanodi ezisebenzi ze-ECS/EKS ngaphambi kokuwumisa, okulula ukukulungisa: vele ugijime terraform apply futhi i-Terraform izophinda idale wonke amanethiwekhi angenasisekelo futhi ibale izendlalelo kusukela ekuqaleni emizuzwini emi-5 kuyilapho ishiya imininingo egciniwe ye-RDS esele ingakathintwa.
    • Uma ifayela lakho lesifunda lilahlekelwe umkhondo wesizindalwazi esisekhona noma ibhakede le-S3, sebenzisa i- **import {} ibhulokhi yokumisa ** (Terraform 1.5+) noma terraform import aws_db_instance.prod_db my-rds-instance-id ukubophezela insiza yefu ekhona ibuyele kufayela lakho lesimo ngaphandle kokuyicekela phansi, bese ugijima terraform plan ukuqinisekisa "0 to destroy" ngaphambi kokufaka isicelo.

Ingxenye 5: Ungaxhumana kanjani nomphathi wakho ngokunqamuka bese uhola ukuhlolwa kokuhlolwa kwesidumbu okungasoleki

Uma ubangela isigameko sokukhiqiza ngenkathi usebenza ukude, isithunzi sakho sobungcweti sichazwa hhayi ngephutha ngokwalo, kodwa ngesivinini sakho sokubeka izinto obala, ukuxhumana okuzolile, nokulungiswa okuhlelekile.

Imithetho emi-3 Egolide Yokuxhumana Kwesigameko

  1. Yisho amaqiniso, umthelela, kanye ne-ETA ngaphandle kokufihla, ukubambezeleka, noma ukusola: Bika iphutha phakathi nemizuzu emi-2 yokutholwa.
  2. Hlukanisa "Ukunciphisa" (Ukumisa ukopha) kokuthi "Ukulungisa Imbangela Yembangela": Esimeni esiphuthumayo, umgomo wakho okuwukuphela kwawo ukubuyisela isevisi (ukubuyisela emuva ukusetshenziswa okubi, ukwehluleka ukudlulela kusizindalwazi sesizindalwazi se-PITR, noma ukucisha ifulegi lesici). Londoloza ukwenziwa kabusha kwekhodi okujulile kwakusasa.
  3. Thumela izibuyekezo ezijwayelekile eziyimizuzu engu-15 zokushaya kwenhliziyo esiteshini sesigameko ukuze abaphathi nokwesekwa kwamakhasimende bazi ukuthi kukhona olawulayo.

Kopisha-namathisela Iskripthi Sesimemezelo Sesigameko Seqembu

[ISEV-1 ISENZAKALO] Ukukhiqizwa [Isevisi / Igama Lesizindalwazi] Umthelela - Kwenzekeni: Ngo [HH:MM UTC], ngenkathi isasebenza [brief technical action, e.g., a data migration script], okungahlosiwe [DELETE / config change / force-push] yasetshenziswa ekukhiqizeni [database / service]. - Umthelela Wamanje Wekhasimende: [e.g., Checkout API is returning 500 errors / User profile updates are paused]. - Ukunciphisa Ngokushesha Kuyaqhubeka: 1. Bhala ithrafikhi ku [table/service] imisiwe okwesikhashana ukuze kulondolozwe ubuqotho bedatha. 2. I-Poin-In-Time Recovery (PITR) yenza ku [HH:MM:SS UTC] (Amasekhondi angu-10 ngaphambi komcimbi) okwamanje iyaqhubeka [AWS RDS / GCP]. - Umphathi Wesigameko: @[Your Name] (isizwa ngu @[DBA/On-Call SRE]). - Isibuyekezo Esilandelayo: Emaminithini angu-15 ([HH:MM UTC]) noma ngokushesha nje lapho i-clone yokutakula ifika ku-inthanethi.

Uhlu lokuhlola lokuvikela ubunjiniyela lwangemva kwesigameko (Olwe-Blameless Post-Mortem yakho)

Lonke iphutha lomuntu ekukhiqizweni empeleni liyigebe lokuklama kwezinhlelo ** (uma umyalo wokugcina wekhophi enamathiselwe ungayeka ukukhiqiza ngaphandle kwe- guardrail, uhlelo belulindele ukwehluleka). Phakamisa futhi usebenzise lezi zindlela zokuqapha ezibambekayo kudokhumenti yakho yokufa ngosuku olulandelayo:

  • Ikhodi yombala kanye nezimpawu zokukhiqiza isiqalo (kube-ps1, psql .psqlrc): Lungiselela igobolondo lakho kanye neklayenti le-SQL ukuze noma yikuphi ukuxhumana kukho PRODUCTION ibonisa okubomvu ngokugqamile [PROD-DB] ngokushesha futhi iqala yonke iseshini ye-PostgreSQL esebenzayo ngaphakathi kwe- BEGIN; block transaction ngokuzenzakalelayo (noma amasethi SET default_transaction_read_only = on;).
  • Vumela safe-updates (--i-am-a-dummy) kumaklayenti e-MySQL/MariaDB: Engeza safe-updates ku [mysql] phakathi -/.my.cnf ngakho-ke i-MySQL iyenqaba ngokuphelele ukwenza noma iyiphi UPDATE noma DELETE isitatimende esintula a WHERE isigatshana esiyinhloko noma a LIMIT.
  • Vula DeletionProtection = true kuzo zonke izizindalwazi zokukhiqiza ze-RDS, amabhakede e-S3, kanye nezinsiza ezisezingeni eliphezulu ze-Terraform (lifecycle { prevent_destroy = true }).
  • Sebenzisa Imithetho Yokuvikela Igatsha Le-Git main / production: Khubaza Allow force pushes futhi Allow deletions emagatsheni avikelwe ku-GitHub/GitLab ukuze ngisho nabaphathi bendawo yokugcina bangakwazi git push --force ku main.
  • Faka izingwegwe zokuskena eziyimfihlo ngaphambi kokuzibophezela (gitleaks noma trufflehog) kanye ne-GitHub Push Protection: Vimbela ukuzibophezela okuqukethe AKIA, sk_live_, noma .env amaphethini endaweni ngaphambili git commit ngisho uyaphumelela.

Imibuzo ejwayelekile ukubuzwa

Ingabe ngizoxoshwa ngokuwisa ngephutha ithebula lesizindalwazi sokukhiqiza noma ukubangela ukuphela kwesayithi?

Ezinhlanganweni zobunjiniyela ezinempilo ezisebenzisa isiko lokuphepha elingasoleki (okujwayelekile kuwo wonke amaqembu esimanjemanje, i-DevOps, ne-SRE), onjiniyela abaxoshwa ngenxa yamaphutha abantu abaqotho ekukhiqizeni, inqobo nje uma bebika isigameko ngokushesha futhi basize ukubuyisela isevisi. Abaholi bobunjiniyela bayaqaphela ukuthi uma umthuthukisi omncane noma ophezulu enezimvume ezingavuthiwe kanye nokuntuleka kwemigqa yokugada yokuwisa ithebula lokukhiqiza elinomyalo owodwa ongabuyekeziwe, imbangela eyinhloko kuwukushiyeka ekulawuleni ukufinyelela nasekusetshenzisweni kwamathuluzi, hhayi ububi. Empeleni, unjiniyela osanda kuzibonela ngokwakhe lokho kuphazamiseka manje usengumuntu oyedwa ophephe kakhulu eqenjini mayelana nalolo hlelo. Okuwukuphela kwendlela yokuziphatha ehlala iholela ekunqanyulweni ukuzama ukufihla umcimbi wokulahleka kwedatha, ukususa amalogi okucwaninga, noma ukuqamba amanga phakathi nophenyo lwesigameko.

Kungani kungafanele ngishintshe ngokushesha ithrafikhi yami yokukhiqiza ebukhoma ngiyise kusizindalwazi esisanda kubuyiselwa se-Point-In-Time Recovery (PITR)?

Uma usule kuphela imigqa ngephutha etafuleni elilodwa (isibonelo, i- `user_preferences` ithebula) ngo-14:00 UTC, futhi kuthatha imizuzu engu-20 ukuzungeza i-PITR clone ebuyiselwe ku-13:59:50 UTC, imininingwane yakho egciniwe yokukhiqiza bukhoma kungenzeka iqhubekile nokucubungula izinkulungwane zama-oda nezinkokhelo zamakhasimende amasha ku- `orders` ithebula phakathi kuka-14:00 no-14:20 UTC. Uma ujikijela ngokungaboni yonke indawo yokugcina ye-DNS yakho ku-13:59:50 PITR clone, uzosula leyo mizuzu engama-20 yama-oda ekhasimende amasha sha. Kunalokho, gcina isizindalwazi esiyinhloko ku-inthanethi (okubhalwe kumiswe okwesikhashana kuphela esicini esiphukile) bese uthekelisa nje imigqa engekho kusukela ku-clone engu-13:59:50 ye-PITR emuva kuthebula lokukhiqiza elibukhoma.

Uma ngenza indawo yokugcina ye-GitHub Eyimfihlo imizuzu emibili ngemuva kokuphusha ngephutha i- .env ifayela, ingabe ngisadinga ukuzungezisa bonke okhiye be-API?

Yebo, amaphesenti angu-100 alabo khiye kusafanele ahoxiswe futhi azungeziswe ngokushesha. Konke ukuzibophezela okuphushelwe endaweni yokugcina ye-GitHub yomphakathi kusakazwa ngesikhathi sangempela nge-API yomphakathi ye-GitHub Events ("i-Firehose") futhi ikhonjwa phakathi nemizuzwana ngawo womabili amasevisi asemthethweni engobo yomlando zokuphepha (njenge-GHArchive) kanye nama-bots anonya asebenzisa i-credential-harvesting 24/7 kuwo wonke amanethiwekhi amafu. Ukuphenyisisa ukubonakala kwenqolobane kusukela Esidlangalaleni kuya Eyimfihlo emizuzwini emibili kamuva akusuli ikhophi esele ilandiwe ama-automated scrapers.

Kwenza kanjani git push --force-with-lease vimbela ukuphuma uma kuqhathaniswa git push --force?

Uma ugijima standard `git push --force`, I-Git ibhala phezu ngaphandle kwemibandela igatsha elikude negatsha lakho lasendaweni, licekele phansi buthule noma yikuphi ukuzibophezela kozakwethu ophushelwe kulelo gatsha ngaleso sikhathi. Lapho usebenzisa `git push --force-with-lease` (futhi okungcono kakhulu, `--force-if-includes`), i-Git ihlola iseva yesilawuli kude kuqala ukuze iqinisekise ukuthi ithiphu yegatsha elikude lisafana ncamashi nesibopho SHA umshini wakho wendawo ogcine ukulandwa. Uma osebenza naye noma ipayipi le-CI liphushe isibopho esisha egatsheni elikude kusukela ekulandeni kwakho kokugcina, `--force-with-lease` ukhipha isisu ngokuphepha ngesixwayiso "solwazi oludala" esikhundleni sokusula umsebenzi wabo.


Imithombo ihloliwe

  • Isikhungo Sikazwelonke Samazinga Nobuchwepheshe (NIST, United States): NIST SP 800-61 Rev. 2 / Rev. 3 Umhlahlandlela Wokusingatha Isigameko Sokuvikeleka Kwekhompyutha kanye Nokuqukethwe Kokuzifaka engozini.
  • I-Amazon Web Services (AWS), Google Cloud Platform (GCP), kanye ne-Microsoft Azure Documentation (United States): RDS Automated Point-In-Time Recovery (PITR) Architecture, AWS IAM Compromised Key Quarantine Policies (AWSCompromisedKeyQuarantineV2), kanye ne-S3 Versioning Delete-Marker Recovery.
  • I-PostgreSQL Global Development Group kanye ne-MySQL / Oracle Documentation (International): I-PostgreSQL Bhala-Ahead Logging (WAL), Ukubonakala Kwe-MVCC Tuple, kanye Ne-MySQL Row-Based Binary Log Flashback Recovery.
  • Imibhalo Esemthethweni Ye-Git SCM kanye Nelebhu Yokuphepha Ye-GitHub (Yamazwe Ngamazwe): I-Git Reflog (git-reflog), Ukubuyiselwa Kwento Elengayo (git-fsck), Ukubhala Kabusha Umlando (git-filter-repo), kanye Nokuvikela Ukuskena Okuyimfihlo Kokuvikela.
  • I-USENIX Association / SREcon kanye ne-Google Site Reliability Engineering (SRE) Amabhuku (Amazwe Ngamazwe): Ukuphatha Izigameko, I-Emergency Rollback Triage, kanye ne-Blameless Postmortem Culture.

Iziqondiso ezihlobene