redis數據持久化和配置-15(備份和還原 Redis 數據)

備份和還原 Redis 數據

備份和恢復數據是管理任何數據庫系統(包括 Redis)的關鍵方面。數據丟失可能是由于硬件故障、軟件錯誤、意外刪除甚至惡意攻擊而發生的。因此,擁有強大的備份和恢復策略對于確保數據持久性和業務連續性至關重要。本課將介紹備份和恢復 Redis 數據的方法,重點介紹上一課中介紹的 RDB 快照和 AOF 文件。我們將探討創建備份、驗證備份完整性以及從備份中恢復數據所涉及的實際步驟。

了解 Redis 中的備份策略

Redis 提供兩種主要的持久性機制:RDB(Redis 數據庫)快照和 AOF(僅追加文件)。這些機制還用作備份和還原數據的基礎。選擇正確的備份策略取決于您對數據持久性和恢復時間的特定要求。

用于備份的 RDB 快照

RDB 快照是 Redis 數據的時間點表示形式。它們是緊湊的二進制文件,可以輕松傳輸和存儲。

  • RDB 備份的工作原理: 當 Redis 配置為使用 RDB 持久性時,它會定期將數據的快照保存到磁盤。此快照是 Redis 數據庫在特定時刻的完整副本。
  • 備份過程: 要使用 RDB 備份 Redis 數據,您只需將 RDB 文件復制到安全位置即可。這可以手動或通過自動化腳本完成。
  • 恢復過程: 要從 RDB 備份還原,請將當前 RDB 文件替換為備份文件,然后重新啟動 Redis 服務器。然后,Redis 會將 RDB 文件中的數據加載到內存中。

用于備份的 AOF

AOF 持久性方法記錄服務器收到的每個寫入作。與 RDB 相比,這提供了一種更持久的持久性形式。

  • AOF 備份的工作原理: AOF 文件包含修改了 Redis 數據庫的所有命令的日志。
  • 備份過程: 與 RDB 類似,備份 AOF 文件涉及將其復制到安全位置。
  • 恢復過程: 要從 AOF 備份還原,請將當前 AOF 文件替換為備份文件,然后重新啟動 Redis 服務器。然后,Redis 將重放 AOF 文件中的所有命令以重建數據庫。

在 RDB 和 AOF 之間進行備份

在 RDB 和 AOF 之間進行備份的選擇取決于您的特定需求:

特征RDBAOF
數據持久性下限 (時間點快照)更高(每個寫入作)
備份大小較小較大
恢復時間更快較慢(需要重放所有命令)
復雜性簡單更復雜(尤其是重寫)
  • RDB 適用于: 一些數據丟失是可以接受的,并且快速恢復很重要的應用程序。
  • AOF 適用于: 數據持久性至關重要且您無法承受丟失任何數據的應用程序。

在實踐中,許多 Redis 部署結合使用 RDB 和 AOF 來最大程度地保護數據。RDB 提供了一種從最近的快照還原的快速方法,而 AOF 可確保您可以恢復所有數據,直到最后一次寫入作。

創建 Redis 備份

讓我們探討一下使用 RDB 和 AOF 創建備份所涉及的實際步驟。

