# Inženjer je izbrisao produkcijsku bazu podataka GitLaba. 300 gigabajta.

Published: 2026-09-10

31. siječnja 2017., 23:27 UTC: GitLabov inženjer, boreći se s pokvarenom replikom na kraju duge noći, uklanja PostgreSQL podatkovni direktorij na db1 umjesto na db2. db1 je primarni. Oko 300 GB baze podataka GitLab.com nestaje za sekundu ili dvije, a od pet mehanizama za sigurnosno kopiranje i replikaciju, nijedan ne radi. Postmortem: vremenska linija od skoka spama do pogrešnog imena hosta, zašto se pg\_basebackup činio zaglavljenim, zašto pg\_dump nije uspio tiho (binarne datoteke 9.2 na bazi podataka 9.6, e-pošta o pogreškama odbijena od strane DMARC-a), 18-satna obnova iz 6-satne snimke staginga emitirana uživo na YouTubeu, i tko je zapravo kriv. Presuda o odgovoru: SHIP IT.

Canonical: https://thedailydiff.dev/hr/video/2026-09-10-gitlab-rm-rf/

## Što ovaj video pokriva

- 31. siječnja 2017.: rm -Rvf na podatkovnom direktoriju primarnog poslužitelja; uklonjeno ~300 GB, ostalo 4,5 GB
- 5 od 5 sigurnosnih kopija ne uspijeva: prazan S3 bucket (nepodudarnost verzije pg\_dump), nema Azure snimki na DB-u, obrisana replika, dnevna LVM kopija bez web-hookova
- 1. veljače, 18:00 UTC: GitLab.com se vratio iz 6-satne ručne snimke; dokument uživo, prijenos uživo, postmortem bez krivnje s popisom ispravaka

## Prevedeni transkript

Prevedeno iz izvornog engleskog pripovijedanja. Dostupni zvuk i titlovi kontroliraju se putem YouTubea.

0:00 Inženjer u GitLabu pokreće rm -rf na pogrešnom poslužitelju baze podataka, i tristo gigabajta GitLab.coma nestaje za sekundu ili dvije, otprilike koliko treba da se pročita ime hosta. 31. siječnja 2017., 23:27 UTC. GitLab tvita da je slučajno izbrisao produkcijske podatke, otvara bilješke o incidentu internetu i prenosi oporavak na YouTubeu, drugom live streamu na platformi. Sljedeći dan, pismeno: od pet tehnika sigurnosnog kopiranja,

0:25 nijedna ne radi pouzdano. Kako se to događa, zašto je to moguće i tko zapravo snosi krivnju. Ovo je The Daily Diff, postmortem. 17:20: inženjer snima produkciju za testiranje balansera opterećenja u stagingu. 19:00: spam udara bazu podataka, plus posao koji trajno briše zaposlenika GitLaba kojeg je trol prijavio za zlouporabu. 23:00: replika zaostaje toliko da je primarni već odbacio

0:48 log koji joj je potreban; jedino rješenje je obrisati repliku i ponovno kopirati primarnu ponovno. pg\_basebackup se zaustavlja bez izlaza. Zapravo tiho čeka primarni poslužitelj; nitko to ne zna, a runbook to ne govori. Inženjer, koji se trebao odjaviti u jedanaest, odlučuje da je prazan podatkovni direktorij problem i uklanja ga. Na db1. Primarnom. Primjećuje sekundu ili dvije kasnije; od otprilike tristo gigabajta,

1:11 ostalo je 4,5. Sigurnosne kopije. Jedna: pg\_dump na S3, dnevno. Bucket je prazan. Cron job radi na aplikacijskom poslužitelju bez baze podataka, pa paket bira PostgreSQL 9.2 binarne datoteke za bazu podataka 9.6, ne uspijeva i šalje e-poštu o neuspjehu, koja se odbija zbog nedostatka DMARC-a. Dvije: Azure disk snimke, omogućene za datotečne poslužitelje, ne baze podataka.

1:32 Tri: replika, namjerno obrisana prije sat vremena. Četiri: dnevna snimka, stara 24 sata, svaki webhook uklonjen sinkronizacijom staginga. Pet: ručna snimka od 17:20, za nepovezan test. Ta pobjeđuje. Obnova znači kopiranje staging diska natrag u produkciju preko Azureovog jeftinog skladišta pri šezdeset megabita u sekundi: osamnaest sati. GitLab.com se vraća 1. veljače u 18:00 UTC, sa šest sati starijim podacima.

1:58 git blame: dva imena hosta s jednim znakom razlike i pet sustava za sigurnosno kopiranje iz kojih nitko nikada nije obnovio. Ne inženjer. Postmortem, potpisan od strane CEO-a, čuva njegovu anonimnost, boji produkcijski upit crvenom bojom i dodjeljuje vlasnika trajnosti podataka, jer ga do sada nije imalo. Radijus eksplozije: osamnaest sati prekida rada, šest sati izgubljenih podataka, otprilike pet tisuća projekata, pet tisuća komentara,

2:18 sedam stotina novih korisnika i pet tisuća ljudi koji gledaju traku napretka. Hacker News daje live dokumentu 1.162 boda i citira jedan redak natrag: od pet sigurnosnih kopija, nijedna. Presuda, postmortem: SHIP IT, na odgovor. Incident provode javno, krive proces i objavljuju popis ispravaka s brojevima problema. Ponedjeljna radnja: obnova sigurnosne kopije. Ako je nikada niste obnovili, nemate je.

2:42 Pošaljite mi incident o kojem još uvijek ne smijete pričati, u komentarima, ili na the daily diff dot dev. I to je diff za danas. Ja sam Niko iz Axrisija. Spajajte odgovorno.

## Izvori

- [GitLab, "Postmortem of database outage of January 31" (Feb 10, 2017)](https://about.gitlab.com/blog/postmortem-of-database-outage-of-january-31/) — about.gitlab.com
- [GitLab, "GitLab.com database incident" (Feb 1, 2017)](https://about.gitlab.com/blog/gitlab-dot-com-database-incident/) — about.gitlab.com
- [@gitlabstatus, "We accidentally deleted production data…"](https://twitter.com/gitlabstatus/status/826591961444384768) — twitter.com
- [@gitlabstatus, emergency maintenance notice](https://twitter.com/gitlabstatus/status/826572933304827904) — twitter.com
- [Hacker News, "GitLab Database Incident – Live Report" (1,162 points, 598 comments)](https://news.ycombinator.com/item?id=13537052) — news.ycombinator.com
- [Hacker News, the postmortem thread (377 points)](https://news.ycombinator.com/item?id=13619714) — news.ycombinator.com
