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

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

1. 線上備份 2. 離線備份 2.1. 關閉MySQL做備份是最簡單、最安全的 2.2. 所有獲取一致性副本的方法中最好的 2.3. 損壞或不一致的風險最小 2.4. 根本不用關心InnoDB緩衝池中的臟頁或其他緩存 2.5. 不需要擔心數據在嘗試備份的過程中被修改 2.5.1. 伺服器不對應用提 ...


1. 線上備份

2. 離線備份

2.1. 關閉MySQL做備份是最簡單、最安全的

2.2. 所有獲取一致性副本的方法中最好的

2.3. 損壞或不一致的風險最小

2.4. 根本不用關心InnoDB緩衝池中的臟頁或其他緩存

2.5. 不需要擔心數據在嘗試備份的過程中被修改

2.5.1. 伺服器不對應用提供訪問

3. 備份時間

3.1. 將備份複製到目的地需要多久

4. 備份負載

4.1. 在將備份複製到目的地時對伺服器性能的影響有多大

4.2. 在備份伺服器上壓縮而不是在MySQL伺服器上

4.3. Percona XtraBackup和MySQL Enterprise Backup這樣的工具都有限流選項,可在使用p v時加--rate-limit選項來限製備份腳本的吞吐量

5. 犧牲其一以增強另外一個

6. 恢復時間

6.1. 把備份鏡像從存儲位置複製到MySQL伺服器、重放二進位日誌等,需要多久

7. 邏輯備份

7.1. 導出

7.2. 以一種MySQL能夠解析的格式來包含數據

7.2.1. SQL語句

7.2.2. 以某個符號分隔的文本

7.3. 優點

7.3.1. 邏輯備份備份的文件是可以用編輯器或像grep和sed之類的命令查看和操作的普通文件

7.3.2. 恢復非常簡單

7.3.3. 可以通過網路來備份和恢復,也就是說,可以在與MySQL主機不同的另外一臺機器上操作

7.3.4. 可以在類似雲資料庫這樣不能訪問底層文件系統的系統中使用

7.3.5. 靈活

7.3.6. 與存儲引擎無關

7.3.6.1. 消除了底層數據存儲引擎的差異

7.3.7. 有助於避免數據損壞

7.3.7.1. 如果MySQL在記憶體中的數據還沒有損壞,當不能得到一個正常的裸文件備份時,或許可以得到一個可以信賴的邏輯備份

7.4. 缺點

7.4.1. 必須由資料庫伺服器完成生成邏輯備份的工作,因此要占用更多的CPU周期

7.4.1.1. 某些場景下比資料庫文件本身更大

7.4.2. 無法保證導出後再還原出來的一定是同樣的數據

7.4.2.1. 浮點表示的問題、軟體Bug等都會導致問題

7.4.3. 從邏輯備份中還原需要MySQL載入和解釋語句,將它們轉化為存儲格式,並重建索引,所有這一切會很慢

7.4.3.1. MySQL中導出數據和通過SQL語句將其載入回去的龐大開銷

7.4.3.2. 如果使用邏輯備份,測試恢復需要的時間將非常重要

7.4.3.3. 邏輯備份最可怕的地方就是不確定的還原時間

8. 裸文件備份

8.1. 原始文件是指存放於硬碟上的文件

8.2. 直接複製原始文件

8.3. 優點

8.3.1. 基於文件的物理備份,它只需將需要的文件複製到其他地方即可完成備份,不需要其他額外的工作來生成原始文件

8.3.2. 非常容易跨平臺、操作系統和MySQL版本工作

8.3.3. 從裸文件備份中恢復會更快

8.3.3.1. MySQL伺服器不需要執行任何SQL語句或構建索引

8.3.3.2. 如果有很大的InnoDB表,無法完全緩存到記憶體中,則裸文件備份的恢復要快得多

8.3.3.2.1. 至少要快一個數量級

8.4. 缺點

8.4.1. InnoDB的原始文件通常比相應的邏輯備份要大得多

8.4.1.1. 表空間往往包含很多未使用的空間

8.4.2. 不總是可以跨平臺、操作系統及MySQL版本的

8.4.2.1. 文件名大小寫敏感和浮點格式是可能會遇到麻煩的

8.4.2.2. 對於需要長期保留或者是用於滿足法律合規要求的備份,儘量不要完全依賴裸文件備份

8.4.2.3. 每隔一段時間需要做一次邏輯備份

8.4.3. 除非經過測試,不要假定備份(特別是裸文件備份)是正常的

8.4.3.1. CHECK TABLES

8.4.3.2. 不建議僅對文件運行innochecksum

9. 混合使用

9.1. 使用裸文件備份

9.2. 用得到的數據啟動MySQL伺服器實例並運行mysqlcheck

9.3. 周期性地使用mysqldump執行邏輯備份

9.4. 優點是不會使生產伺服器在導出時有過度負擔