備份 RDB 快照

  1. 找到 RDB 文件: RDB 文件的位置在 redis.conf 文件中使用 dirdbfilename 指令指定。默認情況下,RDB 文件名為 dump.rdb,位于 Redis 工作目錄中。

  2. 啟動備份: 您可以通過多種方式觸發 RDB 快照:

    • 使用 SAVE 命令: 此命令將數據庫同步保存到磁盤。它會阻止 Redis 服務器,直到快照完成,因此通常不建議將其用于生產環境。

      SAVE
      
    • 使用 BGSAVE 命令: 此命令在后臺異步將數據庫保存到磁盤。它不會阻止 Redis 服務器,允許它繼續為請求提供服務。

      BGSAVE
      
    • 自動快照: Redis 可以配置為根據指定的保存間隔自動創建快照。這些間隔在 redis.conf 文件中使用 save 指令定義。例如:

      save 900 1       # Save the DB if after 900 sec (15 min) if at least 1 key changed
      save 300 10      # Save the DB if after 300 sec (5 min) if at least 10 keys changed
      save 60 10000    # Save the DB if after 60 sec if at least 10000 keys changed
      
  3. 復制 RDB 文件: 創建 RDB 快照后,將 dump.rdb 文件復制到安全備份位置。這可以是本地目錄、網絡共享或云存儲服務。

    cp /var/lib/redis/dump.rdb /mnt/backup/redis/dump_$(date +%Y%m%d_%H%M%S).rdb
    

    此命令將 dump.rdb 文件復制到 /mnt/backup/redis 目錄,并使用時間戳重命名該文件,以便為每個快照創建唯一的備份文件。

備份 AOF 文件

  1. 找到 AOF 文件: AOF 文件的位置在 redis.conf 文件中使用 dirappendfilename 指令指定。默認情況下,AOF 文件名為 appendonly.aof,位于 Redis 工作目錄中。

  2. 確保 AOF 已啟用: 通過將 appendonly 指令設置為 yes,驗證是否在 redis.conf 文件中啟用了 AOF。

    appendonly yes
    
  3. 復制 AOF 文件: 與 RDB 類似,將 appendonly.aof 文件復制到安全的備份位置。

    cp /var/lib/redis/appendonly.aof /mnt/backup/redis/appendonly_$(date +%Y%m%d_%H%M%S).aof
    

自動備份

手動創建備份可能很繁瑣且容易出錯。最好使用腳本或工具自動執行備份過程。

  • Cron 工作: 您可以使用 cron 作業來安排 Redis 數據的定期備份。創建一個腳本,用于執行 BGSAVE 命令(如果使用 RDB)并將 RDB 或 AOF 文件復制到備份位置。

    cron 作業條目示例:

    0 2 * * * /path/to/redis_backup.sh
    

    此 cron 作業在每天凌晨 2:00 運行 redis_backup.sh 腳本。

  • Redis 企業版: Redis Enterprise 提供內置的備份和還原功能,包括自動備份、時間點恢復以及與云存儲服務的集成。

還原 Redis 數據

還原 Redis 數據包括將當前 RDB 或 AOF 文件替換為備份文件,然后重新啟動 Redis 服務器。

從 RDB 快照還原

  1. 停止 Redis 服務器: 在從 RDB 快照還原之前,請停止 Redis 服務器以防止數據損壞。

    redis-cli shutdown
    
  2. 替換 RDB 文件: 將備份 RDB 文件復制到 Redis 工作目錄,替換現有的 dump.rdb 文件。

    cp /mnt/backup/redis/dump_20231027_100000.rdb /var/lib/redis/dump.rdb
    
  3. 調整文件所有權: 確保 Redis 用戶對還原的 RDB 文件具有正確的所有權和權限。

    chown redis:redis /var/lib/redis/dump.rdb
    
  4. 啟動 Redis 服務器: 啟動 Redis 服務器。它將自動從還原的 RDB 文件中加載數據。

    redis-server /etc/redis/redis.conf
    

從 AOF 文件恢復

  1. 停止 Redis 服務器: 與 RDB 一樣,在從 AOF 文件還原之前停止 Redis 服務器。

    redis-cli shutdown
    
  2. 替換 AOF 文件: 將備份 AOF 文件復制到 Redis 工作目錄,替換現有的 appendonly.aof 文件。

    cp /mnt/backup/redis/appendonly_20231027_100000.aof /var/lib/redis/appendonly.aof
    
  3. 調整文件所有權: 確保 Redis 用戶對還原的 AOF 文件具有正確的所有權和權限。

    chown redis:redis /var/lib/redis/appendonly.aof
    
  4. 配置 AOF: 確保在 redis.conf 文件中設置了 appendonly yes

  5. 啟動 Redis 服務器: 啟動 Redis 服務器。它將重放還原的 AOF 文件中的所有命令以重建數據庫。

    redis-server /etc/redis/redis.conf
    

