+− THE DAILY DIFFdev & AI news
SHIP IT

一名工程師刪除了 GitLab 的生產數據庫。300 GB。

2017 年 1 月 31 日,世界標準時間 23:27:一名 GitLab 工程師在漫長夜晚的尾聲,與一個損壞的副本奮鬥,結果移除了 db1 上的 PostgreSQL 數據目錄,而不是 db2。

2017 年 1 月 31 日,世界標準時間 23:27:一名 GitLab 工程師在漫長夜晚的尾聲,與一個損壞的副本奮鬥,結果移除了 db1 上的 PostgreSQL 數據目錄,而不是 db2。db1 是主要數據庫。GitLab.com 大約 300 GB 的數據庫在一兩秒鐘內消失了,而且五個備份和複製機制中,沒有一個在正常運作。事後分析:從垃圾郵件激增到錯誤的主機名,為什麼 pg_basebackup 看起來卡住了,為什麼 pg_dump 一直在靜默失敗(9.2 二進制文件在 9.6 數據庫上運行,失敗電子郵件被 DMARC 退回),YouTube 現場直播的從 6 小時前的測試快照恢復 18 小時的過程,以及誰真正該受責備。對響應的判決:SHIP IT。

閱讀書面版本(英文) ↗

本影片涵蓋的內容

  • 2017 年 1 月 31 日:在主要數據目錄上運行 rm -Rvf;約 300 GB 被移除,剩下 4.5 GB
  • 五個備份全部失敗:S3 存儲桶為空(pg_dump 版本不匹配),數據庫上沒有 Azure 快照,副本被清除,每日 LVM 複製沒有網絡鉤子
  • 2 月 1 日,世界標準時間 18:00:GitLab.com 從一個 6 小時前的手動快照恢復;實時文檔,實時流媒體,附帶修復列表的無責事後分析

翻譯的文字記錄

從英文原文旁白翻譯。可用的音頻和字幕由 YouTube 控制。

0:00 GitLab 的一名工程師在錯誤的數據庫服務器上運行 rm -rf, 數百 GB 的 GitLab.com 在一兩秒內消失, 大約是讀取一個主機名所需的時間。 2017 年 1 月 31 日,晚上 11 點 27 分, UTC。GitLab 發推稱其不小心刪除了生產數據, 向互聯網公開其事件記錄,並在 YouTube 上直播恢復過程, 成為該平台上第二熱門的直播。 第二天,書面記錄:五種備份技術中,

0:25 沒有一種能可靠運作。 它是如何發生的,為什麼會發生,以及誰真正該受責備。 這是 The Daily Diff,事後分析。 下午 5 點 20 分:一名工程師對生產數據進行快照, 以測試測試環境中的負載平衡器。 晚上 7 點:垃圾郵件猛烈攻擊數據庫,加上一個硬刪除 GitLab 員工的任務, 因為一名惡意用戶舉報濫用。 晚上 11 點:副本遠遠落後,主要數據庫已丟棄了

0:48 它需要的日誌;唯一的解決方案是清除副本並再次複製主要數據庫。 pg_basebackup 停滯不前,沒有任何輸出。 它實際上在靜靜地等待主要數據庫;沒人知道這一點, 操作手冊中也沒有說明。 這位本打算在 11 點下班的工程師,認為空的數據目錄 是問題所在,並將其移除。 在 db1 上。主要數據庫。 他一兩秒後才注意到;在大約三百 GB 中,

1:11 還剩下 4.5 GB。備份方面。 一:每日 pg_dump 到 S3。 存儲桶是空的。 cron 作業在沒有數據庫的應用服務器上運行,因此該程序包選擇了 用於 9.6 數據庫的 PostgreSQL 9.2 二進制文件,失敗,並發送了 失敗郵件,但因缺少 DMARC 而被退回。 二:Azure 磁盤快照,已為文件服務器啟用, 但未為數據庫啟用。

