基於redis 6.2
Redis備份還原
redis支持rdb和aof兩種持久化方式. 默認只開啓了rdb
RDB快照
半持久化, 默認已開啓, 默認配置基本不需要修改.
#rdb默認的觸發持久化的條件
save 900 1
save 300 10
save 60 10000
#rdb快照的文件名
dbfilename dump.rdb
#rdb快照文件保存路徑
dir /www/server/redis/
直接備份文件 dump.rdb
獲取redis目錄(rdb文件存放在這):
CONFIG GET dir
在redis命令下執行SAVE
, 可立即將內存中的數據寫入dump.rdb
:
redis-cli -h 127.0.0.1 -p 6379 -a 密碼 save
注意:
SAVE
命令會立即執行並等待返回結果,BGSAVE
是異步的(不會返回執行結果)
還原
-
停止redis服務
-
複製備份文件
dump.rdb
到redis目錄複製後, 檢查一下文件的owner是否是
redis
-
啓動redis
如果rdb文件損壞, 會啓動失敗, 使用redis-check-rdb dump.rdb
進行修復.
AOF(Append Only File)
全持久化, 比較耗IO, 需要手動開啓.
修改配置:
#開啓AOF
appendonly yes
-
默認的AOF持久化的文件名是:
appendonly.aof
-
其他配置基本不用修改. 默認的刷新策略是
everysec
, 即每秒寫入一次, 宕機後最多丟失一秒的數據.
直接備份文件 appendonly.aof
建議備份前在redis命令下執行bgrewriteaof
, 發送異步重寫指令, 可以減少日誌尺寸:
redis-cli -h 127.0.0.1 -p 6379 -a 密碼 bgrewriteaof
bgrewriteaof
是異步命令, 需要使用info persistence
命令檢查aof_rewrite_in_progress
是否爲0來確認是否已完整.
還原
-
停止redis服務
-
複製備份文件
appendonly.aof
到redis目錄複製後, 確認一下文件的owner是否是
redis
-
啓動redis
如果aof文件損壞, 會啓動失敗, 使用redis-check-aof --fix appendonly.aof
進行修復.
注意: 經過測試, redis 6.2 版本的aof會記錄
flushall
命令(早前的4.x可能不會記錄)
同時開啓rdb和aof
在配置文件中同時開啓rdb和aof時, 會加載aof文件
如果要打開aof, 建議先使用命令開啓, 以同步數據, 然後再修改配置文件.
開啓aof:
127.0.0.1:6379> config set appendonly yes
開啓aof之後, 會自動更新持久化文件.
執行aof日誌重寫(異步的, 需要監控狀態):
127.0.0.1:6379> bgrewriteaof
檢查持久化狀態:
127.0.0.1:6379> info persistence
查看aof_rewrite_in_progress
屬性的信息, 如果值爲0則表示當前沒有aof重寫進程, aof文件更新完成.
手動修改配置文件, 以確保redis重啓時開啓aof.
命令行操作
#開啓aof(運行時, 不會修改配置文件)
redis-cli -h 127.0.0.1 -p 6379 -a 123456 config set appendonly yes
#關閉rdb(運行時, 不會修改配置文件)
redis-cli -h 127.0.0.1 -p 6379 -a 123456 config set save ""
#在拷貝rdb文件前刷新:
redis-cli -h 127.0.0.1 -p 6379 -a 123456 save
批量導入模擬數據:
cat redis_batch.txt | redis-cli -h 127.0.0.1 -p 6379 -a 123456
redis_batch.txt中是redis命令的行, 比如:
set name aben
incr quantity
hset user:1 name aben age 18