處理 AOF 損壞

在某些情況下,AOF 文件可能會因服務器意外關閉或其他問題而損壞。Redis 提供了一個名為 redis-check-aof 的工具來修復損壞的 AOF 文件。

  1. 運行 redis-check-aof 使用 redis-check-aof 工具分析和修復 AOF 文件。

    redis-check-aof --fix /var/lib/redis/appendonly.aof
    

    此命令嘗試修復 AOF 文件中的任何不一致或錯誤。

  2. 重新啟動 Redis 服務器: 修復 AOF 文件后,重啟 Redis 服務器加載數據。

優先考慮 AOF 而不是 RDB

如果 RDB 和 AOF 文件都存在,Redis 將默認優先從 AOF 文件加載數據,因為它代表數據庫的最新狀態。如果要強制 Redis 從 RDB 文件加載,則可以在啟動服務器之前臨時重命名或刪除 AOF 文件。

驗證備份完整性

驗證備份的完整性以確保它們有效并可用于成功還原數據,這一點至關重要。

RDB 完整性檢查

雖然沒有直接工具來“檢查”RDB 完整性,但您可以通過以下方式間接驗證它:

  1. 還原到暫存環境: 將 RDB 文件還原到單獨的暫存環境,并驗證數據是否一致且完整。
  2. 比較鍵數: 在備份之前和之后,使用 DBSIZE 命令記錄數據庫中的鍵數。還原后,將密鑰計數與記錄的值進行比較。重大差異可能表示數據損壞。

AOF 完整性檢查

如前所述,redis-check-aof 工具可用于驗證和修復 AOF 文件。

  1. 在 Check 模式下運行 redis-check-aof 使用不帶 --fix 選項的 redis-check-aof 工具分析 AOF 文件是否有錯誤,而無需修改它。

    redis-check-aof /var/lib/redis/appendonly.aof
    

    此命令將報告在 AOF 文件中發現的任何不一致或錯誤。

一般備份驗證做法

  • 定期測試: 計劃定期測試從備份中恢復,以確保該過程正常工作并且恢復的數據有效。
  • 監測: 監視備份過程是否存在錯誤或故障。設置警報以通知您任何問題。
  • 冗余: 將備份存儲在多個位置,以防止因硬件故障或其他災難而丟失數據。

實際應用

考慮一個使用 Redis 存儲會話數據、購物車信息和產品目錄的電子商務平臺。該平臺的流量很高,并依賴 Redis 進行快速數據訪問。

  • 備份策略: 該平臺使用 RDB 和 AOF 實施混合備份策略。RDB 快照每天凌晨 2:00 拍攝,以便在發生重大故障時提供快速恢復點。AOF 每 sec( 每秒)啟用 appendfsync,以確保在服務器崩潰時將數據丟失降至最低。
  • 備份自動化: cron 作業配置為自動觸發 BGSAVE 命令并將 RDB 和 AOF 文件復制到云存儲服務。備份文件使用時間戳命名,以維護備份的歷史記錄。
  • 恢復過程: 如果發生數據丟失事件,平臺的運營團隊會遵循記錄在案的還原程序。他們首先嘗試從最新的 AOF 文件還原。如果 AOF 文件已損壞或不可用,它們將從最新的 RDB 快照中恢復。
  • 驗證: 每次還原后,運營團隊都會通過比較密鑰計數并手動檢查關鍵數據元素(如用戶會話和購物車)來驗證還原數據的完整性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82104.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【上位機——WPF】布局控件

布局控件 常用布局控件Panel基類Grid(網格)UniformGrid(均勻分布)StackPanel(堆積面板)WrapPanel(換行面板)DockerPanel(停靠面板)Canvas(畫布布局)Border(邊框)GridSplitter(分割窗口)常用布局控件 Grid:網格,根據自定義行和列來設置控件的布局StackPanel:棧式面板,包含的…

