Redis 數據備份還原與主從複製

Redis作爲一個內存數據庫,在數據安全以及集羣部署方面都提供了一系列工具可供使用。


一. Redis數據庫數據備份與恢復

Redis是內存型數據庫,但是爲了數據安全,就需要有“數據持久化“(就是將數據存儲在磁盤上)的機制,在備份方面提供了兩種工具,分別爲RDB和AOF。

1.RDB備份與恢復

RDB是利用快照來實現數據持久化的,當符合特定條件時,redis將會自動的將內存中的數據保存在硬盤上,當redis啓動時,會自動的將磁盤上的數據加載到內存中以實現數據環境的恢復。

(1)Redis條件進行RDB備份,步驟如下:
A.修改配置文件redis.conf:

save 900 1    # 900秒內有至少1個鍵被更改則進行快照
save 300 10   # 300秒內有至少10個鍵被更改則進行快照
save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照

dir path #path爲redis運行環境時操作的路徑
dbfilename rdbname #rdb數據備份文件名(如dump.rdb)

B.重啓Redis

注:這種方式的實現是Redis的主線程在條件觸發後,fork子進程後,在子進程中完成數據持久化的。

(2)Redis強制進行RDB備份,步驟如下:
在redis-cli中,使用如下命令:

redis-cli>SAVE  #在主進程強制阻塞進行快照備份
或者
redis-cli>BGSAVE  #主進程fork子進程進行快照備份

2.AOF備份與恢復

AOF(append only file)就是通過“將redis執行的每一條指令存儲在磁盤文件中“ 以實現數據持久化。

(1)開啓AOF功能
默認情況下,Redis是不開啓AOF的,要想使用該功能,則在redis.conf中配置:

appendonly yes

AOF文件存放的位置和RDB相同,可以這樣設置AOF文件:

dir path #文件存儲路徑
appendfilename appendonly.aof #aof文件拓展名爲aof

AOF的重寫配置:

auto-aof-rewrite-percentage 100  # 當目前的AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啓動時的AOF文件大小爲依據
auto-aof-rewrite-min-size 64mb   # 允許重寫的最小AOF文件大小

注意:“重寫”並不是對原有aof文件進行重新寫入或其它操作,而是對原有指令進行簡化,如曾經對list進行三個push:

lpush li_key 1
lpush li_key 2
lpush li_key 3

然後重寫的結果就是:

lpush li_key 1 2 3

同理,對HASH table、SET、SORTED SET也是同樣的處理方式。
通過重寫,就實現了aof文件的壓縮;

當然,細心的朋友會發現一個問題,對AOF重寫時會影響redis的請求訪問的,那麼redis是怎麼解決的呢?
A. Redis通過fork子進程來完成重寫;
B. 重寫時在內存中先創建AOF緩存,在重寫的同時,將新指令同時寫入舊的AOF文件中和AOF緩存中;
C. 重寫完成後,將AOF緩存的內容寫入磁盤,替換舊的AOF文件

(2)主動強制進行AOF備份

redis-cli> BGREWRITEAOF

二.數據遷移和主從複製

1.直接備份文件數據遷移

Redis的數據遷移比較簡單,步驟如下:
(1)關閉目標Redis服務;
(2)將相應的RDB文件或者AOF文件複製過去;
(3)設置REDIS的DIR或者開啓AOF功能;
(4)啓動目標REDIS服務;

2.主從複製

主服務器配置redis.conf:

bind 127.0.0.1 192.168.1.158 #後面的IP地址爲從服務器能訪問的主機的ip

從服務器配置redis.conf:

slaveof <masterip> <masterport> #masterip爲192.168.1.158 masterport默認是6379

啓動主服務器和從服務器

另外:利用主從複製還能夠實現數據遷移,將目標redis服務設置成從服務,然後進行數據同步,完成後,就取消主從關係,就完成了數據遷移了。

發佈了67 篇原創文章 · 獲贊 31 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章