在Ubuntu?14.04系統(tǒng)上備份和恢復Redis數(shù)據(jù)詳細步驟
簡介
Redis 是一個內(nèi)存中的鍵值緩存和存儲(也可以是數(shù)據(jù)庫),同時也可以持久化(永久保存)到磁盤上。在本文中,您將了解如何在 Ubuntu 14.04 服務器上備份 Redis 數(shù)據(jù)庫。
默認情況下,Redis 數(shù)據(jù)保存在一個 .rdb
文件中,這是您的 Redis 數(shù)據(jù)集的一個時間點快照。這個快照是在指定的時間間隔內(nèi)生成的,非常適合用于備份。
先決條件
要完成本教程中的步驟,您需要:
- 一個 Ubuntu 14.04 服務器
- 安裝 Redis。您可以按照這個 Redis 設置教程中的 master 設置(盡管在主從集群中同樣適用)
- 確保您的 Redis 服務器正在運行
- 如果設置了 Redis 密碼,強烈建議設置,確保您知道密碼。密碼在 Redis 配置文件
/etc/redis/redis.conf
中。
步驟 1 — 定位 Redis 數(shù)據(jù)目錄
Redis 將其數(shù)據(jù)存儲在服務器上的一個目錄中,這就是我們要備份的內(nèi)容。首先我們需要知道它的位置。
在 Ubuntu 和其他 Linux 發(fā)行版中,Redis 數(shù)據(jù)庫目錄是 /var/lib/redis
。但是,如果您管理的服務器是繼承而來的,并且 Redis 數(shù)據(jù)位置已更改,您可以通過輸入以下命令來定位它:
sudo locate *rdb
或者,您也可以從 redis-cli
提示符中找到它。要做到這一點,輸入:
redis-cli
如果 Redis 服務器沒有運行,響應將是:
無法連接到 127.0.0.1:6379 的 Redis:連接被拒絕 未連接>
在這種情況下,啟動 Redis 并使用以下命令重新連接:
sudo service redis-server start redis-cli
Shell 提示現(xiàn)在應該變成:
127.0.0.1:6379>
連接到 Redis 后,接下來的兩個命令將對其進行身份驗證并獲取數(shù)據(jù)目錄:
auth 插入-redis-密碼-這里 config get dir
最后一個命令的輸出應該是您的 Redis 數(shù)據(jù)目錄:
1) "dir" 2) "/var/lib/redis"
記下您的 Redis 目錄。如果它與顯示的目錄不同,請確保在整個教程中使用此目錄。
現(xiàn)在可以退出數(shù)據(jù)庫命令行界面:
exit
檢查這是否是正確的目錄:
ls /var/lib/redis
您應該看到一個 dump.rdb
文件。這就是 Redis 數(shù)據(jù)。如果 appendonly
也已啟用,您還將看到一個 appendonly.aof
或另一個 .aof
文件,其中包含服務器接收的所有寫操作的日志。
有關 Redis 持久性的討論,請參閱此帖子以了解這兩個文件之間的區(qū)別。基本上,.rdb
文件是當前快照,而 .aof
文件保留了您的 Redis 歷史。這兩者都值得備份。
我們將從只有 .rdb
文件開始,并以自動備份這兩個文件結束。
(可選)步驟 2 — 添加示例數(shù)據(jù)
在本節(jié)中,您可以創(chuàng)建一些示例數(shù)據(jù)以存儲在您的 Redis 數(shù)據(jù)庫中。如果您的服務器上已經(jīng)有數(shù)據(jù),您可以直接備份現(xiàn)有內(nèi)容。
登錄到數(shù)據(jù)庫命令行界面:
redis-cli
進行身份驗證:
auth 插入-redis-密碼-這里
讓我們添加一些示例數(shù)據(jù)。每個步驟后,您應該收到 OK
的響應。
SET shapes:triangles "3 sides" SET shapes:squares "4 sides"
確認數(shù)據(jù)已添加。
GET shapes:triangles GET shapes:squares
以下是輸出:
"3 sides" "4 sides"
要將這些更改保存到 /var/lib/redis/dump.rdb
文件中,請執(zhí)行保存操作:
save
您可以退出:
exit
如果愿意,現(xiàn)在可以檢查 dump 文件的內(nèi)容。它應該包含您的數(shù)據(jù),盡管以機器友好的形式呈現(xiàn):
sudo cat /var/lib/redis/dump.rdb
步驟 3 —— 備份 Redis 數(shù)據(jù)
現(xiàn)在你知道了 Redis 數(shù)據(jù)的存儲位置,是時候進行備份了。從官方 Redis 網(wǎng)站上可以找到以下引用:
Redis 非常友好地支持數(shù)據(jù)備份,因為你可以在數(shù)據(jù)庫運行時復制 RDB 文件:一旦生成,RDB 就不會被修改,而在生成過程中會使用臨時名稱,并且只有在新快照完成時才會使用 rename(2) 原子地將其重命名為最終目的地。
因此,你可以在 Redis 服務器運行時備份或復制數(shù)據(jù)庫文件。假設你要將其備份到家目錄下的一個目錄中,執(zhí)行備份的命令如下:
sudo cp /var/lib/redis/dump.rdb /home/sammy/redis-backup-001
Redis 定期保存內(nèi)容,這意味著如果上述命令是你運行的全部內(nèi)容,你不能保證備份是最新的。 你需要先保存你的數(shù)據(jù)。
然而,如果可以接受潛在的少量數(shù)據(jù)丟失,僅備份這一個文件就可以。
保存數(shù)據(jù)庫狀態(tài)
為了獲得一個更加近期的 Redis 數(shù)據(jù)副本,更好的方法是訪問 redis-cli
,即 Redis 命令行。
按照第 1 步中的說明進行身份驗證。
然后,像這樣發(fā)出 save
命令:
save
輸出應該類似于:
OK (1.08s)
退出數(shù)據(jù)庫。
現(xiàn)在你可以運行上面給出的 cp
命令,確信你的備份是完全最新的。
雖然 cp
命令將提供數(shù)據(jù)庫的一次性備份,但最佳解決方案是設置一個可以自動化該過程的 cron 作業(yè),并使用一個可以執(zhí)行增量更新并在需要時恢復數(shù)據(jù)的工具。
步驟 4 —— 使用 rdiff-backup 和 Cron 配置自動更新
在本節(jié)中,我們將配置一個自動備份,備份整個 Redis 數(shù)據(jù)目錄,包括數(shù)據(jù)文件。
有幾種自動化備份工具可供選擇。在本教程中,我們將使用一個較新且用戶友好的工具,名為 rdiff-backup
。
rdiff-backup
是一個命令行備份工具。很可能你的服務器上尚未安裝 rdiff-backup
,因此你首先需要安裝它:
sudo apt-get install -y rdiff-backup
現(xiàn)在它已經(jīng)安裝好了,你可以通過將 Redis 數(shù)據(jù)備份到家目錄中的一個文件夾來測試它。在本例中,我們假設你的家目錄是 /home/sammy
:
請注意,如果目標目錄不存在,腳本將會創(chuàng)建它。換句話說,你不必自己創(chuàng)建它。
使用 –preserve-numerical-ids,源目錄和目標目錄的所有權將保持一致。
sudo rdiff-backup --preserve-numerical-ids /var/lib/redis /home/sammy/redis
與之前的 cp
命令類似,這是一次性備份。不同之處在于現(xiàn)在我們備份整個 /var/lib/redis
目錄,并且使用 rdiff-backup
。
現(xiàn)在我們將使用 cron 自動化備份,以便在設定的時間進行備份。為此,打開系統(tǒng) crontab:
sudo crontab -e
(如果你在此服務器上以前沒有使用過 crontab,請在提示時選擇你喜歡的文本編輯器。)
在文件底部追加如下條目。
0 0 * * * rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
此 Cron 條目將在每天午夜執(zhí)行一次 Redis 備份。–no-file-statistics 開關將禁用寫入 rdiff-backup-data
目錄中的 file_statistics
文件,這將使 rdiff-backup
運行更快,并且占用的磁盤空間稍少一些。
或者,你可以使用以下條目進行每日備份:
@daily rdiff-backup --preserve-numerical-ids --no-file-statistics /var/lib/redis /home/sammy/redis
有關 Cron 的更多信息,請閱讀這篇關于 Cron 的文章。
目前,備份將每天執(zhí)行一次,因此你可以明天回來進行最終測試?;蛘?,你可以暫時增加備份頻率以確保它正常工作。
由于文件的所有者是 redis 系統(tǒng)用戶,你可以使用以下命令驗證它們是否存在(確保你等到備份實際觸發(fā)):
ls -l /home/sammy/redis
你的輸出應該類似于:
total 20 -rw-rw---- 1 redis redis 70 Sep 14 13:13 dump.rdb drwx------ 3 root root 12288 Sep 14 13:49 rdiff-backup-data -rw-r----- 1 redis redis 119 Sep 14 13:09 redis-staging-ao.aof
現(xiàn)在你的 Redis 數(shù)據(jù)每天都會在同一臺服務器上的家目錄中進行備份。
步驟 5 — 從備份中恢復 Redis 數(shù)據(jù)庫
現(xiàn)在您已經(jīng)學會了如何備份 Redis 數(shù)據(jù)庫,接下來的步驟將向您展示如何從 dump.rdb
備份文件中恢復數(shù)據(jù)庫。
恢復備份需要您用恢復文件替換活動的 Redis 數(shù)據(jù)庫文件。由于這可能具有破壞性,我們建議如果可能的話,將其恢復到一個全新的 Redis 服務器。
您不希望用更有問題的恢復文件覆蓋您的實時數(shù)據(jù)庫。然而,即使是在恢復到同一臺服務器時,重命名而不是刪除當前文件可以最小化風險,這也是本教程展示的策略。
檢查恢復文件內(nèi)容
首先,檢查您的 dump.rdb
文件的內(nèi)容。確保它包含您想要的數(shù)據(jù)。
您可以直接檢查轉儲文件的內(nèi)容,盡管請記住它使用的是 Redis 友好的格式,而不是人類友好的格式:
sudo cat /home/gilly/redis/dump.rdb
對于一個小型數(shù)據(jù)庫,您的輸出應該看起來像這樣:
REDIS0006?shapes:triangles3 sidesshapes:squares4 sides??!^?\?,?
如果您最近的備份沒有所需的數(shù)據(jù),那么您不應該繼續(xù)進行恢復。如果內(nèi)容存在,可以繼續(xù)。
可選:模擬數(shù)據(jù)丟失
讓我們模擬數(shù)據(jù)丟失,這將是從備份中恢復的原因。
登錄到 Redis:
redis-cli
在這一系列命令中,我們將使用 Redis 進行授權并刪除 shapes:triangles
條目:
auth insert-redis-password-here DEL shapes:triangles
現(xiàn)在讓我們確保該條目已被刪除:
GET shapes:triangles
輸出應該是:
(nil)
保存并退出:
save exit
可選:設置新的 Redis 服務器
現(xiàn)在,如果您計劃恢復到一個新的 Redis 服務器,請確保新的 Redis 服務器已經(jīng)啟動。
為了本教程的目的,我們將只遵循 Redis 集群教程的 第 1 步,盡管如果您想要一個更復雜的設置,可以遵循整篇文章。
如果您遵循了 第 2 步,在那里您添加了密碼并啟用了 AOF,請確保在恢復過程中考慮到這一點。
一旦您通過運行 redis-benchmark -q -n 1000 -c 10 -P 5
驗證了新服務器上的 Redis 已經(jīng)啟動,您就可以繼續(xù)。
停止 Redis
在我們替換 Redis 轉儲文件之前,我們需要停止當前運行的 Redis 實例。一旦停止 Redis,您的數(shù)據(jù)庫將處于離線狀態(tài)。
sudo service redis-server stop
輸出應該是:
Stopping redis-server: redis-server
檢查它是否真的停止了:
sudo service redis-server status
redis-server is not running
接下來,我們將重命名當前的數(shù)據(jù)庫文件。
重命名當前的 dump.rdb
Redis 從 dump.rdb
文件中讀取其內(nèi)容。讓我們將當前的文件重命名,為我們的恢復文件騰出空間。
sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.old
請注意,如果您決定當前版本比您的備份文件更好,您可以恢復 dump.rdb.old
。
如果 AOF 已啟用,請將其關閉
AOF 跟蹤每個寫操作到 Redis 數(shù)據(jù)庫。然而,由于我們試圖從時間點備份中恢復,我們不希望 Redis 重新創(chuàng)建其 AOF 文件中存儲的操作。
如果您按照 Redis 集群教程中的說明設置了 Redis 服務器,則 AOF 已啟用。
您還可以列出 /var/lib/redis/
目錄的內(nèi)容。如果您在那里看到一個 .aof
文件,那么您已經(jīng)啟用了 AOF。
讓我們將 .aof
文件重命名,暫時將其放在一邊。這會將每個以 .aof
結尾的文件重命名,因此如果您有多個 AOF 文件,您應該單獨重命名文件,而不要運行此命令:
sudo mv /var/lib/redis/*.aof /var/lib/redis/appendonly.aof.old
編輯您的 Redis 配置文件,暫時關閉 AOF:
sudo nano /etc/redis/redis.conf
在 AOF
部分,查找 appendonly
指令,并將其從 yes
更改為 no
。這將禁用它:
appendonly no
恢復 dump.rdb 文件
現(xiàn)在我們將使用我們的恢復文件,如果您按照本教程的先前步驟進行操作,該文件應該保存在 /home/sammy/redis/dump.rdb
。
如果您要將數(shù)據(jù)恢復到新的服務器,現(xiàn)在是從備份服務器上傳文件到新服務器的時候了:
scp /home/sammy/redis/dump.rdb sammy@your_new_redis_server_ip:/home/sammy/dump.rdb
現(xiàn)在,在恢復服務器上,可以是原始的 Redis 服務器或者是新的服務器,您可以使用 cp
命令將文件復制到 /var/lib/redis
文件夾:
sudo cp -p /home/sammy/redis/dump.rdb /var/lib/redis
(如果您將文件上傳到 /home/sammy/dump.rdb
,則使用命令 sudo cp -p /home/sammy/dump.rdb /var/lib/redis
來復制文件。)
或者,如果您想使用 rdiff-backup
,運行下面顯示的命令。請注意,這只適用于從您最初使用 rdiff-backup
設置的文件夾進行恢復。使用 rdiff-backup
時,您必須指定目標文件夾中的文件名:
sudo rdiff-backup -r now /home/sammy/redis/dump.rdb /var/lib/redis/dump.rdb
有關 -r
選項的詳細信息,請參考本文末尾給出的項目網(wǎng)站。
為 dump.rdb 文件設置權限
如果您要將數(shù)據(jù)恢復到與備份相同的服務器,那么您可能已經(jīng)擁有了正確的權限。
如果您將備份文件復制到新的服務器,您可能需要更新文件權限。
讓我們查看 /var/lib/redis/
目錄中 dump.rdb
文件的權限:
ls -la /var/lib/redis/
如果您看到類似以下內(nèi)容:
-rw-r----- 1 sammy sammy 70 Feb 25 15:38 dump.rdb -rw-rw---- 1 redis redis 4137 Feb 25 15:36 dump.rdb.old
您需要更新權限,以便文件歸 redis 用戶和組所有:
sudo chown redis:redis /var/lib/redis/dump.rdb
同時更新文件以便組也可以寫入:
sudo chmod 660 /var/lib/redis/dump.rdb
現(xiàn)在再次列出 /var/lib/redis/
目錄的內(nèi)容:
ls -la /var/lib/redis/
現(xiàn)在您恢復的 dump.rdb
文件已經(jīng)擁有了正確的權限:
-rw-rw---- 1 redis redis 70 Feb 25 15:38 dump.rdb -rw-rw---- 1 redis redis 4137 Feb 25 15:36 dump.rdb.old
啟動 Redis
現(xiàn)在我們需要再次啟動 Redis 服務器。
sudo service redis-server start
檢查數(shù)據(jù)庫內(nèi)容
讓我們看看恢復是否成功。
登錄到 Redis:
redis-cli
檢查 shapes:triangles
條目:
GET shapes:triangles
輸出應該是:
"3 sides"
太棒了!我們的恢復工作正常。
退出:
exit
如果您不使用 AOF,那么您已經(jīng)完成了!您恢復的 Redis 實例應該已經(jīng)恢復正常。
(可選)啟用 AOF
如果您想要恢復或開始使用 AOF 來跟蹤數(shù)據(jù)庫的所有寫操作,請按照以下說明操作。AOF 文件必須從 Redis 命令行重新創(chuàng)建。
登錄到 Redis:
redis-cli
打開 AOF:
BGREWRITEAOF
您應該會得到以下輸出:
Background append only file rewriting started
運行 info
命令。這將生成大量輸出:
info
滾動到Persistence部分,并檢查aof條目是否與此處顯示的內(nèi)容匹配。如果 aof_rewrite_in_progress 為 0,則 AOF 文件的重新創(chuàng)建已經(jīng)完成。
持久化
. . .
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:0
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
如果確認AOF文件的重建已經(jīng)完成,現(xiàn)在可以退出Redis命令行: ```custom_prefix(127.0.0.1:6379>) exit
您可以再次列出/var/lib/redis
中的文件:
ls /var/lib/redis
您應該再次看到一個活動的.aof
文件,例如appendonly.aof
或redis-staging-ao.aof
,以及dump.rdb
文件和其他備份文件。
確認后,停止Redis服務器:
sudo service redis-server stop
現(xiàn)在,在redis.conf
文件中再次啟用AOF:
sudo nano /etc/redis/redis.conf
然后通過將appendonly
的值更改為yes
來重新啟用AOF:
appendonly yes
啟動Redis:
sudo service redis-server start
如果您想再次驗證數(shù)據(jù)庫的內(nèi)容,只需再次運行檢查數(shù)據(jù)庫內(nèi)容部分。
就是這樣!您恢復的Redis實例應該恢復正常了。
結論
按照本文所述的方式備份Redis數(shù)據(jù)適用于當您不介意將數(shù)據(jù)備份到同一臺服務器上的目錄時。
當然,最安全的方法是將備份到不同的機器。您可以通過閱讀以下關于備份的文章來探索更多備份選項:
- 如何為您的VPS選擇有效的備份策略
您可以使用許多這些備份方法與/var/lib/redis
目錄中的相同文件。
總結
到此這篇關于在Ubuntu 14.04系統(tǒng)上備份和恢復Redis數(shù)據(jù)的文章就介紹到這了,更多相關Ubuntu備份和恢復Redis數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
redis啟動報錯Can‘t?open?the?log?file:?No?such?file?or?d
這篇文章主要介紹了redis啟動報錯Can‘t?open?the?log?file:?No?such?file?or?directory問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11redis?bitmap數(shù)據(jù)結構之java對等操作詳解
bitmap是以其高性能出名。其基本原理是一位存儲一個標識,其他衍生知道咱就不說了,而redis就是以這種原生格式存儲的,這篇文章主要介紹了redis?bitmap數(shù)據(jù)結構之java對等操作,需要的朋友可以參考下2022-10-10Redis實現(xiàn)每日簽到功能(大數(shù)據(jù)量)
在面對百萬級用戶簽到情況下,傳統(tǒng)數(shù)據(jù)庫存儲和判斷會遇到瓶頸,使用Redis的二進制數(shù)據(jù)類型可實現(xiàn)高效的簽到功能,示例代碼展示了如何調用這些功能,包括當天簽到、補簽以及查詢簽到記錄,PHP結合Redis二進制數(shù)據(jù)類型可有效處理大數(shù)據(jù)量下的簽到問題2024-10-10Redis高級玩法之利用SortedSet實現(xiàn)多維度排序的方法
Redis的SortedSet是可以根據(jù)score進行排序的,以手機應用商店的熱門榜單排序為例,根據(jù)下載量倒序排列。接下來通過本文給大家分享Redis高級玩法之利用SortedSet實現(xiàn)多維度排序的方法,一起看看吧2019-07-07淺談一下如何保證Redis緩存與數(shù)據(jù)庫的一致性
這篇文章主要介紹了一下如何保證Redis緩存與數(shù)據(jù)庫的一致性,今天這篇文章就帶你詳細了解一下四種同步策略,需要的朋友可以參考下2023-03-03Redis與數(shù)據(jù)庫數(shù)據(jù)一致性的原因及解決方案
Redis作為一種高效的鍵值對存儲系統(tǒng),常用于緩存數(shù)據(jù)庫減少IO操作,下面這篇文章主要介紹了Redis與數(shù)據(jù)庫數(shù)據(jù)一致性的原因及解決方案,文中介紹的非常詳細,需要的朋友可以參考下2025-04-04