打卡Day33

簡單的神經網絡 數據的準備 # 仍然用4特征,3分類的鳶尾花數據集作為我們今天的數據集 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import numpy as np# 加載鳶尾花數據集 iris load_iris() X iris.data # …

python開發環境管理和包管理

在 Python 開發中,環境管理 和 包管理 是兩個非常重要的概念。它們幫助開發者: 這里寫目錄標題 一、什么是 Python 環境管理?二、什么是 Python 包管理?三、常見文件說明(用于包管理和環境配置)四、典型流程…

Mybatis面向接口編程

添加與Mapper接口的映射 <!--UserMapper.xml--> <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> …

GMP模型入門

go的并發實現采用的是M:N的線程模型&#xff0c;落地就是gmp模型。 M:N模型如下圖&#xff1a; gmp模型如下圖&#xff1a; --- Go 的 GMP 模型是其 高效并發調度機制的核心。GMP 代表&#xff1a; G&#xff1a;Goroutine&#xff08;用戶態線程&#xff09; M&#xff1a;…

達夢數據庫-報錯-01-[-3205]:全文索引詞庫加載出錯

目錄 一、環境信息 二、說點什么 三、模擬實驗 1、前臺啟動數據庫 2、重建全文索引報錯 3、日志信息 4、查找SYSWORD.UTF8.LIB 5、想一想加做一做 6、重啟數據庫 7、重建全文索引 8、總結 一、環境信息 名稱值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系統CentO…

經典密碼學和現代密碼學的結構及其主要區別(1)維吉尼亞密碼—附py代碼

Vigenre cipher 維吉尼亞密碼 維吉尼亞密碼由布萊斯德維吉尼亞在 16 世紀發明&#xff0c;是凱撒密碼的一個更復雜的擴展。它是一種多字母替換密碼&#xff0c;使用一個關鍵字來確定明文中不同字母的多個移位值。 與凱撒密碼不同&#xff0c;凱撒密碼對所有字母都有固定的偏移…

Ubuntu部署私有Gitlab

這個東西安裝其實挺簡單的&#xff0c;但是因為我這邊遷移了數據目錄和使用自己安裝的 nginx 代理還是踩了幾個坑&#xff0c;所以大家可以注意下 先看下安裝 # 先安裝必要組件 sudo apt update sudo apt install -y curl openssh-server ca-certificates tzdata perl# 添加gi…

【JVM 02-JVM內存結構之-程序計數器】

程序計數器 筆記記錄 1. 定義2. 作用3. 特點4. 拓展理解4.1 PC寄存器存儲字節碼指令地址有什么用&#xff1f;4.2 PC寄存器為什么被設定為線程私有的&#xff1f;4.3 為什么執行native方法時&#xff0c;是undefined&#xff1f; 學習資料來源-b站黑馬JVM& 尚硅谷JVM精講與…

【node.js】數據庫與存儲

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;node.js 文章目錄 1. 數據庫概述1.1 數據庫在Node.js中的作用1.2 Node.js支持的數據庫類型 2. 關系型數據庫集成2.1 MySQL與Node.js2.1.1 安裝MySQL驅動2.1.2 建立連接2.1.3 執行CRUD操作 2.2 PostgreSQL與Node.js2.2.1 安裝pg驅…

Windows10和Ubuntu24.04安裝Dify

1、win10上安裝docker不順利 參考&#xff1a;Dify的安裝_dify安裝-CSDN博客等資料&#xff0c;Dify依賴Docker運行&#xff0c;在Win10上安裝Docker&#xff0c;先安裝wsl。在PowerShell(管理員)中輸入&#xff1a; wsl --install 或顯示“找不到指定文件”&#xff0c;或顯示…

電網絕緣子及破損、閃絡缺陷YOLO數據集

