Redis持久化和數據恢復


redis提供了rdbaof兩種持久化機制,

  • rdb默認開啟,aof默認關閉。
    當兩種持久化機制都開啟時,redis重啟恢復數據時加載aof持久化的 appendonly.aof``文件,而rdb持久化的** dump.rdb**文件不會被加載到內存中。

開啟rdb,關閉aof

通過redis-cli SHUTDOWN這種方式停掉redis,這是一種安全的退出方式,redis會在退出的時候將內存中的數據立即生成一份完整的rdb快照。
通過kill -9殺死redis進程,這種方式會導致 redis異常退出,從而導致內存中的數據沒有到達save指定的檢查點,進而丟失內存中的數據。

開啟rdb,關閉aof,待 dump.rdb有數據后,再開啟aof

redis持久化 dump.rdb后,啟用aof持久化,再重啟 redisredis只會加載aof持久化的 appendonly.aof文件,如果它不存在,那會創建一個新的空的文件,從而導致內存中丟失 dump.rdb的數據。

解決方式:停止 redis,關閉aof,重啟 redis,確保 dump.rdb數據恢復在內存中,使用命令行熱修改 redis配置的方式打開aof,此時 redis就會以aof持久化的形式將內存中的數據寫入 appendonly.aof文件,然后停止 redis,修改配置文件將aof手動打開。

在這里插入圖片描述在這里插入圖片描述

情景:主從架構的 master關閉rdbaof持久化,slave作為 master的數據熱備
在采用 master-slave的水平擴展架構的時候,格外的需要注意master必須要開啟持久化,不建議用slave節點作為 master節點的數據熱備。
我們知道主從復制的架構中,所有的寫操作交由 master負責,slave分擔讀的操作,slave中的數據是從 master同步過來的。假如 masterrdbaof都關閉了,數據全部在內存中,那么 master宕機重啟時,發現本地沒有可以恢復的數據,導致 master內存數據為空,然后 master將空的數據集同步到slave節點,導致slave的數據全部清空。因此 master必須要開啟持久化!
即使我們采用高可用機制的哨兵模式,即 master宕機時,slave節點通過選舉轉變為 master節點,在這種情況下,可能哨兵模式還沒檢測到 master節點宕機, master節點就自動重啟了,因此還是可能導致所有slave節點數據清空。

原文鏈接:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM