mongodb恢復到指定時間點

主要步驟:

  1. 添加延時節點(已有忽略)
  2. 清洗oplog集合的數據,導出主節點 oplog 集合(local庫oplog.rs)
  3. 備份延時節點
  4. 將延時節點恢復到另一個副本集中
  5. 重放oplog

注意:oplog.rs集合需要容延時節點所延遲的操作

—————————————————以下爲附錄—————————————————

mongodb添加延時節點

1.      簡介

   延時節點是主節點過去某個時間點的“數據快照”,通常用來做數據備份,如果主節點有誤操作而刪除了數據,可以通過延時節點來恢復數據。例如,當前時間是10:00,並且延時節點設置1個小時的延時同步,那麼該節點不會同步1個小時內主節點上的操作。

2.      基本要求

2.1.        優先級

優先級必須設置爲0,防止延時節點被選爲主節點。

 

2.2.        隱藏節點

應該把延時節點設置爲隱藏節點,這樣客戶端在做從服務器讀操作時,請求不會被分發到延時節點。

2.3.        可以選舉投票

在發生選舉時,該節點可以投票。

2.4.        延時時長

延時節點通過延時從opLog同步數據來實現,因此延時時長的設置需要考慮兩個因素:

  1. 不小於維護時間窗口
  2. 比opLog的容量要小一些,不然會不能同步而進入stale狀態

 

3.      延時節點設置

下面舉一個例子來說明如果設置延時節點。假定目前有一個包含5個節點的複製組:1個主節點、3個普通從節點、1個延時節點。延時節點的延時時長設置爲3600s,並且它是一個優先級爲0的隱藏節點,如下圖所示:

 

 

連接到複製組的主節點,然後配置:

>cfg = rs.conf()

cfg.members[1].priority = 0

cfg.members[1].hidden = true

cfg.members[1].slaveDelay = 3600

>rs.reconfig(cfg)

4.      注意事項

rs.reconfig()命令執行後,會強制當前的主節點下線,然後進行新的主節點選擇。主節點下線時,會關閉所有客戶端的連接,這個過程會持續10-20s,因此該操作應該在維護時間執行,減少對系統的影響。

 

清洗oplog集合的數據,導出主節點 oplog 集合(local庫oplog.rs)

#拉取oplog.rs
sudo mongodump 
	--db=local 
	--collection=oplog.rs 
	--query='{$and:[{ "ts" : { "$gte" : Timestamp(1578441670, 3) }}]}' 
	--host xx.xxx.xxx.xxx 
	--port xxxxx 
	--authenticationDatabase admin 
	-u admin 
	-p admin 
	-o ./backupdir

 

備份延時節點

 

將延時節點恢復到另一個副本集中

 

重放oplog

#重放oplog	
sudo mongorestore 
	--host xx.xxx.xxx.xxx
	--port xxxxx
	-u admin 
	-p admin 
	--authenticationDatabase admin 
	--oplogReplay 
	--dir ./backupdir

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了15 篇原創文章 · 獲贊 6 · 訪問量 3584
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章