redis 備份和恢復
版本:4.0.14
持久化:RDB+AOF
RDB相關引數:
dbfilename dump.rdb dir /redis/data
AOF相關引數:
appendonly yes appendfilename appendonly.aof appendfsync everysec auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
生成測試資料
127.0.0.1:6379> set name cjc OK 127.0.0.1:6379> set xxx 123 OK 127.0.0.1:6379> set ccc www OK 127.0.0.1:6379> keys * 1) "name" 2) "ccc" 3) "xxx"
備份資料庫
[redis@cjcos02 data]$ ls appendonly.aof dump.rdb [redis@cjcos02 data]$ cp * ../bak/ [redis@cjcos02 data]$ ls -lrth ../bak/ total 8.0K -rw-rw-r-- 1 redis redis 130 Dec 5 09:52 dump.rdb -rw-r--r-- 1 redis redis 259 Dec 5 09:52 appendonly.aof
模擬誤刪除key
127.0.0.1:6379> del key xxx (integer) 1 127.0.0.1:6379> keys * 1) "name" 2) "ccc"
恢復1:
透過rdb備份進行恢復
停庫
127.0.0.1:6379> shutdown
將dump.rdb備份還原
[redis@cjcos02 data]$ cp ../bak/dump.rdb .
啟動
[redis@cjcos02 conf]$ redis-server redis.conf
資料沒有恢復,因為aof優先順序高於rdb,啟動資料庫時優先載入aof檔案
[redis@cjcos02 conf]$ redis-cli 127.0.0.1:6379> keys * 1) "ccc" 2) "name"
恢復2:
透過aof進行恢復
停庫
127.0.0.1:6379> shutdown
將aof備份還原
[redis@cjcos02 data]$ cp ../bak/appendonly.aof .
啟動
[redis@cjcos02 conf]$ redis-server redis.conf
資料恢復成功
[redis@cjcos02 conf]$ redis-server redis.conf [redis@cjcos02 conf]$ redis-cli 127.0.0.1:6379> keys * 1) "name" 2) "ccc" 3) "xxx"
如何強制優先以rdb檔案載入?
1.破壞當前aof檔案
停庫
127.0.0.1:6379> shutdown
重新命名
[redis@cjcos02 data]$ mv appendonly.aof appendonly.aof_bak
啟庫,生成了一個空的aof檔案
[redis@cjcos02 conf]$ redis-server redis.conf [redis@cjcos02 data]$ ls -lrth total 8.0K -rw-r--r-- 1 redis redis 259 Dec 5 09:57 appendonly.aof_bak -rw-rw-r-- 1 redis redis 124 Dec 5 10:00 dump.rdb -rw-r--r-- 1 redis redis 0 Dec 5 10:01 appendonly.aof
資料全部丟失,原因是資料庫載入了新生成的aof空檔案
[redis@cjcos02 conf]$ redis-cli 127.0.0.1:6379> keys * (empty list or set)
並且當前的dump.rdb資料也會根據空的aof檔案進行更新,導致資料全部丟失
2.關閉aof
先恢復剛才丟失的資料
[redis@cjcos02 data]$ cp ../bak/dump.rdb .
停庫
127.0.0.1:6379> shutdown
關閉aof
[redis@cjcos02 data]$ vi ../conf/redis.conf appendonly no
啟庫
[redis@cjcos02 conf]$ redis-server redis.conf [redis@cjcos02 conf]$ redis-cli 127.0.0.1:6379> keys * 1) "fsd" 2) "age" 3) "name" 4) "xx"
總結:
1.redis資料持久化有rdb和aof,因為aof資料更新一些,所以如果rdb和aof都開啟了,啟動redis優先載入aof檔案。 2.備份時可以將rdb和aof都備份走。 3.如果rdb和aof都開啟了,啟動時想以rdb載入redis,千萬不能採用刪除或重新命名aof的方式, 熟悉oracle的都知道,引數檔案優先載入spfile,如果希望優先載入pfile,可以重新命名spfile, 但是在redis裡千萬不能這麼搞,如果這麼操作,redis啟動後會生成一個空的新aof檔案,並載入到redis裡,並以新的aof檔案更新rdb檔案,最終導致資料丟失。 正確的方式是透過引數關閉aof。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2926666/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份和恢復
- KunlunDB備份和恢復
- SqlServer備份和恢復(二)SQLServer
- SqlServer 備份和恢復(一)SQLServer
- 【MySQL】MySQL備份和恢復MySql
- RAC備份恢復之Voting備份與恢復
- innobackupex 部分表備份和恢復
- Oracle 備份和恢復介紹Oracle
- 備份與恢復:polardb資料庫備份與恢復資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- mydumper備份恢復
- Mysql備份恢復MySql
- 九 GBase 8a備份和恢復
- gitlab的資料備份和恢復Gitlab
- MySQL日誌管理,備份和恢復MySql
- MySQL備份和恢復方法彙總MySql
- 詳解叢集級備份恢復:物理細粒度備份恢復
- MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復MySql
- Mysql備份與恢復(1)---物理備份MySql
- rman 增量備份恢復
- Jenkins備份與恢復Jenkins
- Postgresql 備份與恢復SQL
- MySQL 備份與恢復MySql
- RMAN備份恢復技巧
- Grafana 備份恢復教程Grafana
- 帝國cms備份和恢復 帝國cms恢復資料
- Mongo 資料庫備份和恢復命令Go資料庫
- DBV:冷備份的校驗和恢復
- 2.6.1 CDB中備份和恢復的概述
- 12 使用RMAN備份和恢復檔案
- Jira/Confluence的備份、恢復和遷移
- db2 命令列備份和恢復DB2命令列
- PostgreSql資料庫的備份和恢復SQL資料庫
- 【PG備份恢復】pg_basebackup 多表空間備份恢復測試
- MySQL備份與恢復——基於OUTFILE /LOAD DATA 邏輯備份恢復MySql
- MySQL 非常規恢復與物理備份恢復MySql
- Mysql備份與恢復(2)---邏輯備份MySql
- Oracle 備份 與 恢復 概述Oracle