讀高性能MySQL(第4版)筆記13_備份與恢復(上)

来源:https://www.cnblogs.com/lying7/archive/2023/09/22/17721347.html
-Advertisement-
Play Games

1. 每個人都知道需要備份,但並不是每個人都能意識到需要的是可恢復的備份 1.1. 如果你沒有提前做好備份規劃,也許以後會發現已經錯失了一些最佳的選擇 1.2. 在伺服器已經配置好以後,才想起應該使用LVM,以便獲取文件系統的快照——但這時已經太遲了 1.3. 如果你沒有計劃做定期的恢復演練,當真的 ...


1. 每個人都知道需要備份,但並不是每個人都能意識到需要的是可恢復的備份

1.1. 如果你沒有提前做好備份規劃,也許以後會發現已經錯失了一些最佳的選擇

1.2. 在伺服器已經配置好以後,才想起應該使用LVM,以便獲取文件系統的快照——但這時已經太遲了

1.3. 如果你沒有計劃做定期的恢復演練,當真的需要恢復時,就會發現並沒有那麼順利

2. 不要掉進副本就是備份的陷阱

2.1. 副本對生成備份而言是一個干涉較少的源,但它不是備份本身

2.2. 確保備份可以通過DROP TABLE測試

2.2.1. “遭受黑客攻擊”的測試

2.2.2. 能通過數據中心失敗的測試

2.2.3. 如果是基於備庫生成備份,需要通過從源重建備份,並從那時起強制執行super_read_only來確保你的所有副本是一致的

3. 裸文件備份

3.1. 物理備份

3.2. 文件系統中的文件副本

4. 邏輯備份

4.1. 重建數據所需的SQL語句

5. 推薦的備份方式

5.1. Percona XtraBackup進行裸文件備份

5.2. mydumper進行邏輯備份

5.3. 無侵入地實現二進位的原始數據備份

5.3.1. 備份可以通過啟動mysqld實例檢查所有的表來進行驗證

5.3.2. 建議備份二進位日誌

5.3.2.1. 儘可能久地保留多份備份的數據和二進位文件

5.3.2.2. 即使最近的備份無法使用,還可以使用較老的備份來執行恢復或者創建新的副本

6. 整體備份和恢復策略要點

6.1. 安全

6.1.1. 訪問備份的入口

6.1.2. 恢複數據的許可權

6.1.3. 文件是否需要加密

6.2. 備份存儲在哪裡

6.2.1. 離源數據多遠

6.2.1.1. 在一塊不同的磁碟上

6.2.1.2. 一臺不同的伺服器上

6.2.1.3. 離線存儲

6.2.2. 如何將數據從源頭移動到目的地

6.3. 保留策略、審計、法律要求,以及相關的條款

6.4. 存儲解決方案和介質,壓縮,以及增量備份

6.5. 存儲的格式

6.6. 對備份的監控和報告

6.7. 存儲層內置備份功能

6.7.1. 其他專用設備

7. 熱備份

7.1. 不需要任何的服務停機時間

8. 還原

8.1. 從備份文件中獲取數據,可以將這些文件載入到MySQL里,也可以將這些文件放置到MySQL期望的路徑中

9. 恢復

9.1. 當某些異常發生後對一個系統或其部分的拯救

9.2. 從備份中還原數據

9.3. 使伺服器完全恢復功能的所有必要步驟

9.4. 存儲引擎的崩潰恢復要求數據和日誌文件一致

9.4.1. 要確保數據文件中只包含已經提交的事務所做的修改,恢復操作會將日誌中還沒有應用到數據文件的事務重新執行

10. 備份的理由

10.1. 災難恢復

10.1.1. 硬體故障

10.1.2. 一個不經意的Bug導致數據損壞

10.1.3. 伺服器及其數據由於某些原因不可獲取或無法使用

10.1.4. 某人偶然連錯伺服器執行了一個ALTER TABLE操作

10.1.5. 機房大樓被燒毀

10.1.6. 惡意的黑客攻擊

10.2. 人們改變想法

10.2.1. 經常會在刪除某些數據後又想恢復這些數據

10.3. 審計

10.3.1. 需要知道數據或Schema在過去的某個時間點是什麼樣的

10.4. 測試

10.4.1. 最簡單的基於實際數據來測試的方法是,定期用最新的生產環境數據更新測試伺服器

10.4.2. 只要把備份文件還原到測試伺服器上即可

11. 備份誤區

11.1. 複製就是備份

11.1.1. 複製不是備份

11.1.2. 使用RAID陣列也不是備份

11.1.3. 不是備份,也不是備份的替代品

11.2. 快照就是備份

11.2.1. 無論是LVM、ZFS還是SAN快照,都不是真正的備份

11.2.1.1. 不包含數據的完整副本

11.2.2. 快照是寫時複製

11.2.2.1. 只包含數據的實時副本與快照發生時的數據之間的差異

11.2.3. 如果備份是用於某些特殊用戶的,那麼快照可能是一個非常好的方法

12. 定義恢復需求

12.1. 備份在先

12.1.1. 只有已經做了備份才可能恢復,因此在構建系統時,註意力自然會集中在備份上

12.2. 備份由腳本和任務自動完成

12.3. 備份是日常任務,但恢復常常發生在危急情形下

12.4. 安全的需要