9.5. 如果能夠方便地利用文件系統的快照,也可以生成一個快照,將該快照複製到另外一臺伺服器上並釋放,然後測試原始文件,再執行邏輯備份

10. 備份什麼

10.1. 恢復的需求決定需要備份什麼

10.2. 最簡單的策略是只備份數據和表定義,但這是一個最低的要求

10.3. 非顯著數據

10.3.1. 二進位日誌和InnoDB事務日誌

10.3.2. 在理想情況下,應該把整個數據目錄和MySQL一起備份起來

10.4. 代碼

10.4.1. 現代的MySQL伺服器可以存儲許多代碼,例如,觸發器和存儲過程

10.4.2. 實際是存放在mysql資料庫中的

10.5. 伺服器配置

10.5.1. 對於伺服器配置來說,備份中對生產伺服器至關重要的任何外部配置,都十分重要

10.6. 選定的操作系統文件

10.6.1. 在UNIX伺服器上,這可能包括cron任務、用戶和組的配置、管理腳本,以及sudo規則

11. 部分備份

11.1. 一般不包含完整的數據集

11.1.1. 因為某些數據沒有改變

11.1.2. 對減少伺服器開銷、備份時間及備份空間而言都很適合

11.2. Percona XtraBackup和MySQL Enterprise Backup,仍然會掃描伺服器上的所有數據塊,因而並不會節約太多的開銷

11.2.1. 確實會減少一定量的備份時間和大量用於壓縮的CPU時間

11.2.2. 會減少磁碟空間的使用

11.3. 差異備份

11.3.1. 自上次全備份後所有改變的部分而做的備份

11.4. 增量備份

11.4.1. 對自任意類型的上次備份後的所有修改做的備份

11.4.2. 缺點

11.4.2.1. 會增加恢復的複雜性

11.4.2.2. 額外的風險

11.4.2.3. 更長的恢復時間

12. 建議

12.1. 使用Percona XtraBackup和MySQL Enterprise Backup中的增量備份特性

12.2. 備份二進位日誌

12.2.1. 在每次備份後使用FLUSH LOGS來開始記錄一個新的二進位日誌,這樣就只需要備份新的二進位日誌

12.3. 如果有一些“引用”表,例如,包含不同語種、各個月的名稱列表,或者州或區域的簡寫等,可以考慮將它們單獨放在一個資料庫中,這樣就不需要每次都備份這些表

12.3.1. 一個更好的選擇可能是把這些數據放到程式代碼中,而不是保存在資料庫中

12.4. 某些數據根本不需要備份

12.4.1. 相對於從全備份中可能獲得的快速恢復時間,避免備份可以節約更多時間開銷

12.4.2. 臨時數據也不用備份

12.5. 備份所有的數據,然後發送到一個有去重特性的地方

12.6. 如果可以做全備份,考慮到簡便性,建議儘量做全備份

12.6.1. 建議至少一周一次

13. 複製

13.1. 從副本中備份最大的好處是可以不幹擾源庫,避免在源庫上增加額外的負載

13.1.1. 這是一個建立副本伺服器的好理由,即使不需要用它做負載均衡或提供高可用性

13.2. 用GTID是非常明智的

13.2.1. 避免了必須保存有關複製過程的所有信息

13.3. 故意將一個副本延遲複製一段時間對於某些災難場景非常有用

13.4. 源庫與副本數據不匹配是很常見的,並且MySQL沒有方法檢測這個問題

13.4.1. 唯一方法是使用Percona Toolkit中的pt-table-checksum之類的工具

13.4.2. 防止這種情況的最好方法是使用super_read_only來確保只有複製可以寫入副本

13.5. 複製不是備份


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

-Advertisement-
Play Games
更多相關文章
  • 在我們視窗新增、編輯狀態下的時候,我們往往會根據是否修改過的痕跡-也就是臟數據狀態進行跟蹤,如果用戶發生了數據修改,我們在用戶退出視窗的時候,提供用戶是否丟棄修改還是繼續編輯,這樣在一些重要錄入時的時候,可以避免用戶不小心關掉視窗,導致視窗的數據要重新錄入的尷尬場景。本篇隨筆介紹基於WPF開發中,窗... ...
  • 一、介紹 今天突然想起之前工作上遇到的一個問題,在做Blazor 開發時後端給的一個介面請求方式是Post ,但是他需要攜帶多個參數,新建一個公共類又覺得麻煩,我就嘗試著怎麼在Post請求中攜帶多個參數,由於接觸Asp .Net Core 的時間不夠長,所以這些都不是太瞭解, 今天寫下這篇文章做個記 ...
  • Denpendcy Injection 8.0新功能——KeyedService 本文只介紹 .NET Denpendcy Injection 8.0新功能——KeyedService,假定讀者已熟練使用之前版本的功能。 註冊帶Key的類 8.0之前,註冊一個類往往是AddSingleton<IFo ...
  • 一:背景 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 ...
一周排行
    -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# ...