1:32 三:副本,一小時前故意清除。 四:每日快照,24 小時前,所有網絡鉤子都被 測試環境同步移除。五:下午 5 點 20 分的手動快照,用於不相關的測試。 這一個成功了。 恢復意味著以每秒 60 兆比特的速度,通過 Azure 的廉價 存儲將測試磁盤複製回生產環境:十八小時。 GitLab.com 於 2 月 1 日下午 6 點恢復, UTC,數據舊了六小時。

1:58 git blame:兩個主機名只差一個字符,以及五個從未有人 恢復過的備份系統。 不是工程師的錯。 事後分析報告由首席執行官簽署,保持他的匿名, 將生產提示標為紅色,並為數據持久性指定了負責人, 因為在此之前它沒有負責人。 影響範圍:停機十八小時,六小時數據丟失, 大約五千個項目,五千條評論,

2:18 七百個新用戶,以及五千人觀看進度條。 Hacker News 給實時文檔 1,162 分,並引用了一句 話給他們:五個備份中,沒有一個可用。 判決,事後分析:SHIP IT,關於響應。 他們公開處理事件,歸咎於流程,並發布了帶有問題編號的修復列表。 星期一行動:恢復備份。 如果你從未恢復過它,那麼你並沒有備份。 在評論中,或發送到 thedaily.diff.dev,

2:42 把你仍然不允許談論的事件發給我。 這就是今天的 The Daily Diff。 我是 Axrisi 的 Niko。 負責任地合併。 負責任地合併。

來源

  1. GitLab, "Postmortem of database outage of January 31" (Feb 10, 2017)about.gitlab.com
  2. GitLab, "GitLab.com database incident" (Feb 1, 2017)about.gitlab.com
  3. @gitlabstatus, "We accidentally deleted production data…"twitter.com
  4. @gitlabstatus, emergency maintenance noticetwitter.com
  5. Hacker News, "GitLab Database Incident – Live Report" (1,162 points, 598 comments)news.ycombinator.com
  6. Hacker News, the postmortem thread (377 points)news.ycombinator.com

相關影片

postmortem · zh-HK · 2026年9月9日

一個 AI 刪除了生產資料庫。九秒。

一個 AI 編碼代理 (Cursor 運行 Claude Opus 4.6) 在測試環境中遇到憑證不符,並「修復」它,方法是使用它在不相關檔案中找到的帳戶範圍令牌在 Railway 上呼叫 volumeDelete。生產資料庫和所有磁碟區備份,九秒內消失。事後分析:時間線、確切的 curl、使其成為可能的三個架構事實(備份位於同一磁碟區、根範圍令牌、沒有儀表板 48 小時撤銷功能的 API),以及

3:23 ↗
postmortem · zh-HK · 2026年9月22日

重啟令 Telstra 倒退回 2006 年。九百萬部電話。

墨爾本的一名工程師在凌晨 2 時 50 分重啟計時機箱,到早餐時,澳洲最大的流動網絡竟以為是 2006 年 11 月。2026 年 7 月 8 日:Telstra NTP 機箱中的 GPS 卡在更換電源期間重啟,其韌體從未有 GPS 週數滾動更新,因此它選擇了舊的紀元,倒退了 1,024 週。由於 2025 年 10 月的變通方法使該卡成為網絡唯一的 stratum-1 來源 — 以及 2020

3:15 ↗
postmortem · zh-HK · 2026年9月19日

Google Cloud 在空白欄位當機。三小時。

一個帶有幾個空白欄位的策略行觸發了空指標,Google Cloud 立即在所有區域當機 — 然後 Cloudflare 也隨之故障。2025 年 6 月 12 日,世界標準時間 17:49:Service Control,一個批准所有 Google Cloud API 請求的二進位檔案,讀取了一個帶有「非預期空白欄位」的配額策略變更,觸發了兩週前發布但沒有空值檢查和功能旗標的程式碼路徑,並在所有區

2:57 ↗