快速備份和恢復不斷增長的數據庫
我在技術支持部門工作,我支持的一些產品在很大程度上依賴於數據庫(PostgreSQL 和 MySQL,但大多數大型產品都是 MySQL)。在我們進行升級之前,我們總是對數據庫進行完整備份,以防我們需要回滾。升級通常會對架構進行修改,如果在升級後發現問題,沒有機制可以逆轉它們。
問題是我們的大多數客戶都有很短的時間來進行備份、升級、測試並可能回滾。在一些長期客戶中,備份所需的時間現在佔據了升級視窗的很大一部分。
大部分數據不再更新。其中很多甚至沒有被使用,但是由於原因(讓我們假設它們都是合理的),它沒有從數據庫中清除。
有沒有一種方法可以將大部分數據庫設置為只讀並單獨處理?它仍然需要在需要時完成模式按摩,但可以對升級視窗之外的副本進行。
從我讀過的分區來看,它似乎是一個候選者。如果我理解正確,可以拆分大表並保持同一張表。或者將舊數據移動到不變的不同“存檔”表是否更有意義,除非添加更多數據。
差異備份也會做我想要的嗎?
在我建議研發之前,我想要一個比現在更完整的音調。我可以做更多的研究,但缺乏實踐經驗來了解調查的途徑。
謝謝。
2020 年 11 月 21 日更新:LVM 和儲存空間
隨著一些研究的完成,儲存空間是微軟目前(經過相當好的審查)對 Linux 一段時間以來擅長的 LVM 的實現。我們同時使用 Windows 和 Linux 伺服器。
這種方法的好處是它不需要我們的應用程序進行任何修改或調整;魔法是在低於他們意識的水平上完成的。當然,一切仍然需要測試,但我沒有遇到任何令人沮喪的事情。
關於 PostgreSQL,我可以想到兩個選項:
- 低級解決方案:
使用支持快照的儲存系統或文件系統,並在升級前拍攝快照。
測試後,要麼丟棄快照,要麼恢復到它。
- 數據庫級解決方案:
在升級之前建立一個流複製備用數據庫並停止複制。
如果測試正常,丟棄備用。如果測試失敗,丟棄主數據庫,提升備用數據庫並繼續使用它。
你說的是單個伺服器嗎?還是一組伺服器——Web 伺服器 + 源數據庫(“Master”)和副本?
無論如何,LVM 可能是最好的解決方案。無論伺服器有多大,它都可以讓您在幾分鐘內擷取整個機器。它需要一些初始設置。它在非常低的級別上工作,因此機器上的內容無關緊要。
COW(寫時複製)是潛在的秘密。磁碟變成了兩個磁碟,但只有差異需要付出任何努力。
LVM 聽起來特別適合您的工作職位——這似乎需要在許多伺服器上進行低級別活動。(與那些被期望將時間花在程式上而不是擺弄伺服器的程序員相反。)