順豐刪庫跑路事件後,你必須掌握的 8 大對策!

這兩天吵得沸沸揚揚的順豐刪庫事件《順豐高級工程師誤刪數據庫,刪庫到被跑路。。》,很多人問有什麼對策,肯定有!!

1. 只不過是把數據幹掉了

權限問題永遠是大問題,做好權限回收,開發數據庫和線上數據庫分離,線上數據庫管理權限(一般指修改表結構權限與刪表權限)禁止回收,也不提供給業務直接用。

不然參考 0。

公司管理上,最好有自己的 DB 運維產品,線上數據庫只允許查,改的話要有審批流程。

至於查數據要不要脫敏、導入導出流程,就看自己產品的規劃和排期了。

至於 DBA 怎麼保證不手滑,這個每個人有每個人的習慣。

2. 刪庫什麼的都是小 case

清理數據庫之前一定要檢查進程,是否存在數據庫進程,如果存在則寧願不搞也不要深夜搞。

公司清理數據庫要有下線流程。下線一定要走流程。寧願多租幾天機房也不要丟掉數據。

不然參考 0。

原則是:

rm 文件之前先檢查進程是否存在。

絕不手工 drop 庫表,如果非要 drop,則應該寫成 rename,truncate 也是類似,寫成 rename 和 create table like 兩條 sql。

刪表之前可以根據表文件的最後修改時間進行再次確認,不確認就找人 review,有下線流程則走下線流程。

3. 備份,備份,備在何處?

冷備,熱備都要有,一定要每天一備。

冷備便是應對這種情況。

公司應該有自己的 DB 備份方案,並且保證執行到位。

4. 人算不如天算

關於這一點,可以單獨拉一個大專題出來了,核心內容是 mysql 高可用。

簡單起見,推薦這篇文章:避免硬件故障的核心解決方案是冗餘。

硬件層面的 raid,軟件層面的主從、熱備都是爲了保證某一個節點宕機,其他節點仍然能繼續工作。

所有庫都要有主從備份,一方面做讀寫分離,一方面也是爲了備份、高可用。

即便有半同步複製,有些極端情況下可以認爲,mysql binlog 沒有同步到從庫上,仍然可能存在 binlog 丟失(數據丟失)的風險。《MySQL數據庫開發的 36 條軍規》學習一下。

所以應對這點,比較好的開源解決方案有 2:TiDB 和 Mysql GR。

5. 升級也能失敗?

說起來很簡單,升級無非是:

準備升級

過程原理

手工升級後拓撲:

工具(mha)升級後拓撲:

6. 操作之前有個流程

一般自己操作的時候,都不會有太多的顧忌。

但是要是拿給別人看,就要考慮一下了。

如果別人不只要看,還要 review,那這樣就比較難犯重大的錯誤了。

如果有些操作需要夜間一個人搞,那麼一定要提前列好準備,這個就比較正式了。

包括:

1. 梳理具體的執行步驟、執行命令和每個步驟的預計結果。

2. 如果某些步驟出錯,是否要求回滾、預先制定回滾方案。

3. 詳細記錄執行記錄,每一步都要有反饋。

4. 事先梳理好收尾工作。

5. 強關聯業務要事先通知,考慮到時間段和別的業務高峯,儘量讓對方也安排人留守觀察。

6. 一定要嚴格按照步驟來進行操作。寧願延期,不要加戲。

7. 留幾個問題

1. 如果你有機會進行 mysql 遷移和升級工作,你認爲無法寫入數據造成的影響大,還是寫入髒數據造成的影響大?

2. 如果數據庫掛了,機器可以啓動但是 mysql 進程無法啓動,你這裏又有昨天的備份可以恢復,你該怎麼做?

3.想要刪庫完全不出問題,那麼刪庫流程該怎麼設計?

8. 好了,公司還是要有自己的 DB 產品,再簡陋也要有。

參考:segmentfault.com/a/1190000013452143

往期乾貨推薦

1.Java 中的 String 真的是不可變的嗎?

2. 給你一份超詳細 Spring Boot 知識清單

3.架構師的工作都幹些什麼?架構師必看!

4.Java 虛擬機對鎖優化所做的努力

5.sleep( ) 和 wait( ) 的 5 個區別

在下面公衆號回覆 "java" 獲取更多……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章