12.4.1. 做異地備份,可能需要對備份數據進行加密,或採取其他措施來進行保護

12.5. 需要培養幾個人並有計劃地讓他們互為備份,這樣就無須由一個不合格的人來恢複數據

12.6. 恢復點目標(PRO)

12.7. 恢復時間目標(RTO)

13. 備份方案

13.1. 備份僅是數據的一個副本,但是受限於應用程式的要求、MySQL的存儲引擎架構,以及系統配置等因素,複製一份數據變得很困難

13.2. 對數據丟失的承受力越強,備份越簡單

13.2.1. 一個“寬鬆”的基於故障時間點的恢復需求意味著需要重建數據,直到“足夠接近”問題發生的時刻

13.2.2. 一個“硬性”的需求意味著不能容忍丟失任何一個已提交的事務,即使某些可怕的事情發生(例如,伺服器著火了)

13.2.2.1. 將二進位日誌保存在一個獨立的SAN捲

13.2.2.2. 使用DRBD磁碟複製

13.3. 在生產實踐中,對於大資料庫來說,裸文件備份是必需的:邏輯備份太慢並受到資源限制,從邏輯備份中恢復需要很長時間

13.3.1. 基於快照的備份,例如Percona   XtraBackup和MySQL  EnterpriseBackup,是最好的選擇

13.3.2. 對於較小的資料庫,邏輯備份可以很好地勝任

13.4. 保留多個備份集

13.5. 定期從邏輯備份(或者裸文件備份)中抽取數據進行恢複測試

13.6. 保存二進位日誌用於基於故障時間點的恢復

13.6.1. 將expire_logs_days參數的值設置得足夠大,至少確保可以從最近兩次裸文件備份中做基於時間點的恢復

13.6.2. 保持源運行且不應用任何二進位日誌的情況下創建一個副本

13.6.3. 使備份二進位日誌獨立於過期設置,二進位日誌需要保存在備份中足夠長的時間,以便能從最近的邏輯備份中進行恢復

13.6.4. 重放二進位日誌來恢復到想要的時間點

13.7. 完全不藉助備份工具本身來監控備份和備份的過程

13.7.1. 需要額外驗證備份是否正常

13.8. 通過演練整個恢復過程來測試備份和恢復

13.8.1. 測算恢復所需要的資源(CPU、磁碟空間、實際時間,以及網路帶寬等)

13.9. 考慮安全性


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他的程式記憶體異常高,用 vs診斷工具 載入時間又太久,讓我幫忙看一下到底咋回事,截圖如下: 確實,如果dump文件超過 10G 之後,市面上那些可視化工具分析起來會讓你崩潰的,除了時間久之外這些工具大多也不是用懶載入的方式,比如 dotmemory 會 ...
  • 關於Unity 如何與Blazor Server結合 一、介紹 最近工作中有Unity與Blazor Server結合的需求,在網上找了一圈,發現這方面的資料比較少,特此寫下這篇記錄一下自己的實現過程,希望可以幫到有需要的朋友。(下方多圖預警) OS Version : windows 11 Uni ...
  • 習慣了 linux 命令的快捷操作,使用 winodws 的 shell 感覺效率非常低下,於是開始搜尋工具支持。 剛開始搜到的是 GnuWin32,但是它已經停止更新維護了,於是找到了 Cygwin。當然 Cygwin 還有其他功能,在此不做贅述 下載安裝 1. 登錄 Cygwin官網下載界面,進 ...
  • 1、首先你需要提前準備好jar包或者war包,並想辦法放入Linux環境(或虛擬機)中; 2、java項目的部署需要用到Tomcat或者Jetty,docker可以直接拉取他倆的鏡像,這裡以Tomcat為例: # : 後面需要加上war或者jar對應的Tomcat版本,最好加上, # 否則預設最新的 ...
  • 一、文檔的查看指令 1、tail指令 作用:查看一個文件的末n行 語法:#tail -n 文件的路徑 說明:-n可以不寫,不寫,預設表示10行。 案例:新建一個1.txt文檔,使用tail指令查看root/1.txt文件的末5行和末10行 tail -5 /root/1.txt tail /root ...
  • 1. 線上備份 2. 離線備份 2.1. 關閉MySQL做備份是最簡單、最安全的 2.2. 所有獲取一致性副本的方法中最好的 2.3. 損壞或不一致的風險最小 2.4. 根本不用關心InnoDB緩衝池中的臟頁或其他緩存 2.5. 不需要擔心數據在嘗試備份的過程中被修改 2.5.1. 伺服器不對應用提 ...
  • MySQL 主從複製與讀寫分離 1、什麼是讀寫分離? 讀寫分離,基本的原理是讓主資料庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫處理SELECT查詢操作。資料庫複製被用來把事務性操作導致的變更同步到集群中的從資料庫。 2、為什麼要讀寫分離呢? 因為資料庫的“寫” ...
  • 最近,某白酒品牌頻頻吸引大眾眼球,白酒與咖啡、巧克力等聯名衍生品一經推出便掀起熱潮。某商品由於太過火爆,甚至一度售罄下架。 不得不說,我國擁有超大規模內需市場,消費潛力巨大。 當前,創新消費場景加上數字化融合轉型,成為酒企品牌開疆擴土、逆勢增長的重要途徑。 如今越來越多的酒企開始擁抱數字化,建立涵蓋 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...