讀高性能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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...