mysql怎么备份和恢复_如何优雅的备份和恢复Mysql数据库?
謝邀,個人認為從標題看,是個比較大而且值得數據庫從業者思考的問題;從問題描述看,又是一個比較淺顯的問題。
先從問題描述看,mysqldump 備份和恢復時往往會有各種錯誤,如何避免?mysqldump由于是邏輯備份,默認在備份期間會去檢查各種備份對象的合法性,所以出現諸如表損壞,視圖定義錯誤等問題,雖然可能不影響數據庫的整體運行,但是備份會通不過。謹慎且推薦的做法就是挨個去根據報錯處理,直到備份成功和一次數據恢復成功為止,粗暴一點的做法就是加--force強制忽略各種sql類型的報錯,因為從理論上來說這些損壞或不合法的數據庫對象,不備份也是可以接受和理解的。從答主上萬實例的mysqldump備份失敗情況分析來看,參考這個應該能解決99%的mysqldump失敗
再從廣度上來說,如何優雅的備份和恢復mysql數據庫?
備份方式的選擇
從備份期間是否停服看,熱備還是冷備,這個我認為當今的現網運行的數據庫系統基本不存在冷備份的場景了(除非是整個系統全部撲街,恢復數據前可能有必要copy一份數據),熱備份且能夠獲取到一致性備份點的熱備份是mysql備份系統必須具備的功能。
從備份文件的類型看,無論是邏輯備份還是物理備份,都有其優勢和缺陷,都有其不可替代性,而往往邏輯備份的優勢正好是物理備份的缺陷。在我看來邏輯備份最大的優勢有兩點
1 數據壓縮率高(因為通常情況下會有不少index,或者碎片空間等,這個很占物理空間,而邏輯備份出來的邏輯sql就可以很大程度地節約這塊空間),這個在海量數據庫場景下很重要,因為備份占用的空間成本,上傳成本也不容忽視
2 備份靈活,兼容性強。打個比方,當一個單機數據庫想做分庫分表時,數據遷移階段必然會涉及到一次類似邏輯備份,通過邏輯備份導入分布式數據庫環境中(因為不可能通過傳輸物理備份文件到多個數據庫節點)
以上2點也正是物理備份的劣勢,而物理備份相對邏輯備份而言的優勢也非常明顯,備份速度快+恢復速度快,這兩點可能在絕大部分場景下更重要,所以現在主流的備份方式應該是物理備份,雖然邏輯備份也存在一些多線程備份的開源工具比如mydumper,但備份速度通常還是不如物理備份。
當然,既然要優雅,在海量數據庫備份系統中,我認為兩種備份方式都應該支持,可以靈活設置,針對不同的備份方式再開發不同的恢復方式。除此以外,還需要考慮
0 備份和恢復期間對IO等系統資源消耗情況的把控,是否可以做到限速?
1 如何靈活地設置備份策略,比如備份周期和備份時間點的選擇,是否可以在從庫備份,備份上傳到何處,選擇什么壓縮方式?
2 如何確認備份是否成功,哪一步驟出了問題,哪些步驟失敗可以重試,哪些步驟失敗不必重試?
3 如何確認成功的備份實際可有效還原?
4 再細一些,mysql為了獲取一致性的備份點,必然會有一個flush tables with read lock的加全局鎖的操作,如何控制該操作對運行中的實例的可能造成的惡劣影響?
5 再細一些,這個mysql實例是否開啟了gtid,針對不同版本的mysql是否也需要有差異化對待?針對有無gtid等場景,備份和恢復策略其實也是有所不同的
.................
所以說,個人看來,要做到一個極致優雅的數據庫備份和恢復系統其實很不容易,目前可能也只有公有云才會針對各種各樣可能出現的場景和報錯處理,將方方面面都考慮全了。
總結
以上是生活随笔為你收集整理的mysql怎么备份和恢复_如何优雅的备份和恢复Mysql数据库?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何利用flash制作图片椭圆扩展?
- 下一篇: 马斯克:地球是“刚脏”的 有生之年实现再