Redis集群CentOS系统配置企业级数据备份方案以及数据恢复的操作(在开启AOF功能下恢复冷备RDB文件数据,保持AOF和RDB双开情况下恢复数据及错误的数据恢复步骤详解)
1. 設置每小時保存一份 /var/redis/6379/dump.rdb 文件至指定目錄(我這邊存放在 /usr/local/redis_backup 目錄下),并刪除48小時前的文件。
? ? 為了后面能夠定時執行該數據備份任務,我們在 /usr/local/redis_backup 目錄下創建一個rdb_backup.sh腳本文件,內容如下。
#!/bin/sh# date +%Y%m%d%H 是CentOS的時間用法,得到年月日時,如2021040708, # 更完整的有 date +%Y%m%d%H%M%S%Z cur_date=`date +%Y%m%d%H`# $cur_date使用變量值。這邊先移除當前時間段的目錄 rm -rf /usr/local/redis_backup/$cur_date mkdir /usr/local/redis_backup/$cur_date # 備份rdb文件 cp /var/redis/6379/dump.rdb /usr/local/redis_backup/$cur_date# 刪除48小時前備份的rdb文件 del_date=`date -d -48hour +%Y%m%d%H` rm -rf /usr/local/redis_backup/$del_date2. 這邊我們先直接手動執行該sh腳本文件,先賦予文件執行權限,并執行,如下。
3. 同理,我們再創建一個rdb_backup_daily.sh腳本用于每天保存一份rdb文件,并且僅僅保留最近一個月的文件,腳本代碼如下。
#!/bin/sh# 這邊不用再加上小時了 cur_date=`date +%Y%m%d` rm -rf /usr/local/redis_backup/$cur_date mkdir /usr/local/redis_backup/$cur_date cp /var/redis/6379/dump.rdb /usr/local/redis_backup/$cur_date# 這邊也不用加上小時,并且改為一個月 del_date=`date -d -1month +%Y%m%d` rm -rf /usr/local/redis_backup/$del_date4. 最后,我們使用crontab定時執行文件備份腳本文件,在終端輸入 crontab -e 后輸入如下內容,然后 :wq 保存退出即可。
0 * * * * sh /usr/local/redis_backup/rdb_backup.sh 0 0 * * * sh /usr/local/redis_backup/rdb_backup_daily.sh退出后有如下提示信息,網上的意思有沒安裝crontab,也有說是沒有執行select-editor選擇編輯器。
但是我們 crontab -l 指令可以看到我們的定時任務?,所以提示沒有問題,暫時忽略。
5. 數據恢復方案
5. 1 如果是redis進程被結束或者主機宕機了,那么重啟后,可根據aof文件直接數據恢復。因為aof文件是append-only方式,所以即使損壞,也只是后期加入的數據有問題,那么可以使用 redis安裝目錄/src/redis-check-aof --fix 將有損壞的數據指令刪除,直至其它指令正常,此時aof文件可正常執行。
5.2 如果是aof或rdb文件完全損壞不可用或者丟失,需要使用備份文件來恢復數據,錯誤恢復數據操作如下圖。
5.3 上圖展示了錯誤的數據恢復操作,為什么會造成上面的錯誤呢?原因是開啟aof后,Redis只從aof備份文件恢復數據,如果找不到aof文件,那么就利用Redis的數據創建aof文件,而不會從rdb中讀取數據恢復,等到我們進行相應操作或者將Redis服務shutdown后,Redis會將緩存中的空數據保存至aof和rdb文件(覆蓋我們拷貝過來的rdb文件),也就解釋了上圖為什么我們關閉Redis服務后,aof和rdb文件中內容都為空。所以正確的設置Redis從rdb文件恢復數據的操作如下:
5.3.1 先關閉Redis服務(如果還在運行),通過?redis-cli shutdown 指令關閉redis服務,通過指令 ps -ef | grep redis 查看Redis是否關閉。
5.3.2 暫時關閉conf文件中的aof功能,先通過 vi /etc/redis/6379.conf 指令打開配置文件,然后設置 appendonly 為 no ,操作如下。
5.3.3 拷貝一份rdb文件至?/var/redis/6379 目錄下,并確認該備份文件有相關數據,如下。
5.3.4 進入 /etc/init.d 目錄,通過 ./redis_6379 start 指令啟動Redis服務,并查看相關數據成功,如下。
5.3.5 注意:此時如果直接redis-cli shutdown(安全退出模式,會保存rdb文件,不保存aof文件),然后手動修改配置文件打開aof配置,再啟動Redis服務,你會發現又獲取不到數據了。
5.3.6 為什么又會獲取不到數據呢?還是因為我們開啟aof功能后,Redis又從aof備份文件恢復數據,但是沒有找到aof文件,那么直接基于Redis內存數據創建aof文件,內存為空,之后保存的備份文件也為空,因此后續重啟Redis服務也得不到數據。所以在執行完5.3.4步驟后,我們在確認Redis從rdb備份文件恢復數據后,直接在redis終端通過 config set appendonly yes 進行熱修改,打開aof備份功能,然后Redis數據就能寫入aof文件中。缺點是熱修改的配置參數沒有被持久化修改,但是此時aof文件已經保存了Redis數據,我們可以關閉redis,然后修改配置文件,設置 appendonly 為 yes,進行aof備份功能的持久化配置,最后重啟redis從aof備份文件恢復數據即可。
總結
以上是生活随笔為你收集整理的Redis集群CentOS系统配置企业级数据备份方案以及数据恢复的操作(在开启AOF功能下恢复冷备RDB文件数据,保持AOF和RDB双开情况下恢复数据及错误的数据恢复步骤详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS6.5安装Redis3.2.
- 下一篇: 操作系统相关内容