redis備份和恢復的方式
Redis資料備份與恢復
-
RDB方式(預設)
RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將記憶體中的所有資料進行快照並儲存在硬碟上。進行快照的條件可以由使用者在配置檔案中自定義,由兩個引數構成:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照。RDB是Redis預設採用的持久化方式,在配置檔案中已經預置了3個條件:
save 900 1 # 900秒內有至少1個鍵被更改則進行快照 save 300 10 # 300秒內有至少10個鍵被更改則進行快照 save 60 10000 # 60秒內有至少10000個鍵被更改則進行快照
可以存在多個條件,條件之間是“或”的關係,只要滿足其中一個條件,就會進行快照。 如果想要禁用自動快照,只需要將所有的save引數刪除即可。
Redis預設會將快照檔案儲存在當前目錄(可CONFIG GET dir來檢視)的dump.rdb檔案中,可以通過配置dir和dbfilename兩個引數分別指定快照檔案的儲存路徑和檔名。
Redis實現快照的過程
- Redis使用fork函式複製一份當前程式(父程式)的副本(子程式);
- 父程式繼續接收並處理客戶端發來的命令,而子程式開始將記憶體中的資料寫入硬碟中的臨時檔案;
- 當子程式寫入完所有資料後會用該臨時檔案替換舊的RDB檔案,至此一次快照操作完成。
在執行fork的時候作業系統(類Unix作業系統)會使用寫時複製(copy-on-write)策略,即fork函式發生的一刻父子程式共享同一記憶體資料,當父程式要更改其中某片資料時(如執行一個寫命令 ),作業系統會將該片資料複製一份以保證子程式的資料不受影響,所以新的RDB檔案儲存的是執行fork一刻的記憶體資料。
Redis在進行快照的過程中不會修改RDB檔案,只有快照結束後才會將舊的檔案替換成新的,也就是說任何時候RDB檔案都是完整的。這使得我們可以通過定時備份RDB檔案來實 現Redis資料庫備份。RDB檔案是經過壓縮(可以配置rdbcompression引數以禁用壓縮節省CPU佔用)的二進位制格式,所以佔用的空間會小於記憶體中的資料大小,更加利於傳輸。
除了自動快照,還可以手動傳送SAVE或BGSAVE命令讓Redis執行快照,兩個命令的區別在於,前者是由主程式進行快照操作,會阻塞住其他請求,後者會通過fork子程式進行快照操作。 Redis啟動後會讀取RDB快照檔案,將資料從硬碟載入到記憶體。根據資料量大小與結構和伺服器效能不同,這個時間也不同。通常將一個記錄一千萬個字串型別鍵、大小為1GB的快照檔案載入到內 存中需要花費20~30秒鐘。 通過RDB方式實現持久化,一旦Redis異常退出,就會丟失最後一次快照以後更改的所有資料。這就需要開發者根據具體的應用場合,通過組合設定自動快照條件的方式來將可能發生的資料損失控制在能夠接受的範圍。如果資料很重要以至於無法承受任何損失,則可以考慮使用AOF方式進行持久化。
-
AOF方式
預設情況下Redis沒有開啟AOF(append only file)方式的持久化,可以在redis.conf中通過appendonly引數開啟:
appendonly yes
在啟動時Redis會逐個執行AOF檔案中的命令來將硬碟中的資料載入到記憶體中,載入的速度相較RDB會慢一些
開啟AOF持久化後每執行一條會更改Redis中的資料的命令,Redis就會將該命令寫入硬碟中的AOF檔案。AOF檔案的儲存位置和RDB檔案的位置相同,都是通過dir引數設定的,預設的檔名是appendonly.aof,可以通過appendfilename引數修改:
appendfilename appendonly.aof
配置redis自動重寫AOF檔案的條件
auto-aof-rewrite-percentage 100 # 當目前的AOF檔案大小超過上一次重寫時的AOF檔案大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF檔案大小為依據 auto-aof-rewrite-min-size 64mb # 允許重寫的最小AOF檔案大小
配置寫入AOF檔案後,要求系統重新整理硬碟快取的機制
# appendfsync always # 每次執行寫入都會執行同步,最安全也最慢 appendfsync everysec # 每秒執行一次同步操作 # appendfsync no # 不主動進行同步操作,而是完全交由作業系統來做(即每30秒一次),最快也最不安全
Redis允許同時開啟AOF和RDB,既保證了資料安全又使得進行備份等操作十分容易。此時重新啟動Redis後Redis會使用AOF檔案來恢復資料,因為AOF方式的持久化可能丟失的資料更少
轉:http://blog.csdn.net/huangjin0507/article/details/52117103
相關文章
- redis 備份和恢復Redis
- 備份和恢復redisRedis
- redis備份恢復Redis
- 備份和恢復
- Redis的資料備份與恢復Redis
- SQL Server 的備份和恢復模式的工作方式SQLServer模式
- Backup And Recovery User's Guide-備份和恢復概覽-備份和恢復介紹-備份和恢復的目的GUIIDE
- windwos server 路由備份和恢復 路由表備份和恢復Server路由
- Mysql備份和恢復MySql
- Oracle 備份和恢復Oracle
- SQL Server 中備份的還原和恢復工作方式SQLServer
- SqlServer備份和恢復(二)SQLServer
- SqlServer 備份和恢復(一)SQLServer
- 【MySQL】MySQL備份和恢復MySql
- MySQL 備份和恢復 一MySql
- oracle冷備份、恢復和異機恢復Oracle
- 備份與恢復--利用備份的控制檔案恢復
- 資料庫備份與異機恢復——熱備份方式資料庫
- 【備份恢復】從備份恢復資料庫資料庫
- 【管理篇備份恢復】備份恢復基礎
- Oracle備份恢復之熱備份恢復及異機恢復Oracle
- 控制檔案的備份和恢復
- ORACLE備份和恢復 - 邏輯備份 exp/impOracle
- Oracle 備份和恢復介紹Oracle
- 【MySql】innobackupex增量備份和恢復MySql
- 【MySql】innobackupex 增量備份和恢復MySql
- 備份與恢復系列 十一 控制檔案的備份與恢復
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- PostgreSql資料庫的備份和恢復SQL資料庫
- 【oracle】統計資訊的恢復和備份Oracle
- Mysql備份恢復MySql
- Postgresql 備份恢復SQL
- mysql 備份恢復MySql
- Oracle資料庫的備份與恢復方式比較Oracle資料庫
- 備份&恢復之四:非歸檔模式下的備份與恢復模式
- xtrabackup和innobackuppex的安裝和備份(含增量備份)已經恢復
- 備份與恢復:polardb資料庫備份與恢復資料庫
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle