專欄 | 九章演算法
** | www.jiuzhang.com上週我與同事們進行了一次關於職業生涯中搞砸了一些事情的簡短談話。這確實會淪為他人笑柄,卻更給我們帶來了珍貴的教訓。重要的是,我們應該分享那些曾經的錯誤,這樣其他人就可以從其中學習。下文是最近在我身上發生的例子。
1.為什麼有如此多誤刪生產資料庫的事情發生?
幾個月前,reddit上有一篇文章,講了一名初級開發人員在上班的第一天就刪除了生產資料庫的事。我們都很憷於讀到這類犯了這類無法讓人忘卻的大錯誤的文章。因為我們離這些也不遠,而大多數人都是「死裡逃生」。
在我的第乙份工作中,一位高階資料庫管理員在上班第一天就誤刪了生產資料庫。這類故事情節比比皆是。這個團隊從乙個星期的備份中恢復了他導致的錯誤,並讓他繼續工作。十年後,他們依然將其作為笑點。
今年早些時候,我被派去檢查乙個客戶的生產資料上的問題。他們進行了小範圍的非公開測試,結果**上沒有顯示任何內容。我想查查是否是存在漏洞或是易損性問題導致了這一結果。
我通過了生產機器上的簽名環節,然後開啟了資料庫。內容庫(articles table)內空空如也。這證實了我們在**上看到的情況是真實的。
使用者庫(users table)內依然有使用者資料存在。真讓人奇怪。所以情況是我們丟失了所有內容,但是至少測試使用者的資訊依然存在。我們給出的解釋是這是乙個測試行為,所以這些事情有可能發生。
接下來的幾分鐘一片混亂。我不記得自己做了什麼。我不認為自己笨到在控制台上執行了刪除使用者庫的操作。但是事實就是這麼發生了,現在後台既沒有了內容庫,也沒有了使用者庫。這真實下了我一大跳。
然後我的大腦就開始轉動起來思考如何解決這個問題。我真的把使用者庫給刪掉了嗎?是的。我們存備份了嗎?沒有。我們應該如何告訴客戶這個事情?不知道。
我猶記得自己走向專案經理那裡,坐在她身邊,向她解釋了發生了什麼事情時的場面。因為我們的內容庫中沒有內容,這就是為什麼**上空空如也的原因。同時,我還刪除了使用者庫。他們現在需要重新邀請所有的使用者,如果他們能夠弄清楚誰是誰。
我回到了自己的辦公室,垂頭喪氣。
不過,我還是沒有接受這件事。我們一開始是如何失去這些東西的?
我開始不停地往深處想。半是為了否認這件事,半是想要挽回面子。不久,我注意到了一些重要事情。
在伺服器上還存在著其他5個資料庫。其中乙個資料庫的名字和我剛才看到的資料庫名字很像。
當我檢視這個資料庫的時候,發現所有的內容都在裡面。使用者庫也安然無恙。結果證明,是乙個配置變動無意中改變了生產設定,使站點指向了乙個全新的資料庫。我之前所看的使用者資訊是什麼?種子資料。
真是謝天謝地。早上的神經緊張和胃酸讓我覺得很不舒服,但是我們「恢復」了資料,並在壞訊息傳開之前找到了真正的問題。
從這件事中可以吸取很多教訓。其中一點是關於最簡單原則:我們總是在做的備份,也許是開發人員最有成效的挽救藥。
2.繼續前進但不要衝得過前
我最近犯的乙個錯誤不太引人注目。事實上,這是乙個經由小錯誤所引起的小錯誤最終導致了一場混亂的故事。
我們面臨的是乙個時間緊迫的專案。
我只是在乙個單一頁面測試了身份驗證測試,但是當時還不了解它們將如何被組合在一起。
把它單列出來是我做的乙個錯誤決定。我忽略了一些重要事情:
使用者在登陸之後會從cookie中載入內容,但是這個頁面卻試圖在沒有任何等待的情況下進行載入。根據事件的發生順序,使用者會得到帶來伺服器的反映,說其是未經授權的。
身份驗證也未檢查令牌是否過期。如果使用者不經常訪問這個**。那麼當其再一次訪問時,**需要使用者登出再登入才會執行。
令牌應該基於每個請求進行更新,但是我從未花費時間去理解其發生前後的規則。所以,這又產生了乙個時間問題。如果我們同時傳送了幾個請求,根據它們返回的順序,使用者會得到那個在後來的請求中無法使用的令牌。
複製**
我們匆匆忙忙地趕著專案,卻仍花費了比規定多一倍的時間。區別之處在於有更多的漏洞,並需要花更多時間去跟蹤並修復這些漏洞。
這使我感到窘迫。之後因為整件事情變得比較糟糕哦而讓我在公眾場合感到羞愧。
我想說的是:在此之後,我花費了時間去學習認證程式。我現在了解了oauth、jwt、重新整理令牌和到期行為。我仔細研究了其他人所編寫的身份驗證**。我能夠在不同的語言和框架中建構身份驗證程式。
3.將失敗轉化為未來的成功
這是我從那些表現糟糕的事情中所獲得的經驗。如果你願意,那麼幾乎所有好的結果都會由此而來。
如果有人能從自己的錯誤中汲取教訓,那麼他就會比現在更優秀。我試著不去打擊那些第一次犯錯誤的隊友。他們通常都知道自己把事情搞的一團糟。
我也正嘗試不對那些不斷犯同樣錯誤的人施加壓力。他們仍然值得同情。
如果在錯誤中做到這4點,那麼你就會不斷成長:
最後,我想講乙個關於錯誤價值的軼事。20世紀初,ibm的首席執行官托馬斯·j·沃森曾遇到過一名員工,這名員工的一系列糟糕決策讓公司付出了巨大代價。當沃森被問到是否會解雇這名員工時,他回應道:
「不,我剛在他身上花了60萬美元的培訓費。為什麼要讓別人白白撿去這個便宜?」-the end-
精英程式設計師交流社群,定期發布面試題、面試技巧、求職資訊等
誤刪了資料庫檔案後導致的資料庫未開啟問題
q a 1 首先連線到oracle的mount模式,用sys賬戶登入就進去了,2 輸入alter空格database空格open 3 稍等後會看到被你刪除的或出問題的那個資料庫檔案,記住這個路徑和檔名或直接標記後複製下來。4 執行cmd 切忌,不是sqlplus 後,在dos視窗下輸入sqlplus...
恢復oracle資料庫誤刪資料
一 通過scn恢復刪除 1 獲得當前資料庫的scn號 select current scn from v database 切換到sys使用者或system使用者查詢 查詢到的scn號為 1499223 2 查詢當前scn號之前的scn select from 表名 as of scn 149922...
Bibles MySQL資料庫 誤刪,備份,恢復
資料庫的備份 1 開啟bin log 開啟mysql配置檔案 etc mysql my.cnf 這個位置不是固定的,根據你安裝的mysql目錄去找 放開log bin這一行 log bin var log mysql mysql bin.log 隨後重啟mysql 即執行 etc init.d my...