概述 電網絕緣子及破損、閃絡缺陷YOLO數據集??&#xff0c;專為輸電線路缺陷檢測任務設計&#xff0c;可幫助開發者快速構建智能化識別模型。 主要內容 ??數據集規模?? 訓練集&#xff1a;2004張標注圖像驗證集&#xff1a;907張標注圖像所有數據均經過嚴格篩選與標注&…

5.2.4 wpf中MultiBinding的使用方法

在 WPF 中,MultiBinding 允許將多個綁定(Binding)組合成一個邏輯結果,并通過一個轉換器(IMultiValueConverter)處理這些值,最終影響目標屬性。以下是其核心用法和示例: 核心組件: MultiBinding:定義多個綁定源的集合。 IMultiValueConverter:實現邏…

基于SpringBoot+Vue的足球青訓俱樂部管理后臺系統的設計與開發

項目背景與概述 隨著足球青訓行業的快速發展&#xff0c;如何高效、規范地管理學員、教練以及課程等日常工作&#xff0c;成為了青訓俱樂部運營的重要課題。為了提升俱樂部的管理效率與用戶體驗&#xff0c;基于 Spring Boot 和 Vue.js 開發了一個 足球青訓俱樂部管理后臺系統…

互聯網大廠Java求職面試:云原生架構與AI應用集成解決方案

互聯網大廠Java求職面試&#xff1a;云原生架構與AI應用集成解決方案 場景一&#xff1a;短視頻與直播平臺的高并發架構設計 面試官提問 面試官&#xff08;技術總監&#xff09;&#xff1a; 鄭薪苦&#xff0c;你有處理過千萬級用戶同時在線的直播系統嗎&#xff1f;如何設…

RK3588 Opencv-ffmpeg-rkmpp-rkrga編譯與測試

RK3588 Opencv-ffmpeg-rkmpp-rkrga編譯與測試 硬件背景說明編譯環境準備1. 編譯MPP(媒體處理平臺)2. 編譯RGA(圖形加速庫)3. 構建支持硬件加速的FFmpeg重要代碼修改說明4. 驗證安裝5.FFmpeg轉碼測試OpenCV編譯集成Python OpenCV+FFmpeg測試硬件背景說明 RK3588是瑞芯微推出…

解鎖C++遞歸算法:從原理到實戰

遞歸算法初相識 ** 在 C 的奇妙世界里&#xff0c;遞歸算法就像是一把神奇的鑰匙&#xff0c;能夠開啟解決復雜問題的大門。那么&#xff0c;究竟什么是遞歸算法呢&#xff1f;簡單來說&#xff0c;遞歸算法就是一種函數調用自身的編程技巧。當一個函數在其定義中直接或間接地…

vue2+webpack環境變量配置

第一步&#xff1a;創建3個環境變量文件 1、創建> 生產&#xff08;本地&#xff09;環境 .env.development # 開發環境 ENVdevelopment VUE_APP_MEDIA_BASE調后端請求的地址2、創建> 測試環境 .env.staging # 測試環境 ENVstaging VUE_APP_MEDIA_BASE調后端請求的地址…

【通用智能體】Intelligent Internet Agent (II-Agent):面向復雜網絡任務的智能體系統深度解析

Intelligent Internet Agent &#xff08;II-Agent&#xff09;&#xff1a;面向復雜網絡任務的智能體系統深度解析 一、系統架構與設計哲學1.1 核心架構設計1.2 技術創新點1.2.1 動態任務分配機制1.2.2 網絡狀態感知模塊 二、系統架構解析2.1 完整工作流程2.2 性能指標對比 三…

力扣第450場周賽

Q1. 數位和等于下標的最小下標 給你一個整數數組 nums 。 返回滿足 nums[i] 的數位和&#xff08;每一位數字相加求和&#xff09;等于 i 的 最小 下標 i 。 如果不存在滿足要求的下標&#xff0c;返回 -1 。 示例 1&#xff1a; 輸入&#xff1a;nums [1,3,2] 輸出&#xff1…