目錄
事情是這樣的...
Redis持久化資料的兩種模式
一、RDB模式
二、AOF模式
三、RDB和AOF之間的關系
四、問題回顧分析
那么該如何開啟AOF增量備份模式呢?
解決方法:
1、登錄到redis
2、在線修改AOF開關
3、查看資料
事情是這樣的...
今天,跑的好好的程式突然掛球了,問了一下負責redis維護的同事,同事說,根據領導的要求,對Redis的備份模式進行了修改,開啟了AOF(AppendOnlyFile)的增量備份模式,
我一聽心里就慌了,,,
問他:"你是不是改了組態檔?然后,,,重啟了?!?!"
同事說:“是啊”

還說:“RDB模式默認開啟的,全量備份一直開著,怕什么?”
我聽他說完,心里一萬只羊駝掠過,,,

emmm~~~~為什么重啟一下會出這么大簍子

心里當時就很崩潰~~~~
但還是強忍著跟他說了一下 Redis資料本地化的兩種模式

Redis持久化資料的兩種模式
一、RDB模式
1、Redis默認啟用的本地化模式,
2、每隔一段時間全量備份;系統將匯出的dump.rdb檔案備份,
save 900 1 #900秒內 至少1個key 被更新 就全量備份RDB
save 300 10
save 60 10000
3、原理:redis會fork一個新的行程來進行rdb全量結構化,(redis本身讀寫是單行程的)
4、缺點:備份后和故障間 資料丟失;新fork的子行程會copy父行程里的記憶體資料進行備份,會造成記憶體瞬間翻倍,
二、AOF模式
1、AppendOnlyFile的縮寫,是一種增量備份模式,Redis默認不開啟,
2、類似mysql資料庫的binlog,記錄所有的redis操作記錄
appendonly yes #開啟AOF
appendfilename "appendonly.aof" #設定備份檔案名
appendfsync everysec #每秒更新一次操作記錄
3、Redis會在原有行程的基礎上,重新fork一個子行程進行記錄
4、日志形式記錄寫操作;以檔案追加的方式記錄(在同一個備份檔案上追加操作記錄)
三、RDB和AOF之間的關系
1、優先級AOF>RDB
2、RDB和AOF之間是不會相互通信的
四、問題回顧分析
同事改完組態檔打開AOF
#開啟AOF
appendonly yes
重啟了redis--server
redis-server redis.conf
AOF在重啟redis之后才開始生效,
重啟之后,redis 首先加載AOF的備份檔案(因為開了AOF開關),但是AOF是空的,所有Redis記憶體就被加載為空了,
這個時候,一旦觸發或滿足了RDB全量備份的條件,Redis會對整個記憶體資料庫進行全量備份,并且覆寫掉原先的備份檔案,
BUT 這個時候,Redis的記憶體是空的,完整RDB之后,就把空記憶體庫全量備份 覆寫了原有的RDB備份檔案,
所以,記憶體空了,AOF還啥都沒有,之前的RDB備份檔案也被覆寫了,,,
完美 平滑 不留痕跡的 技術手段刪庫
當時就想給這個大佬跪下了

emmm...總結一下,就是一波操作下來,重啟之后的AOF占領了記憶體,記憶體又全量覆寫了之前重啟之前全量備份的RDB,資料全沒了,
最后,幸好redis的RDB的備份檔案,每天都會備份一次,但是從上次備份到重啟這段時間里的資料還是找不回來了,
-----------------End Of The Story----------------
那么該如何開啟AOF增量備份模式呢?
解決方法:
在線修改AOF開關
不要隨便重啟Redis!!!因為重啟就會涉及到Redis記憶體的重新加載,
1、登錄到redis
#鏈接到redis
[root@mail ~]# redis-cli -a 123456[你的密碼] -p 6379
2、在線修改AOF開關
#redis中查看AOF狀態
127.0.0.1:7001> config get appendonly
1) "appendonly"
2) "no"
#在線設定AOF開關為yes
127.0.0.1:7001> config set appendonly yes
OK
127.0.0.1:7001>
3、查看資料
#資料都在
127.0.0.1:7001> keys *
1) "name"
2) "gender"
3) "age"
127.0.0.1:7001>
而且備份檔案AOF和RDB也都正常持久化中

歡迎關注微信公眾號:Linux黑客小課堂 一起學習,一起進步~~~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273337.html
標籤:其他
下一篇:C語言入門(基礎二)
